diff --git a/src/main.c b/src/main.c index c56c933a..a44540eb 100644 --- a/src/main.c +++ b/src/main.c @@ -362,6 +362,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 +424,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/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_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'. 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 + if (quell_progress == 0) { if (isatty (STDERR_FILENO)) update_progress = update_progress_tty;