static int do_extract(struct archive *a, struct archive_entry *ae) { int retcode = EPKG_OK; int ret = 0; char path[MAXPATHLEN]; struct stat st; do { const char *pathname = archive_entry_pathname(ae); ret = archive_read_extract(a, ae, EXTRACT_ARCHIVE_FLAGS); if (ret != ARCHIVE_OK) { /* * show error except when the failure is during * extracting a directory and that the directory already * exists. * this allow to install packages linux_base from * package for example */ if (archive_entry_filetype(ae) != AE_IFDIR || !is_dir(pathname)) { pkg_emit_error("archive_read_extract(): %s", archive_error_string(a)); retcode = EPKG_FATAL; goto cleanup; } } /* * if the file is a configuration file and the configuration * file does not already exist on the file system, then * extract it * ex: conf1.cfg.pkgconf: * if conf1.cfg doesn't exists create it based on * conf1.cfg.pkgconf */ if (is_conf_file(pathname, path, sizeof(path)) && lstat(path, &st) == -1 && errno == ENOENT) { archive_entry_set_pathname(ae, path); ret = archive_read_extract(a,ae, EXTRACT_ARCHIVE_FLAGS); if (ret != ARCHIVE_OK) { pkg_emit_error("archive_read_extract(): %s", archive_error_string(a)); retcode = EPKG_FATAL; goto cleanup; } } } while ((ret = archive_read_next_header(a, &ae)) == ARCHIVE_OK); if (ret != ARCHIVE_EOF) { pkg_emit_error("archive_read_next_header(): %s", archive_error_string(a)); retcode = EPKG_FATAL; } cleanup: return (retcode); }
int is_old_config(void) { const char *const myvifmrc = env_get(MYVIFMRC_EV); return (myvifmrc != NULL) && is_conf_file(myvifmrc); }