diff options
author | José Bollo <jose.bollo@iot.bzh> | 2015-12-11 14:57:32 +0100 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2015-12-11 14:57:32 +0100 |
commit | 9ab266df6642c6e930e03b3024d7c3d53ef88bbc (patch) | |
tree | 95c7686ad33af3c012a02412938f9b2c0191dc7b /src/wgtpkg-files.c | |
parent | 26d75de504d808191dbadc9a735009a214a789b0 (diff) |
don't change of directory anymore
Change-Id: I9f5906d3e053b3fa0f3000d07c4af3f666fe079a
Diffstat (limited to 'src/wgtpkg-files.c')
-rw-r--r-- | src/wgtpkg-files.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/wgtpkg-files.c b/src/wgtpkg-files.c index 06aac83..8840fa9 100644 --- a/src/wgtpkg-files.c +++ b/src/wgtpkg-files.c @@ -21,6 +21,7 @@ #include <syslog.h> #include <dirent.h> #include <stdio.h> +#include <fcntl.h> #include "wgtpkg.h" @@ -248,20 +249,23 @@ void file_clear_flags() static int fill_files_rec(char name[PATH_MAX], int offset) { - int len, err; + int len, err, fd; DIR *dir; struct dirent *ent; - if (offset == 0) - dir = opendir("."); - else { - dir = opendir(name); - name[offset++] = '/'; + fd = openat(workdirfd, offset ? name : ".", O_DIRECTORY|O_RDONLY); + if (fd < 0) { + syslog(LOG_ERR, "openat %.*s failed in fill_files_rec", offset, name); + return -1; } + dir = fdopendir(fd); if (!dir) { - syslog(LOG_ERR, "opendir %.*s failed in zwr", offset, name); + syslog(LOG_ERR, "opendir %.*s failed in fill_files_rec", offset, name); + close(fd); return -1; } + if (offset) + name[offset++] = '/'; ent = readdir(dir); while (ent != NULL) { |