Merge pull request #801 from dl8dtl/conffile-clean-up
Conffile clean up
This commit is contained in:
commit
539eec79e6
|
@ -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 */
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ 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;
|
||||
}
|
||||
|
||||
|
@ -44,7 +44,7 @@ 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;
|
||||
}
|
||||
|
||||
|
|
254
src/main.c
254
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. <dirpath of executable>/../etc/avrdude.conf
|
||||
* 2. <dirpath of executable>/avrdude.conf
|
||||
* 3. CONFIG_DIR/avrdude.conf
|
||||
*
|
||||
* When found, write the result into the 'sys_config' variable.
|
||||
*/
|
||||
if (executable_abspath_found) {
|
||||
// 1. Check <dirpath of executable>/../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 <dirpath of executable>/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<len; i++)
|
||||
progbuf[i] = ' ';
|
||||
|
@ -764,6 +652,122 @@ int main(int argc, char * argv [])
|
|||
}
|
||||
}
|
||||
|
||||
/* search for system configuration file unless -C conffile was given */
|
||||
if (strlen(sys_config) == 0) {
|
||||
/*
|
||||
* 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_backslashes(executable_abspath);
|
||||
|
||||
// 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_DEBUG, "executable_abspath = %s\n", executable_abspath);
|
||||
avrdude_message(MSG_DEBUG, "executable_abspath_len = %i\n", executable_abspath_len);
|
||||
avrdude_message(MSG_DEBUG, "executable_dirpath = %s\n", executable_dirpath);
|
||||
avrdude_message(MSG_DEBUG, "executable_dirpath_len = %i\n", executable_dirpath_len);
|
||||
}
|
||||
|
||||
/*
|
||||
* SYSTEM CONFIG
|
||||
* -------------
|
||||
* Determine the location of 'avrdude.conf'. Check in this order:
|
||||
* 1. <dirpath of executable>/../etc/avrdude.conf
|
||||
* 2. <dirpath of executable>/avrdude.conf
|
||||
* 3. CONFIG_DIR/avrdude.conf
|
||||
*
|
||||
* When found, write the result into the 'sys_config' variable.
|
||||
*/
|
||||
if (executable_abspath_found) {
|
||||
// 1. Check <dirpath of executable>/../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 <dirpath of executable>/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;
|
||||
|
|
Loading…
Reference in New Issue