int pkg_delete_dirs(__unused struct pkgdb *db, struct pkg *pkg, bool force) { struct pkg_dir *dir = NULL; ucl_object_t *obj; char fpath[MAXPATHLEN]; while (pkg_dirs(pkg, &dir) == EPKG_OK) { if (dir->keep == 1) continue; obj = pkg_annotation_lookup(pkg, "relocated"); snprintf(fpath, sizeof(fpath), "%s%s", obj ? pkg_object_string(obj) : "" , pkg_dir_path(dir) ); if (pkg_dir_try(dir)) { if (rmdir(fpath) == -1 && errno != ENOTEMPTY && errno != EBUSY && !force) pkg_emit_errno("rmdir", fpath); } else { if (rmdir(fpath) == -1 && !force) pkg_emit_errno("rmdir", fpath); } } return (EPKG_OK); }
int pkg_delete_dirs(struct pkgdb *db, struct pkg *pkg, int force) { struct pkg_dir *dir = NULL; int64_t nbpackage; while (pkg_dirs(pkg, &dir) == EPKG_OK) { nbpackage = 0; if (pkgdb_is_dir_used(db, pkg_dir_path(dir), &nbpackage) != EPKG_OK) return (EPKG_FATAL); if (nbpackage > 1) continue; if (pkg_dir_try(dir)) { if (rmdir(pkg_dir_path(dir)) == -1 && errno != ENOTEMPTY && force != 1) pkg_emit_errno("rmdir", pkg_dir_path(dir)); } else { if (rmdir(pkg_dir_path(dir)) == -1 && force != 1) pkg_emit_errno("rmdir", pkg_dir_path(dir)); } } return (EPKG_OK); }
int pkg_delete_dirs(__unused struct pkgdb *db, struct pkg *pkg, bool force) { struct pkg_dir *dir = NULL; while (pkg_dirs(pkg, &dir) == EPKG_OK) { if (dir->keep == 1) continue; if (pkg_dir_try(dir)) { if (rmdir(pkg_dir_path(dir)) == -1 && errno != ENOTEMPTY && errno != EBUSY && !force) pkg_emit_errno("rmdir", pkg_dir_path(dir)); } else { if (rmdir(pkg_dir_path(dir)) == -1 && !force) pkg_emit_errno("rmdir", pkg_dir_path(dir)); } } return (EPKG_OK); }
int pkg_old_emit_content(struct pkg *pkg, char **dest) { struct sbuf *content = sbuf_new_auto(); struct pkg_dep *dep = NULL; struct pkg_file *file = NULL; struct pkg_dir *dir = NULL; struct pkg_option *option = NULL; char option_type = 0; pkg_sbuf_printf(content, "@comment PKG_FORMAT_REVISION:1.1\n" "@name %n-%v\n" "@comment ORIGIN:%o\n" "@cwd %p\n" /* hack because we can recreate the prefix split or origin */ "@cwd /\n", pkg, pkg, pkg, pkg); while (pkg_deps(pkg, &dep) == EPKG_OK) { sbuf_printf(content, "@pkgdep %s-%s\n" "@comment DEPORIGIN:%s\n", pkg_dep_name(dep), pkg_dep_version(dep), pkg_dep_origin(dep)); } while (pkg_files(pkg, &file) == EPKG_OK) { sbuf_printf(content, "%s\n" "@comment MD5:%s\n", pkg_file_path(file) + 1, pkg_file_cksum(file)); } while (pkg_dirs(pkg, &dir) == EPKG_OK) { if (pkg_dir_try(dir)) { sbuf_printf(content, "@dirrm %s\n", pkg_dir_path(dir)); } else { sbuf_printf(content, "@unexec /sbin/rmdir \"%s\" 2>/dev/null\n", pkg_dir_path(dir)); } } sbuf_printf(content, "@comment OPTIONS:"); while (pkg_options(pkg, &option) == EPKG_OK) { /* Add space for previous option, if not the first. */ if (option_type != 0) sbuf_cat(content, " "); if (strcmp(pkg_option_value(option), "on") == 0) option_type = '+'; else option_type = '-'; sbuf_printf(content, "%c%s", option_type, pkg_option_opt(option)); } sbuf_printf(content, "\n"); sbuf_finish(content); *dest = strdup(sbuf_get(content)); sbuf_delete(content); return (EPKG_OK); }