X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=wgtpkg-workdir.c;fp=wgtpkg-workdir.c;h=0000000000000000000000000000000000000000;hb=bf7b5918fcc07713a29b9ca32f766b65b15a4ec2;hp=0c184a5b6e5e2ec461ed9b57716a548bbfac6d9c;hpb=0270b7281b783cbea5c1f0ebb4440d2be1bd79fa;p=src%2Fapp-framework-main.git diff --git a/wgtpkg-workdir.c b/wgtpkg-workdir.c deleted file mode 100644 index 0c184a5..0000000 --- a/wgtpkg-workdir.c +++ /dev/null @@ -1,166 +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. -*/ - - -#include -#include -#include -#include -#include -#include - -#include "wgtpkg.h" - -#ifndef PREDIR -#define PREDIR "./" -#endif - -static int mode = 0700; -static char workdir[PATH_MAX]; - -/* removes recursively the content of a directory */ -static int clean_dir() -{ - int cr; - DIR *dir; - struct dirent *ent; - struct { - struct dirent entry; - char spare[PATH_MAX]; - } entry; - - dir = opendir("."); - if (dir == NULL) { - syslog(LOG_ERR, "opendir failed in clean_dir"); - return -1; - } - - cr = -1; - for (;;) { - if (readdir_r(dir, &entry.entry, &ent) != 0) { - syslog(LOG_ERR, "readdir_r failed in clean_dir"); - goto error; - } - if (ent == NULL) - break; - if (ent->d_name[0] == '.' && (ent->d_name[1] == 0 - || (ent->d_name[1] == '.' && ent->d_name[2] == 0))) - continue; - cr = unlink(ent->d_name); - if (!cr) - continue; - if (errno != EISDIR) { - syslog(LOG_ERR, "unlink of %s failed in clean_dir", ent->d_name); - goto error; - } - if (chdir(ent->d_name)) { - syslog(LOG_ERR, "enter directory %s failed in clean_dir", ent->d_name); - goto error; - } - cr = clean_dir(); - if (cr) - goto error; - if (chdir("..")) - goto error; - cr = rmdir(ent->d_name); - if (cr) { - syslog(LOG_ERR, "rmdir of %s failed in clean_dir", ent->d_name); - goto error; - } - } - cr = 0; -error: - closedir(dir); - return cr; -} - -/* removes the content of the working directory */ -int enter_workdir(int clean) -{ - int rc = chdir(workdir); - if (rc) - syslog(LOG_ERR, "entring workdir %s failed", workdir); - else if (clean) - rc = clean_dir(); - return rc; -} - -/* removes the working directory */ -void remove_workdir() -{ - enter_workdir(1); - chdir(".."); - unlink(workdir); -} - -int set_workdir(const char *name, int create) -{ - int rc; - size_t length; - struct stat s; - - /* check the length */ - length = strlen(name); - if (length >= sizeof workdir) { - syslog(LOG_ERR, "workdir name too long"); - return -1; - } - - rc = stat(name, &s); - if (rc) { - if (!create) { - syslog(LOG_ERR, "no workdir %s", name); - return -1; - } - rc = mkdir(name, mode); - if (rc) { - syslog(LOG_ERR, "can't create workdir %s", name); - return -1; - } - - } else if (!S_ISDIR(s.st_mode)) { - syslog(LOG_ERR, "%s isn't a directory", name); - return -1; - } - memcpy(workdir, name, 1+length); - return 0; -} - -/* install the widgets of the list */ -int make_workdir(int reuse) -{ - int i; - - /* create a temporary directory */ - for (i = 0 ; ; i++) { - if (i == INT_MAX) { - syslog(LOG_ERR, "exhaustion of workdirs"); - return -1; - } - sprintf(workdir, PREDIR "PACK%d", i); - if (!mkdir(workdir, mode)) - break; - if (errno != EEXIST) { - syslog(LOG_ERR, "error in creation of workdir %s: %m", workdir); - return -1; - } - if (reuse) - break; - } - - return 0; -} -