diff options
author | 2015-12-09 14:35:04 +0100 | |
---|---|---|
committer | 2015-12-09 14:35:04 +0100 | |
commit | bf7b5918fcc07713a29b9ca32f766b65b15a4ec2 (patch) | |
tree | a4ad318995f3213cee35a2065fc3c4911e2012dc /wgt-rootdir.c | |
parent | 0270b7281b783cbea5c1f0ebb4440d2be1bd79fa (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.c | 97 |
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); -} - |