本文整理汇总了C++中pkg_config_get函数的典型用法代码示例。如果您正苦于以下问题:C++ pkg_config_get函数的具体用法?C++ pkg_config_get怎么用?C++ pkg_config_get使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pkg_config_get函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: load_repo_file
static void
load_repo_file(const char *repofile, pkg_init_flags flags)
{
struct ucl_parser *p;
ucl_object_t *obj = NULL;
const char *myarch = NULL;
const char *myarch_legacy = NULL;
p = ucl_parser_new(0);
myarch = pkg_object_string(pkg_config_get("ABI"));
ucl_parser_register_variable (p, "ABI", myarch);
myarch_legacy = pkg_object_string(pkg_config_get("ALTABI"));
ucl_parser_register_variable (p, "ALTABI", myarch_legacy);
pkg_debug(1, "PKgConfig: loading %s", repofile);
if (!ucl_parser_add_file(p, repofile)) {
pkg_emit_error("Error parsing: %s: %s", repofile,
ucl_parser_get_error(p));
ucl_parser_free(p);
return;
}
obj = ucl_parser_get_object(p);
if (obj == NULL)
return;
if (obj->type == UCL_OBJECT)
walk_repo_obj(obj, repofile, flags);
ucl_object_unref(obj);
}
开发者ID:dumbbell,项目名称:pkg,代码行数:33,代码来源:pkg_config.c
示例2: set_globals
void
set_globals(void)
{
yes = pkg_object_bool(pkg_config_get("ASSUME_ALWAYS_YES"));
dry_run = 0;
auto_update = pkg_object_bool(pkg_config_get("REPO_AUTOUPDATE"));
case_sensitive = pkg_object_bool(pkg_config_get("CASE_SENSITIVE_MATCH"));
force = 0;
quiet = 0;
newpkgversion = 0;
}
开发者ID:AsherBond,项目名称:pkg,代码行数:11,代码来源:globals.c
示例3: pkg_cache_full_clean
void
pkg_cache_full_clean(void)
{
const char *cachedir;
if (!pkg_object_bool(pkg_config_get("AUTOCLEAN")))
return;
pkg_debug(1, "Cleaning up cachedir");
cachedir = pkg_object_string(pkg_config_get("PKG_CACHEDIR"));
return (rm_rf(cachedir));
}
开发者ID:ChunHungLiu,项目名称:pkg,代码行数:14,代码来源:clean_cache.c
示例4: filter_system_shlibs
static int
filter_system_shlibs(const char *name, char *path, size_t pathlen)
{
const char *shlib_path;
shlib_path = shlib_list_find_by_name(name);
if (shlib_path == NULL) {
/* dynamic linker could not resolve */
return (EPKG_FATAL);
}
if (pkg_object_bool(pkg_config_get("ALLOW_BASE_SHLIBS"))) {
if (strstr(shlib_path, "/lib32/") != NULL)
return (EPKG_END);
} else {
/* match /lib, /lib32, /usr/lib and /usr/lib32 */
if (strncmp(shlib_path, "/lib", 4) == 0 ||
strncmp(shlib_path, "/usr/lib", 8) == 0)
return (EPKG_END); /* ignore libs from base */
}
if (path != NULL)
strncpy(path, shlib_path, pathlen);
return (EPKG_OK);
}
开发者ID:ctuffli,项目名称:pkg,代码行数:26,代码来源:pkg_elf.c
示例5: is_valid_abi
bool
is_valid_abi(const char *arch, bool emit_error) {
const char *myarch, *myarch_legacy;
myarch = pkg_object_string(pkg_config_get("ABI"));
myarch_legacy = pkg_object_string(pkg_config_get("ALTABI"));
if (fnmatch(arch, myarch, FNM_CASEFOLD) == FNM_NOMATCH &&
strncasecmp(arch, myarch, strlen(myarch)) != 0 &&
strncasecmp(arch, myarch_legacy, strlen(myarch_legacy)) != 0) {
if (emit_error)
pkg_emit_error("wrong architecture: %s instead of %s",
arch, myarch);
return (false);
}
return (true);
}
开发者ID:baitisj,项目名称:pkg,代码行数:18,代码来源:utils.c
示例6: load_repositories
static void
load_repositories(const char *repodir, pkg_init_flags flags)
{
const pkg_object *reposlist, *cur;
pkg_iter it = NULL;
if (repodir != NULL) {
load_repo_files(repodir, flags);
return;
}
reposlist = pkg_config_get( "REPOS_DIR");
while ((cur = pkg_object_iterate(reposlist, &it)))
load_repo_files(pkg_object_string(cur), flags);
}
开发者ID:dumbbell,项目名称:pkg,代码行数:15,代码来源:pkg_config.c
示例7: pkg_repo_binary_access
int
pkg_repo_binary_access(struct pkg_repo *repo, unsigned mode)
{
const pkg_object *o;
const char *dbdir;
int ret = EPKG_OK;
o = pkg_config_get("PKG_DBDIR");
dbdir = pkg_object_string(o);
ret = pkgdb_check_access(mode, dbdir,
pkg_repo_binary_get_filename(pkg_repo_name(repo)));
return (ret);
}
开发者ID:dpl0,项目名称:pkg,代码行数:15,代码来源:init.c
示例8: load_repo_file
static void
load_repo_file(const char *repofile)
{
struct ucl_parser *p;
ucl_object_t *obj = NULL;
bool fallback = false;
const char *myarch = NULL;
p = ucl_parser_new(0);
myarch = pkg_object_string(pkg_config_get("ABI"));
ucl_parser_register_variable (p, "ABI", myarch);
pkg_debug(1, "PKgConfig: loading %s", repofile);
if (!ucl_parser_add_file(p, repofile)) {
pkg_emit_error("Error parsing: %s: %s", repofile,
ucl_parser_get_error(p));
if (errno == ENOENT) {
ucl_parser_free(p);
return;
}
fallback = true;
}
if (fallback) {
obj = yaml_to_ucl(repofile, NULL, 0);
if (obj == NULL)
return;
}
if (fallback) {
pkg_emit_error("%s file is using a deprecated format. "
"Please replace it with the following:\n"
"====== BEGIN %s ======\n"
"%s"
"\n====== END %s ======\n",
repofile, repofile,
ucl_object_emit(obj, UCL_EMIT_YAML),
repofile);
}
obj = ucl_parser_get_object(p);
if (obj->type == UCL_OBJECT)
walk_repo_obj(obj, repofile);
ucl_object_free(obj);
}
开发者ID:rottenbytes,项目名称:pkg,代码行数:48,代码来源:pkg_config.c
示例9: pkg_emit_deinstall_finished
void
pkg_emit_deinstall_finished(struct pkg *p)
{
struct pkg_event ev;
bool syslog_enabled = false;
ev.type = PKG_EVENT_DEINSTALL_FINISHED;
ev.e_deinstall_finished.pkg = p;
syslog_enabled = pkg_object_bool(pkg_config_get("SYSLOG"));
if (syslog_enabled) {
syslog(LOG_NOTICE, "%s-%s deinstalled",
p->name, p->version);
}
pkg_emit_event(&ev);
}
开发者ID:grembo,项目名称:pkg,代码行数:17,代码来源:pkg_event.c
示例10: pkg_emit_install_finished
void
pkg_emit_install_finished(struct pkg *p)
{
struct pkg_event ev;
bool syslog_enabled = false;
char *name, *version;
ev.type = PKG_EVENT_INSTALL_FINISHED;
ev.e_install_finished.pkg = p;
syslog_enabled = pkg_object_bool(pkg_config_get("SYSLOG"));
if (syslog_enabled) {
pkg_get(p, PKG_NAME, &name, PKG_VERSION, &version);
syslog(LOG_NOTICE, "%s-%s installed", name, version);
}
pkg_emit_event(&ev);
}
开发者ID:bdrewery,项目名称:pkgng,代码行数:18,代码来源:pkg_event.c
示例11: pkg_compiled_for_same_os_major
bool
pkg_compiled_for_same_os_major(void)
{
#ifdef OSMAJOR
const char *myabi;
int osmajor;
myabi = pkg_object_string(pkg_config_get("ABI"));
myabi = strchr(myabi,':');
myabi++;
osmajor = (int) strtol(myabi, NULL, 10);
return (osmajor == OSMAJOR);
#else
return (true); /* Can't tell, so assume yes */
#endif
}
开发者ID:dumbbell,项目名称:pkg,代码行数:18,代码来源:pkg_config.c
示例12: pkg_repo_binary_get_cached_name
int
pkg_repo_binary_get_cached_name(struct pkg_repo *repo, struct pkg *pkg,
char *dest, size_t destlen)
{
const char *ext = NULL;
const char *cachedir = NULL;
const char *packagesite;
struct stat st;
cachedir = pkg_object_string(pkg_config_get("PKG_CACHEDIR"));
packagesite = pkg_repo_url(repo);
if (strncmp(packagesite, "file://", 7) == 0) {
snprintf(dest, destlen, "%s/%s", packagesite + 7,
pkg->repopath);
return (EPKG_OK);
}
if (pkg->repopath != NULL)
ext = strrchr(pkg->repopath, '.');
if (ext != NULL) {
/*
* The real naming scheme:
* <cachedir>/<name>-<version>-<checksum>.txz
*/
pkg_snprintf(dest, destlen, "%S/%n-%v-%z%S",
cachedir, pkg, pkg, pkg, ext);
if (stat (dest, &st) == -1 || pkg->pkgsize != st.st_size)
return (EPKG_FATAL);
}
else {
pkg_snprintf(dest, destlen, "%S/%n-%v-%z",
cachedir, pkg, pkg, pkg);
}
return (EPKG_OK);
}
开发者ID:Moscarda,项目名称:pkg,代码行数:40,代码来源:fetch.c
示例13: pkg_repo_binary_get_cached_name
void
pkg_repo_binary_get_cached_name(struct pkg_repo *repo, struct pkg *pkg,
char *dest, size_t destlen)
{
const char *sum, *name, *version, *repourl, *ext = NULL;
const char *cachedir = NULL;
struct stat st;
cachedir = pkg_object_string(pkg_config_get("PKG_CACHEDIR"));
pkg_get(pkg, PKG_CKSUM, &sum, PKG_NAME, &name, PKG_VERSION, &version,
PKG_REPOPATH, &repourl);
if (repourl != NULL)
ext = strrchr(repourl, '.');
if (ext != NULL) {
/*
* XXX:
* This code tries to skip refetching but it should be removed as soon
* as we transfer to new scheme.
*/
pkg_snprintf(dest, destlen, "%S/%n-%v-%z",
cachedir, pkg, pkg, pkg);
if (stat (dest, &st) != -1)
return;
/*
* The real naming scheme:
* <cachedir>/<name>-<version>-<checksum>.txz
*/
pkg_snprintf(dest, destlen, "%S/%n-%v-%z%S",
cachedir, pkg, pkg, pkg, ext);
}
else {
pkg_snprintf(dest, destlen, "%S/%n-%v-%z",
cachedir, pkg, pkg, pkg);
}
}
开发者ID:vianaweb,项目名称:pkg,代码行数:39,代码来源:fetch.c
示例14: add_repo
//.........这里部分代码省略.........
pubkey = ucl_object_tostring(cur);
} else if (strcasecmp(key, "mirror_type") == 0) {
if (cur->type != UCL_STRING) {
pkg_emit_error("Expecting a string for the "
"'%s' key of the '%s' repo",
key, rname);
return;
}
mirror_type = ucl_object_tostring(cur);
} else if (strcasecmp(key, "signature_type") == 0) {
if (cur->type != UCL_STRING) {
pkg_emit_error("Expecting a string for the "
"'%s' key of the '%s' repo",
key, rname);
return;
}
signature_type = ucl_object_tostring(cur);
} else if (strcasecmp(key, "fingerprints") == 0) {
if (cur->type != UCL_STRING) {
pkg_emit_error("Expecting a string for the "
"'%s' key of the '%s' repo",
key, rname);
return;
}
fingerprints = ucl_object_tostring(cur);
} else if (strcasecmp(key, "type") == 0) {
if (cur->type != UCL_STRING) {
pkg_emit_error("Expecting a string for the "
"'%s' key of the '%s' repo",
key, rname);
return;
}
type = ucl_object_tostring(cur);
} else if (strcasecmp(key, "ip_version") == 0) {
if (cur->type != UCL_INT) {
pkg_emit_error("Expecting a integer for the "
"'%s' key of the '%s' repo",
key, rname);
return;
}
use_ipvx = ucl_object_toint(cur);
if (use_ipvx != 4 && use_ipvx != 6)
use_ipvx = 0;
}
}
if (r == NULL && url == NULL) {
pkg_debug(1, "No repo and no url for %s", rname);
return;
}
if (r == NULL)
r = pkg_repo_new(rname, url, type);
else
pkg_repo_overwrite(r, rname, url, type);
if (signature_type != NULL) {
if (strcasecmp(signature_type, "pubkey") == 0)
r->signature_type = SIG_PUBKEY;
else if (strcasecmp(signature_type, "fingerprints") == 0)
r->signature_type = SIG_FINGERPRINT;
else
r->signature_type = SIG_NONE;
}
if (fingerprints != NULL) {
free(r->fingerprints);
r->fingerprints = strdup(fingerprints);
}
if (pubkey != NULL) {
free(r->pubkey);
r->pubkey = strdup(pubkey);
}
r->enable = enable;
if (mirror_type != NULL) {
if (strcasecmp(mirror_type, "srv") == 0)
r->mirror_type = SRV;
else if (strcasecmp(mirror_type, "http") == 0)
r->mirror_type = HTTP;
else
r->mirror_type = NOMIRROR;
}
if ((flags & PKG_INIT_FLAG_USE_IPV4) == PKG_INIT_FLAG_USE_IPV4)
use_ipvx = 4;
else if ((flags & PKG_INIT_FLAG_USE_IPV6) == PKG_INIT_FLAG_USE_IPV6)
use_ipvx = 6;
if (use_ipvx != 4 && use_ipvx != 6)
use_ipvx = pkg_object_int(pkg_config_get("IP_VERSION"));
if (use_ipvx == 4)
r->flags = REPO_FLAGS_USE_IPV4;
else if (use_ipvx == 6)
r->flags = REPO_FLAGS_USE_IPV6;
}
开发者ID:dumbbell,项目名称:pkg,代码行数:101,代码来源:pkg_config.c
示例15: do_extract
static int
do_extract(struct archive *a, struct archive_entry *ae, const char *location,
int nfiles, struct pkg *pkg, struct pkg *local)
{
int retcode = EPKG_OK;
int ret = 0, cur_file = 0;
char path[MAXPATHLEN], pathname[MAXPATHLEN], rpath[MAXPATHLEN];
struct stat st;
const struct stat *aest;
bool renamed = false;
const struct pkg_file *rf;
struct pkg_config_file *rcf;
struct sbuf *newconf;
bool automerge = pkg_object_bool(pkg_config_get("AUTOMERGE"));
unsigned long set, clear;
#ifndef HAVE_ARC4RANDOM
srand(time(NULL));
#endif
if (nfiles == 0)
return (EPKG_OK);
pkg_emit_extract_begin(pkg);
pkg_emit_progress_start(NULL);
newconf = sbuf_new_auto();
do {
ret = ARCHIVE_OK;
sbuf_clear(newconf);
rf = NULL;
rcf = NULL;
pkg_absolutepath(archive_entry_pathname(ae), path, sizeof(path));
snprintf(pathname, sizeof(pathname), "%s%s%s",
location ? location : "", *path == '/' ? "" : "/",
path
);
strlcpy(rpath, pathname, sizeof(rpath));
aest = archive_entry_stat(ae);
archive_entry_fflags(ae, &set, &clear);
if (lstat(rpath, &st) != -1) {
/*
* We have an existing file on the path, so handle it
*/
if (!S_ISDIR(aest->st_mode)) {
pkg_debug(2, "Old version found, renaming");
pkg_add_file_random_suffix(rpath, sizeof(rpath), 12);
renamed = true;
}
if (!S_ISDIR(st.st_mode) && S_ISDIR(aest->st_mode)) {
if (S_ISLNK(st.st_mode)) {
if (stat(rpath, &st) == -1) {
pkg_emit_error("Dead symlink %s", rpath);
} else {
pkg_debug(2, "Directory is a symlink, use it");
pkg_emit_progress_tick(cur_file++, nfiles);
continue;
}
}
}
}
archive_entry_set_pathname(ae, rpath);
/* load in memory the content of config files */
if (pkg_is_config_file(pkg, path, &rf, &rcf)) {
pkg_debug(1, "Populating config_file %s", pathname);
size_t len = archive_entry_size(ae);
rcf->content = malloc(len);
archive_read_data(a, rcf->content, len);
if (renamed && (!automerge || local == NULL))
strlcat(pathname, ".pkgnew", sizeof(pathname));
}
/*
* check if the file is already provided by previous package
*/
if (!automerge)
attempt_to_merge(renamed, rcf, local, pathname, path, newconf);
if (sbuf_len(newconf) == 0 && (rcf == NULL || rcf->content == NULL)) {
pkg_debug(1, "Extracting: %s", archive_entry_pathname(ae));
int install_as_user = (getenv("INSTALL_AS_USER") != NULL);
int extract_flags = EXTRACT_ARCHIVE_FLAGS;
if (install_as_user) {
/* when installing as user don't try to set file ownership */
extract_flags &= ~ARCHIVE_EXTRACT_OWNER;
}
ret = archive_read_extract(a, ae, extract_flags);
} else {
if (sbuf_len(newconf) == 0) {
sbuf_cat(newconf, rcf->content);
sbuf_finish(newconf);
}
pkg_debug(2, "Writing conf in %s", pathname);
unlink(rpath);
FILE *f = fopen(rpath, "w+");
//.........这里部分代码省略.........
开发者ID:WorldofOpenDev,项目名称:pkg,代码行数:101,代码来源:pkg_add.c
示例16: pkg_emit_add_deps_finished
retcode = EPKG_OK;
cleanup:
pkg_emit_add_deps_finished(pkg);
return (retcode);
}
static int
pkg_add_cleanup_old(struct pkgdb *db, struct pkg *old, struct pkg *new, int flags)
{
struct pkg_file *f;
int ret = EPKG_OK;
bool handle_rc;
handle_rc = pkg_object_bool(pkg_config_get("HANDLE_RC_SCRIPTS"));
if (handle_rc)
pkg_start_stop_rc_scripts(old, PKG_RC_STOP);
/*
* Execute pre deinstall scripts
*/
if ((flags & PKG_ADD_NOSCRIPT) == 0) {
if ((flags & PKG_ADD_USE_UPGRADE_SCRIPTS) == PKG_ADD_USE_UPGRADE_SCRIPTS)
ret = pkg_script_run(old, PKG_SCRIPT_PRE_UPGRADE);
else
ret = pkg_script_run(old, PKG_SCRIPT_PRE_DEINSTALL);
if (ret != EPKG_OK)
return (ret);
}
开发者ID:WorldofOpenDev,项目名称:pkg,代码行数:29,代码来源:pkg_add.c
示例17: exec_register
int
exec_register(int argc, char **argv)
{
struct pkg *pkg = NULL;
struct pkgdb *db = NULL;
struct pkg_manifest_key *keys = NULL;
regex_t preg;
regmatch_t pmatch[2];
char *arch = NULL;
char myarch[BUFSIZ];
char *www = NULL;
char fpath[MAXPATHLEN];
const char *plist = NULL;
const char *mdir = NULL;
const char *mfile = NULL;
const char *input_path = NULL;
const char *desc = NULL;
const char *location = NULL;
size_t size;
bool developer;
bool legacy = false;
bool old = false;
bool __unused metadata_only = false;
bool testing_mode = false;
int ch;
int i;
int ret = EPKG_OK;
int retcode = EX_OK;
/* options descriptor */
struct option longopts[] = {
{ "automatic", no_argument, NULL, 'A' },
{ "plist", required_argument, NULL, 'f' },
{ "root", required_argument, NULL, 'i' },
{ "legacy", no_argument, NULL, 'l' },
{ "manifest", required_argument, NULL, 'M' },
{ "metadata", required_argument, NULL, 'm' },
{ "old", no_argument, NULL, 'O' },
{ "test", no_argument, NULL, 't' },
{ "relocate", required_argument, NULL, 1 },
{ NULL, 0, NULL, 0},
};
developer = pkg_object_bool(pkg_config_get("DEVELOPER_MODE"));
if (pkg_new(&pkg, PKG_INSTALLED) != EPKG_OK)
err(EX_OSERR, "malloc");
while ((ch = getopt_long(argc, argv, "Adf:i:lM:m:Ot", longopts, NULL)) != -1) {
switch (ch) {
case 'A':
case 'd':
pkg_set(pkg, PKG_AUTOMATIC, (bool)true);
break;
case 'f':
plist = optarg;
break;
case 'i':
input_path = optarg;
break;
case 'l':
legacy = true;
break;
case 'M':
metadata_only = true;
mfile = optarg;
break;
case 'm':
mdir = optarg;
break;
case 'O':
old = true;
break;
case 't':
testing_mode = true;
break;
case 1:
location = optarg;
break;
default:
warnx("Unrecognised option -%c\n", ch);
usage_register();
return (EX_USAGE);
}
}
if (!old) {
retcode = pkgdb_access(PKGDB_MODE_READ |
PKGDB_MODE_WRITE |
PKGDB_MODE_CREATE,
PKGDB_DB_LOCAL);
if (retcode == EPKG_ENOACCESS) {
warnx("Insufficient privileges to register packages");
//.........这里部分代码省略.........
开发者ID:ppentchev,项目名称:pkg,代码行数:101,代码来源:register.c
示例18: exec_clean
int
exec_clean(int argc, char **argv)
{
struct pkgdb *db = NULL;
struct pkgdb_it *it = NULL;
struct pkg *p = NULL;
struct sumlist *sumlist = NULL, *s, *t;
FTS *fts = NULL;
FTSENT *ent = NULL;
struct dl_head dl = STAILQ_HEAD_INITIALIZER(dl);
const char *cachedir, *sum, *name;
char *paths[2], csum[PKG_FILE_CKSUM_CHARS + 1],
link_buf[MAXPATHLEN];
bool all = false;
bool sumloaded = false;
int retcode;
int ch, cnt = 0;
size_t total = 0, slen;
ssize_t link_len;
char size[7];
struct pkg_manifest_key *keys = NULL;
struct option longopts[] = {
{ "all", no_argument, NULL, 'a' },
{ "dry-run", no_argument, NULL, 'n' },
{ "quiet", no_argument, NULL, 'q' },
{ "yes", no_argument, NULL, 'y' },
{ NULL, 0, NULL, 0 },
};
while ((ch = getopt_long(argc, argv, "+anqy", longopts, NULL)) != -1) {
switch (ch) {
case 'a':
all = true;
break;
case 'n':
dry_run = true;
break;
case 'q':
quiet = true;
break;
case 'y':
yes = true;
break;
default:
usage_clean();
return (EX_USAGE);
}
}
argc -= optind;
argv += optind;
cachedir = pkg_object_string(pkg_config_get("PKG_CACHEDIR"));
paths[0] = __DECONST(char*, cachedir);
paths[1] = NULL;
retcode = pkgdb_access(PKGDB_MODE_READ, PKGDB_DB_REPO);
if (retcode == EPKG_ENOACCESS) {
warnx("Insufficient privileges to clean old packages");
return (EX_NOPERM);
} else if (retcode == EPKG_ENODB) {
warnx("No package database installed. Nothing to do!");
return (EX_OK);
} else if (retcode != EPKG_OK) {
warnx("Error accessing the package database");
return (EX_SOFTWARE);
}
retcode = EX_SOFTWARE;
if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK)
return (EX_IOERR);
if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) {
pkgdb_close(db);
warnx("Cannot get a read lock on a database, it is locked by another process");
return (EX_TEMPFAIL);
}
if ((fts = fts_open(paths, FTS_PHYSICAL, NULL)) == NULL) {
warn("fts_open(%s)", cachedir);
goto cleanup;
}
/* Build the list of out-of-date or obsolete packages */
pkg_manifest_keys_new(&keys);
while ((ent = fts_read(fts)) != NULL) {
if (ent->fts_info != FTS_F && ent->fts_info != FTS_SL)
continue;
if (all) {
retcode = add_to_dellist(&dl, ent->fts_path);
if (retcode == EPKG_OK) {
total += ent->fts_statp->st_size;
++cnt;
}
continue;
//.........这里部分代码省略.........
开发者ID:AsherBond,项目名称:pkg,代码行数:101,代码来源:clean.c
示例19: exec_upgrade
int
exec_upgrade(int argc, char **argv)
{
struct pkgdb *db = NULL;
struct pkg_jobs *jobs = NULL;
const char *reponame = NULL;
int retcode;
int updcode;
int ch;
int lock_type = PKGDB_LOCK_ADVISORY;
bool yes = true, yes_arg = false;
bool dry_run = false;
bool auto_update;
int done = 0;
nbactions = nbdone = 0;
pkg_flags f = PKG_FLAG_NONE | PKG_FLAG_PKG_VERSION_TEST;
yes_arg = pkg_object_bool(pkg_config_get("ASSUME_ALWAYS_YES"));
auto_update = pkg_object_bool(pkg_config_get("REPO_AUTOUPDATE"));
while ((ch = getopt(argc, argv, "fInqFr:Uy")) != -1) {
switch (ch) {
case 'f':
f |= PKG_FLAG_FORCE;
break;
case 'I':
f |= PKG_FLAG_NOSCRIPT;
break;
case 'U':
auto_update = false;
break;
case 'n':
f |= PKG_FLAG_DRY_RUN;
lock_type = PKGDB_LOCK_READONLY;
dry_run = true;
break;
case 'F':
f |= PKG_FLAG_SKIP_INSTALL;
lock_type = PKGDB_LOCK_READONLY;
break;
case 'q':
quiet = true;
break;
case 'r':
reponame = optarg;
break;
case 'y':
yes_arg = true;
break;
default:
usage_upgrade();
return (EX_USAGE);
/* NOTREACHED */
}
}
argc -= optind;
argv += optind;
if (argc != 0) {
usage_upgrade();
return (EX_USAGE);
}
if (dry_run && !auto_update)
retcode = pkgdb_access(PKGDB_MODE_READ,
PKGDB_DB_LOCAL|PKGDB_DB_REPO);
else
retcode = pkgdb_access(PKGDB_MODE_READ |
PKGDB_MODE_WRITE |
PKGDB_MODE_CREATE,
PKGDB_DB_LOCAL|PKGDB_DB_REPO);
if (retcode == EPKG_ENOACCESS && dry_run) {
auto_update = false;
retcode = pkgdb_access(PKGDB_MODE_READ,
PKGDB_DB_LOCAL|PKGDB_DB_REPO);
}
if (retcode == EPKG_ENOACCESS) {
warnx("Insufficient privilege to upgrade packages");
return (EX_NOPERM);
} else if (retcode != EPKG_OK)
return (EX_IOERR);
else
retcode = EX_SOFTWARE;
/* first update the remote repositories if needed */
if (auto_update &&
(updcode = pkgcli_update(false, reponame)) != EPKG_OK)
return (updcode);
if (pkgdb_open_all(&db, PKGDB_REMOTE, reponame) != EPKG_OK)
return (EX_IOERR);
if (pkgdb_obtain_lock(db, lock_type, 0, 0) != EPKG_OK) {
pkgdb_close(db);
warnx("Cannot get an advisory lock on a database, it is locked by another process");
return (EX_TEMPFAIL);
}
if (pkg_jobs_new(&jobs, PKG_JOBS_UPGRADE, db) != EPKG_OK)
//.........这里部分代码省略.........
开发者ID:AlexanderThaller,项目名称:pkg,代码行数:101,代码来源:upgrade.c
示例20: exec_set
int
exec_set(int argc, char **argv)
{
struct pkgdb *db = NULL;
struct pkgdb_it *it = NULL;
struct pkg *pkg = NULL;
int ch;
int i;
bool yes;
match_t match = MATCH_EXACT;
int64_t newautomatic = -1;
bool automatic = false;
const char *errstr;
char *neworigin = NULL;
char *oldorigin = NULL;
unsigned int loads = PKG_LOAD_BASIC;
unsigned int sets = 0;
int retcode;
yes = pkg_object_bool(pkg_config_get("ASSUME_ALWAYS_YES"));
while ((ch = getopt(argc, argv, "A:agio:xy")) != -1) {
switch (ch) {
case 'A':
sets |= AUTOMATIC;
newautomatic = strtonum(optarg, 0, 1, &errstr);
if (errstr)
errx(EX_USAGE, "Wrong value for -A. "
"Expecting 0 or 1, got: %s (%s)",
optarg, errstr);
break;
case 'a':
match = MATCH_ALL;
break;
case 'g':
match = MATCH_GLOB;
break;
case 'i':
pkgdb_set_case_sensitivity(false);
break;
case 'o':
sets |= ORIGIN;
loads |= PKG_LOAD_DEPS;
match = MATCH_ALL;
oldorigin = strdup(optarg);
neworigin = strrchr(oldorigin, ':');
if (neworigin == NULL) {
free(oldorigin);
errx(EX_USAGE, "Wrong format for -o. "
"Expecting oldorigin:neworigin, got: %s",
optarg);
}
*neworigin = '\0';
neworigin++;
if (strrchr(oldorigin, '/') == NULL ||
strrchr(neworigin, '/') == NULL) {
free(oldorigin);
errx(EX_USAGE,
"Bad origin format, got: %s", optarg);
}
break;
case 'x':
match = MATCH_REGEX;
break;
case 'y':
yes = true;
break;
default:
if (oldorigin != NULL)
free(oldorigin);
usage_set();
return (EX_USAGE);
}
}
argc -= optind;
argv += optind;
if ((argc < 1 && match != MATCH_ALL) || (newautomatic == -1 && neworigin == NULL)) {
usage_set();
return (EX_USAGE);
}
retcode = pkgdb_access(PKGDB_MODE_READ|PKGDB_MODE_WRITE,
PKGDB_DB_LOCAL);
if (retcode == EPKG_ENODB) {
if (match == MATCH_ALL)
return (EX_OK);
if (!quiet)
warnx("No packages installed. Nothing to do!");
return (EX_OK);
} else if (retcode == EPKG_ENOACCESS) {
warnx("Insufficient privileges to modify the package database");
return (EX_NOPERM);
} else if (retcode != EPKG_OK) {
warnx("Error accessing package database");
return (EX_SOFTWARE);
}
//.........这里部分代码省略.........
开发者ID:rakhij,项目名称:pkg,代码行数:101,代码来源:set.c
注:本文中的pkg_config_get函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论