@@ -131,27 +131,12 @@ void check_add_file(char *filename, bool given) | |||||
memset(&files[filecnt/2], 0, filecnt/2 * sizeof(*files)); | 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) { | if ((files[fileidx].path = realpath(filename, NULL)) == NULL) { | ||||
warn("could not get real path of file: %s\n", filename); | warn("could not get real path of file: %s\n", filename); | ||||
return; | 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); | 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') | if ((bn = strrchr(files[fileidx].name , '/')) != NULL && bn[1] != '\0') | ||||
files[fileidx].base = ++bn; | files[fileidx].base = ++bn; | ||||
else | else | ||||
@@ -106,74 +106,6 @@ void size_readable(float *size, const char **unit) | |||||
*unit = units[MIN(i, ARRLEN(units) - 1)]; | *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) | int r_opendir(r_dir_t *rdir, const char *dirname) | ||||
{ | { | ||||
if (*dirname == '\0') | if (*dirname == '\0') | ||||
@@ -70,8 +70,6 @@ void die(const char*, ...); | |||||
void size_readable(float*, const char**); | void size_readable(float*, const char**); | ||||
char* absolute_path(const char*); | |||||
int r_opendir(r_dir_t*, const char*); | int r_opendir(r_dir_t*, const char*); | ||||
int r_closedir(r_dir_t*); | int r_closedir(r_dir_t*); | ||||
char* r_readdir(r_dir_t*); | char* r_readdir(r_dir_t*); | ||||