diff options
author | Bert Münnich <ber.t@posteo.de> | 2015-10-28 21:52:41 +0100 |
---|---|---|
committer | Bert Münnich <ber.t@posteo.de> | 2015-10-28 21:52:41 +0100 |
commit | 9a7e97cd89b307ecc0cd2f304919b576cb5704d1 (patch) | |
tree | f1465f286d2cec6f5bdbdf18ffbf662cdeb181b8 | |
parent | 66c3c55759a7ee23af75657215a2fd0e1aa39558 (diff) |
Use XSI realpath(3)
-rw-r--r-- | main.c | 15 | ||||
-rw-r--r-- | util.c | 68 | ||||
-rw-r--r-- | util.h | 2 |
3 files changed, 0 insertions, 85 deletions
@@ -131,27 +131,12 @@ void check_add_file(char *filename, bool given) memset(&files[filecnt/2], 0, filecnt/2 * sizeof(*files)); } -#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 != '/') { - 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].name = s_strdup(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; else @@ -106,74 +106,6 @@ void size_readable(float *size, const char **unit) *unit = units[MIN(i, ARRLEN(units) - 1)]; } -char* absolute_path(const char *filename) -{ - size_t len; - const char *basename; - char *dir, *dirname = NULL, *path = NULL, *s; - char *cwd = NULL, *twd = NULL; - - if (*filename == '\0' || *filename == '/') - return NULL; - - len = FNAME_LEN; - cwd = (char*) s_malloc(len); - while ((s = getcwd(cwd, len)) == NULL && errno == ERANGE) { - len *= 2; - cwd = (char*) s_realloc(cwd, len); - } - if (s == NULL) - goto error; - - s = strrchr(filename, '/'); - if (s != NULL) { - len = s - filename; - dirname = (char*) s_malloc(len + 1); - strncpy(dirname, filename, len); - dirname[len] = '\0'; - basename = s + 1; - - if (chdir(cwd) < 0) - /* we're not able to come back afterwards */ - goto error; - if (chdir(dirname) < 0) - goto error; - - len = FNAME_LEN; - twd = (char*) s_malloc(len); - while ((s = getcwd(twd, len)) == NULL && errno == ERANGE) { - len *= 2; - twd = (char*) s_realloc(twd, len); - } - if (chdir(cwd) < 0) - die("could not revert to prior working directory"); - if (s == NULL) - goto error; - dir = twd; - } else { - /* only a single filename given */ - basename = filename; - dir = cwd; - } - - len = strlen(dir) + strlen(basename) + 2; - path = (char*) s_malloc(len); - snprintf(path, len, "%s/%s", dir, basename); - - goto end; - -error: - free(path); - path = NULL; - -end: - free(dirname); - free(cwd); - free(twd); - - return path; -} - int r_opendir(r_dir_t *rdir, const char *dirname) { if (*dirname == '\0') @@ -70,8 +70,6 @@ void die(const char*, ...); void size_readable(float*, const char**); -char* absolute_path(const char*); - int r_opendir(r_dir_t*, const char*); int r_closedir(r_dir_t*); char* r_readdir(r_dir_t*); |