mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-01 01:23:24 +00:00
linux.c: update the default path retrieval
- added system_default_directory() - both system_default_directory() and system_default_filename() now use the helper system_default_path_append() - less safer compared to windows.c, assuming the OS is stricter on which environment variables exist! [Dirk Hohndel: switched filename to be dynamically allocated to avoid possible buffer overflow] Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
ed98d3bc60
commit
e8a868aae2
1 changed files with 42 additions and 12 deletions
54
linux.c
54
linux.c
|
@ -48,24 +48,54 @@ void subsurface_user_info(struct user_info *user)
|
|||
}
|
||||
}
|
||||
|
||||
const char *system_default_filename(void)
|
||||
static const char *system_default_path_append(const char *append)
|
||||
{
|
||||
const char *home, *user;
|
||||
char *buffer;
|
||||
int len;
|
||||
|
||||
home = getenv("HOME");
|
||||
const char *home = getenv("HOME");
|
||||
if (!home)
|
||||
home = "~";
|
||||
user = getenv("LOGNAME");
|
||||
if (!user)
|
||||
user = "default";
|
||||
len = strlen(home) + strlen(user) + 17;
|
||||
buffer = malloc(len);
|
||||
snprintf(buffer, len, "%s/subsurface/%s.xml", home, user);
|
||||
const char *path = "/subsurface";
|
||||
|
||||
int len = strlen(home) + strlen(path) + 1;
|
||||
if (append)
|
||||
len += strlen(append) + 1;
|
||||
|
||||
char *buffer = (char *)malloc(len);
|
||||
memset(buffer, 0, len);
|
||||
strcat(buffer, home);
|
||||
strcat(buffer, path);
|
||||
if (append) {
|
||||
strcat(buffer, "/");
|
||||
strcat(buffer, append);
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
const char *system_default_directory(void)
|
||||
{
|
||||
static const char *path = NULL;
|
||||
if (!path)
|
||||
path = system_default_path_append(NULL);
|
||||
return path;
|
||||
}
|
||||
|
||||
const char *system_default_filename(void)
|
||||
{
|
||||
static char *filename = NULL;
|
||||
if (!filename) {
|
||||
const char *user = getenv("LOGNAME");
|
||||
if (same_string(user, ""))
|
||||
user = "username";
|
||||
filename = malloc(strlen(user) + 5);
|
||||
strcat(filename, user);
|
||||
strcat(filename, ".xml");
|
||||
}
|
||||
static const char *path = NULL;
|
||||
if (!path)
|
||||
path = system_default_path_append(filename);
|
||||
return path;
|
||||
}
|
||||
|
||||
int enumerate_devices(device_callback_t callback, void *userdata, int dc_type)
|
||||
{
|
||||
int index = -1, entries = 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue