diff options
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 18 |
1 files changed, 15 insertions, 3 deletions
@@ -127,16 +127,28 @@ void check_add_file(char *filename) filecnt *= 2; files = (fileinfo_t*) s_realloc(files, filecnt * sizeof(fileinfo_t)); } + +#if defined _BSD_SOURCE || defined _XOPEN_SOURCE && \ + ((_XOPEN_SOURCE - 0) >= 500 || defined _XOPEN_SOURCE_EXTENDED) + + if ((files[fileidx].path = realpath(filename, NULL)) == NULL) { + warn("could not get real path of file: %s\n", filename); + return; + } +#else if (*filename != '/') { - files[fileidx].path = absolute_path(filename); - if (files[fileidx].path == NULL) { + if ((files[fileidx].path = absolute_path(filename)) == NULL) { warn("could not get absolute path of file: %s\n", filename); return; } + } else { + files[fileidx].path = NULL; } +#endif + files[fileidx].loaded = false; files[fileidx].name = s_strdup(filename); - if (*filename == '/') + if (files[fileidx].path == NULL) files[fileidx].path = files[fileidx].name; if ((bn = strrchr(files[fileidx].name , '/')) != NULL && bn[1] != '\0') files[fileidx].base = ++bn; |