diff --git a/src/avrdude.h b/src/avrdude.h index 738578f1..b4c7ee87 100644 --- a/src/avrdude.h +++ b/src/avrdude.h @@ -21,6 +21,13 @@ #ifndef avrdude_h #define avrdude_h +#define SYSTEM_CONF_FILE "avrdude.conf" +#if defined(WIN32NATIVE) +#define USER_CONF_FILE "avrdude.rc" +#else +#define USER_CONF_FILE ".avrduderc" +#endif + extern char * progname; /* name of program, for messages */ extern char progbuf[]; /* spaces same length as progname */ diff --git a/src/confwin.c b/src/confwin.c index 95446156..1be95e87 100644 --- a/src/confwin.c +++ b/src/confwin.c @@ -32,9 +32,9 @@ static char *filename; void win_sys_config_set(char sys_config[PATH_MAX]) { sys_config[0] = 0; - + /* Use Windows API call to search for the Windows default system config file.*/ - SearchPath(NULL, "avrdude.conf", NULL, PATH_MAX, sys_config, &filename); + SearchPath(NULL, SYSTEM_CONF_FILE, NULL, PATH_MAX, sys_config, &filename); return; } @@ -42,9 +42,9 @@ void win_sys_config_set(char sys_config[PATH_MAX]) void win_usr_config_set(char usr_config[PATH_MAX]) { usr_config[0] = 0; - + /* Use Windows API call to search for the Windows default user config file. */ - SearchPath(NULL, "avrdude.rc", NULL, PATH_MAX, usr_config, &filename); + SearchPath(NULL, USER_CONF_FILE, NULL, PATH_MAX, usr_config, &filename); return; } diff --git a/src/main.c b/src/main.c index c56c933a..94222f56 100644 --- a/src/main.c +++ b/src/main.c @@ -302,6 +302,17 @@ static void cleanup_main(void) cleanup_config(); } +static void replace_backslashes(char *s) +{ + // Replace all backslashes with forward slashes + for (int i = 0; i < strlen(s); i++) { + if (s[i] == '\\') { + s[i] = '/'; + } + } +} + + /* * main routine */ @@ -362,6 +373,8 @@ int main(int argc, char * argv []) setvbuf(stdout, (char*)NULL, _IOLBF, 0); setvbuf(stderr, (char*)NULL, _IOLBF, 0); + sys_config[0] = '\0'; + progname = strrchr(argv[0],'/'); #if defined (WIN32NATIVE) @@ -422,131 +435,6 @@ int main(int argc, char * argv []) is_open = 0; logfile = NULL; - /* - * EXECUTABLE ABSPATH - * ------------------ - * Determine the absolute path to avrdude executable. This will be used to - * locate the 'avrdude.conf' file later. - */ - int executable_dirpath_len; - int executable_abspath_len = wai_getExecutablePath( - executable_abspath, - PATH_MAX, - &executable_dirpath_len - ); - if ( - (executable_abspath_len != -1) && - (executable_abspath_len != 0) && - (executable_dirpath_len != -1) && - (executable_dirpath_len != 0) - ) { - // All requirements satisfied, executable path was found - executable_abspath_found = true; - - // Make sure the string is null terminated - executable_abspath[executable_abspath_len] = '\0'; - - // Replace all backslashes with forward slashes - i = 0; - while (true) { - if (executable_abspath[i] == '\0') { - break; - } - if (executable_abspath[i] == '\\') { - executable_abspath[i] = '/'; - } - i++; - } - - // Define 'executable_dirpath' to be the path to the parent folder of the - // executable. - strcpy(executable_dirpath, executable_abspath); - executable_dirpath[executable_dirpath_len] = '\0'; - - // Debug output - // avrdude_message(MSG_INFO, "executable_abspath = %s\n", executable_abspath); - // avrdude_message(MSG_INFO, "executable_abspath_len = %i\n", executable_abspath_len); - // avrdude_message(MSG_INFO, "executable_dirpath = %s\n", executable_dirpath); - // avrdude_message(MSG_INFO, "executable_dirpath_len = %i\n", executable_dirpath_len); - } - - /* - * SYSTEM CONFIG - * ------------- - * Determine the location of 'avrdude.conf'. Check in this order: - * 1. /../etc/avrdude.conf - * 2. /avrdude.conf - * 3. CONFIG_DIR/avrdude.conf - * - * When found, write the result into the 'sys_config' variable. - */ - if (executable_abspath_found) { - // 1. Check /../etc/avrdude.conf - strcpy(sys_config, executable_dirpath); - sys_config[PATH_MAX - 1] = '\0'; - i = strlen(sys_config); - if (i && (sys_config[i - 1] != '/')) - strcat(sys_config, "/"); - strcat(sys_config, "../etc/avrdude.conf"); - sys_config[PATH_MAX - 1] = '\0'; - if (access(sys_config, F_OK) == 0) { - sys_config_found = true; - } - else { - // 2. Check /avrdude.conf - strcpy(sys_config, executable_dirpath); - sys_config[PATH_MAX - 1] = '\0'; - i = strlen(sys_config); - if (i && (sys_config[i - 1] != '/')) - strcat(sys_config, "/"); - strcat(sys_config, "avrdude.conf"); - sys_config[PATH_MAX - 1] = '\0'; - if (access(sys_config, F_OK) == 0) { - sys_config_found = true; - } - } - } - if (!sys_config_found) { - // 3. Check CONFIG_DIR/avrdude.conf -#if defined(WIN32NATIVE) - win_sys_config_set(sys_config); -#else - strcpy(sys_config, CONFIG_DIR); - i = strlen(sys_config); - if (i && (sys_config[i - 1] != '/')) - strcat(sys_config, "/"); - strcat(sys_config, "avrdude.conf"); -#endif - if (access(sys_config, F_OK) == 0) { - sys_config_found = true; - } - } - // Debug output - // avrdude_message(MSG_INFO, "sys_config = %s\n", sys_config); - // avrdude_message(MSG_INFO, "sys_config_found = %s\n", sys_config_found ? "true" : "false"); - // avrdude_message(MSG_INFO, "\n"); - - /* - * USER CONFIG - * ----------- - * Determine the location of '.avrduderc'. Nothing changed here. - */ -#if defined(WIN32NATIVE) - win_usr_config_set(usr_config); -#else - usr_config[0] = 0; - homedir = getenv("HOME"); - if (homedir != NULL) { - strcpy(usr_config, homedir); - i = strlen(usr_config); - if (i && (usr_config[i - 1] != '/')) - strcat(usr_config, "/"); - strcat(usr_config, ".avrduderc"); - } -#endif - - - len = strlen(progname) + 2; for (i=0; i/../etc/avrdude.conf + * 2. /avrdude.conf + * 3. CONFIG_DIR/avrdude.conf + * + * When found, write the result into the 'sys_config' variable. + */ + if (executable_abspath_found) { + // 1. Check /../etc/avrdude.conf + strcpy(sys_config, executable_dirpath); + sys_config[PATH_MAX - 1] = '\0'; + i = strlen(sys_config); + if (i && (sys_config[i - 1] != '/')) + strcat(sys_config, "/"); + strcat(sys_config, "../etc/" SYSTEM_CONF_FILE); + sys_config[PATH_MAX - 1] = '\0'; + if (access(sys_config, F_OK) == 0) { + sys_config_found = true; + } + else { + // 2. Check /avrdude.conf + strcpy(sys_config, executable_dirpath); + sys_config[PATH_MAX - 1] = '\0'; + i = strlen(sys_config); + if (i && (sys_config[i - 1] != '/')) + strcat(sys_config, "/"); + strcat(sys_config, SYSTEM_CONF_FILE); + sys_config[PATH_MAX - 1] = '\0'; + if (access(sys_config, F_OK) == 0) { + sys_config_found = true; + } + } + } + if (!sys_config_found) { + // 3. Check CONFIG_DIR/avrdude.conf +#if defined(WIN32NATIVE) + win_sys_config_set(sys_config); +#else + strcpy(sys_config, CONFIG_DIR); + i = strlen(sys_config); + if (i && (sys_config[i - 1] != '/')) + strcat(sys_config, "/"); + strcat(sys_config, SYSTEM_CONF_FILE); +#endif + if (access(sys_config, F_OK) == 0) { + sys_config_found = true; + } + } + } + // Debug output + avrdude_message(MSG_DEBUG, "sys_config = %s\n", sys_config); + avrdude_message(MSG_DEBUG, "sys_config_found = %s\n", sys_config_found ? "true" : "false"); + avrdude_message(MSG_DEBUG, "\n"); + + /* + * USER CONFIG + * ----------- + * Determine the location of '.avrduderc'. + */ +#if defined(WIN32NATIVE) + win_usr_config_set(usr_config); +#else + usr_config[0] = 0; + homedir = getenv("HOME"); + if (homedir != NULL) { + strcpy(usr_config, homedir); + i = strlen(usr_config); + if (i && (usr_config[i - 1] != '/')) + strcat(usr_config, "/"); + strcat(usr_config, USER_CONF_FILE); + } +#endif + if (quell_progress == 0) { if (isatty (STDERR_FILENO)) update_progress = update_progress_tty;