From 381842f4c264e5946ad964f43608f7e543fbcb19 Mon Sep 17 00:00:00 2001 From: José Bollo Date: Tue, 8 Dec 2015 14:44:38 +0100 Subject: work relatively to a root directory Change-Id: I7cbb96bd3f699092ddfded8cc8893ec780a97d8c --- wgt-rootdir.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 wgt-rootdir.c (limited to 'wgt-rootdir.c') diff --git a/wgt-rootdir.c b/wgt-rootdir.c new file mode 100644 index 0000000..b7d9066 --- /dev/null +++ b/wgt-rootdir.c @@ -0,0 +1,55 @@ +/* + Copyright 2015 IoT.bzh + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#define _GNU_SOURCE + +#include +#include +#include +#include + +#include "wgt.h" + + +static int rootfd = AT_FDCWD; + +int widget_set_rootdir(const char *pathname) +{ + int rfd; + + if (!pathname) + rfd = AT_FDCWD; + else { + rfd = openat(AT_FDCWD, pathname, O_PATH|O_DIRECTORY); + if (rfd < 0) + return rfd; + } + if (rootfd >= 0) + close(rootfd); + rootfd = AT_FDCWD; + return 0; +} + +int widget_has(const char *filename) +{ + return 0 == faccessat(rootfd, filename, F_OK, 0); +} + +int widget_open_read(const char *filename) +{ + return openat(rootfd, filename, O_RDONLY); +} + -- cgit 1.2.3-korg