aboutsummaryrefslogtreecommitdiffstats
path: root/wgt-rootdir.c
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2015-12-09 14:35:04 +0100
committerJosé Bollo <jose.bollo@iot.bzh>2015-12-09 14:35:04 +0100
commitbf7b5918fcc07713a29b9ca32f766b65b15a4ec2 (patch)
treea4ad318995f3213cee35a2065fc3c4911e2012dc /wgt-rootdir.c
parent0270b7281b783cbea5c1f0ebb4440d2be1bd79fa (diff)
refactoring sources
Change-Id: Id6d52eee86b706958972e9b345ec0d4d1e488146 Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'wgt-rootdir.c')
-rw-r--r--wgt-rootdir.c97
1 files changed, 0 insertions, 97 deletions
diff --git a/wgt-rootdir.c b/wgt-rootdir.c
deleted file mode 100644
index 4df1705..0000000
--- a/wgt-rootdir.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- 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 <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-
-#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;
-}
-
-static int validsubpath(const char *subpath)
-{
- int l = 0, i = 0;
- if (subpath[i] == '/')
- return 0;
- while(subpath[i]) {
- switch(subpath[i++]) {
- case '.':
- if (!subpath[i])
- break;
- if (subpath[i] == '/') {
- i++;
- break;
- }
- if (subpath[i++] == '.') {
- if (!subpath[i]) {
- l--;
- break;
- }
- if (subpath[i++] == '/') {
- l--;
- break;
- }
- }
- default:
- while(subpath[i] && subpath[i] != '/')
- i++;
- l++;
- case '/':
- break;
- }
- }
- return l >= 0;
-}
-
-int widget_has(const char *filename)
-{
- if (!validsubpath(filename)) {
- errno = EINVAL;
- return -1;
- }
- return 0 == faccessat(rootfd, filename, F_OK, 0);
-}
-
-int widget_open_read(const char *filename)
-{
- if (!validsubpath(filename)) {
- errno = EINVAL;
- return -1;
- }
- return openat(rootfd, filename, O_RDONLY);
-}
-