/*
- Copyright 2015 IoT.bzh
+ Copyright (C) 2015-2019 IoT.bzh
author: José Bollo <jose.bollo@iot.bzh>
#include "wgtpkg-workdir.h"
#include "utils-dir.h"
-static const int dirmode = 0755;
+static const mode_t dirmode = 0755;
char workdir[PATH_MAX] = { 0, };
int workdirfd = -1;
workdir[1] = 0;
workdirfd = AT_FDCWD;
} else {
-
+
assert(length < sizeof workdir);
memcpy(workdir, name, 1 + length);
workdirfd = fd;
return -1;
}
+ /* check if . */
+ if (length == 1 && name[0] == '.') {
+ put_workdir(AT_FDCWD, name, length);
+ return 0;
+ }
+
/* opens the directory */
dirfd = openat(AT_FDCWD, name, O_PATH|O_DIRECTORY|O_RDONLY);
if (dirfd < 0) {
put_workdir(AT_FDCWD, ".", 1);
n = snprintf(workdir, sizeof workdir, "%s/%s", root, prefix);
- if (n >= sizeof workdir) {
+ if (n >= (int)sizeof workdir) {
ERROR("workdir prefix too long");
errno = EINVAL;
return -1;
ERROR("exhaustion of workdirs");
return -1;
}
- l = snprintf(workdir + n, r, "%d", i);
+ l = snprintf(workdir + n, (unsigned)r, "%d", i);
if (l >= r) {
ERROR("computed workdir too long");
errno = EINVAL;
int move_workdir(const char *dest, int parents, int force)
{
- int rc, len;
+ int rc;
+ size_t len;
struct stat s;
char *copy;
const char *iter;
} else {
/* check parent of dest */
iter = strrchr(dest, '/');
- len = iter ? iter - dest : 0;
+ len = iter ? (size_t)(iter - dest) : 0;
if (len) {
/* is parent existing? */
copy = strndupa(dest, len);