summaryrefslogtreecommitdiffstats
path: root/src/wgtpkg-files.c
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2015-12-11 14:57:32 +0100
committerJosé Bollo <jose.bollo@iot.bzh>2015-12-11 14:57:32 +0100
commit9ab266df6642c6e930e03b3024d7c3d53ef88bbc (patch)
tree95c7686ad33af3c012a02412938f9b2c0191dc7b /src/wgtpkg-files.c
parent26d75de504d808191dbadc9a735009a214a789b0 (diff)
don't change of directory anymore
Change-Id: I9f5906d3e053b3fa0f3000d07c4af3f666fe079a
Diffstat (limited to 'src/wgtpkg-files.c')
-rw-r--r--src/wgtpkg-files.c18
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) {