config_libconfig: eliminate relative paths from XDG_CONFIG_DIRS
According to the XDG Base Directory Specification, relative paths in XDG_CONFIG_DIRS are invalid, so eliminate them if found. Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
This commit is contained in:
parent
6b9eddae49
commit
529edce2b9
|
@ -66,7 +66,7 @@ const char * const * xdgConfigDirectories(void) {
|
|||
}
|
||||
}
|
||||
|
||||
// Store the string and the result pointers together so it can be
|
||||
// Store the string and the result pointers together so they can be
|
||||
// freed together
|
||||
char **dir_list = cvalloc(sizeof(char *) * (count + 2) + strlen(xdgd) + 1);
|
||||
auto dirs = strcpy((char *)dir_list + sizeof(char *) * (count + 2), xdgd);
|
||||
|
@ -79,7 +79,16 @@ const char * const * xdgConfigDirectories(void) {
|
|||
path++;
|
||||
}
|
||||
dir_list[count] = path;
|
||||
dir_list[count + 1] = NULL;
|
||||
|
||||
size_t fill = 0;
|
||||
for (size_t i = 0; i <= count; i++) {
|
||||
if (dir_list[i][0] == '/') {
|
||||
dir_list[fill] = dir_list[i];
|
||||
fill++;
|
||||
}
|
||||
}
|
||||
|
||||
dir_list[fill] = NULL;
|
||||
|
||||
return (const char * const *)dir_list;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue