diff options
Diffstat (limited to 'lib/libalpm/handle.c')
-rw-r--r-- | lib/libalpm/handle.c | 346 |
1 files changed, 116 insertions, 230 deletions
diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c index dd9d50b6..ddc8d77d 100644 --- a/lib/libalpm/handle.c +++ b/lib/libalpm/handle.c @@ -31,7 +31,6 @@ #include <syslog.h> #include <libintl.h> #include <time.h> -/////#include <ftplib.h> /* pacman */ #include "util.h" #include "log.h" @@ -105,7 +104,6 @@ int _alpm_handle_free(pmhandle_t *handle) FREE(handle->dbpath); FREE(handle->cachedir); FREE(handle->logfile); - FREE(handle->proxyhost); FREE(handle->xfercommand); FREELIST(handle->dbs_sync); FREELIST(handle->noupgrade); @@ -118,242 +116,130 @@ int _alpm_handle_free(pmhandle_t *handle) return(0); } -int _alpm_handle_set_option(pmhandle_t *handle, unsigned char val, unsigned long data) +alpm_cb_log alpm_option_get_logcb() { return handle->logcb; } +alpm_cb_download alpm_option_get_dlcb() { return handle->dlcb; } +unsigned char alpm_option_get_logmask() { return handle->logmask; } +const char *alpm_option_get_root() { return handle->root; } +const char *alpm_option_get_dbpath() { return handle->dbpath; } +const char *alpm_option_get_cachedir() { return handle->cachedir; } +const char *alpm_option_get_logfile() { return handle->logfile; } +unsigned char alpm_option_get_usesyslog() { return handle->usesyslog; } +pmlist_t *alpm_option_get_noupgrades() { return handle->noupgrade; } +pmlist_t *alpm_option_get_noextracts() { return handle->noextract; } +pmlist_t *alpm_option_get_ignorepkgs() { return handle->ignorepkg; } +pmlist_t *alpm_option_get_holdpkgs() { return handle->holdpkg; } +time_t alpm_option_get_upgradedelay() { return handle->upgradedelay; } +const char *alpm_option_get_xfercommand() { return handle->xfercommand; } +unsigned short alpm_option_get_nopassiveftp() { return handle->nopassiveftp; } +unsigned short alpm_option_get_chomp() { return handle->chomp; } +pmlist_t *alpm_option_get_needles() { return handle->needles; } +unsigned short alpm_option_get_usecolor() { return handle->use_color; } + +pmdb_t *alpm_option_get_localdb(pmhandle_t *handle) { return handle->db_local; } +pmlist_t *alpm_option_get_syncdbs(pmhandle_t *handle) { return handle->dbs_sync; } + +void alpm_option_set_logcb(alpm_cb_log cb) { handle->logcb = cb; } + +void alpm_option_set_dlcb(alpm_cb_download cb) { handle->dlcb = cb; } + +void alpm_option_set_logmask(unsigned char mask) { handle->logmask = mask; } + +void alpm_option_set_root(const char *root) { - /* Sanity checks */ - ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); + if(handle->root) FREE(handle->root); + if(root) handle->root = strdup(root); +} - char *p; - switch(val) { - case PM_OPT_DBPATH: - if(handle->dbpath) { - FREE(handle->dbpath); - } - handle->dbpath = strdup((data && strlen((char *)data) != 0) ? (char *)data : PM_DBPATH); - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_DBPATH set to '%s'"), handle->dbpath); - break; - case PM_OPT_CACHEDIR: - if(handle->cachedir) { - FREE(handle->cachedir); - } - handle->cachedir = strdup((data && strlen((char *)data) != 0) ? (char *)data : PM_CACHEDIR); - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_CACHEDIR set to '%s'"), handle->cachedir); - break; - case PM_OPT_LOGFILE: - if((char *)data == NULL || handle->uid != 0) { - return(0); - } - if(handle->logfile) { - FREE(handle->logfile); - } - if(handle->logfd) { - if(fclose(handle->logfd) != 0) { - handle->logfd = NULL; - RET_ERR(PM_ERR_OPT_LOGFILE, -1); - } - handle->logfd = NULL; - } - if((handle->logfd = fopen((char *)data, "a")) == NULL) { - _alpm_log(PM_LOG_ERROR, _("can't open log file %s"), (char *)data); - RET_ERR(PM_ERR_OPT_LOGFILE, -1); - } - handle->logfile = strdup((char *)data); - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_LOGFILE set to '%s'"), (char *)data); - break; - case PM_OPT_NOUPGRADE: - if((char *)data && strlen((char *)data) != 0) { - handle->noupgrade = _alpm_list_add(handle->noupgrade, strdup((char *)data)); - _alpm_log(PM_LOG_FLOW2, _("'%s' added to PM_OPT_NOUPGRADE"), (char *)data); - } else { - FREELIST(handle->noupgrade); - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_NOUPGRADE flushed")); - } - break; - case PM_OPT_NOEXTRACT: - if((char *)data && strlen((char *)data) != 0) { - handle->noextract = _alpm_list_add(handle->noextract, strdup((char *)data)); - _alpm_log(PM_LOG_FLOW2, _("'%s' added to PM_OPT_NOEXTRACT"), (char *)data); - } else { - FREELIST(handle->noextract); - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_NOEXTRACT flushed")); - } - break; - case PM_OPT_IGNOREPKG: - if((char *)data && strlen((char *)data) != 0) { - handle->ignorepkg = _alpm_list_add(handle->ignorepkg, strdup((char *)data)); - _alpm_log(PM_LOG_FLOW2, _("'%s' added to PM_OPT_IGNOREPKG"), (char *)data); - } else { - FREELIST(handle->ignorepkg); - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_IGNOREPKG flushed")); - } - break; - case PM_OPT_HOLDPKG: - if((char *)data && strlen((char *)data) != 0) { - handle->holdpkg = _alpm_list_add(handle->holdpkg, strdup((char *)data)); - _alpm_log(PM_LOG_FLOW2, _("'%s' added to PM_OPT_HOLDPKG"), (char *)data); - } else { - FREELIST(handle->holdpkg); - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_HOLDPKG flushed")); - } - break; - case PM_OPT_NEEDLES: - if((char *)data && strlen((char *)data) != 0) { - handle->needles = _alpm_list_add(handle->needles, strdup((char *)data)); - _alpm_log(PM_LOG_FLOW2, _("'%s' added to PM_OPT_NEEDLES"), (char *)data); - } else { - FREELIST(handle->needles); - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_NEEDLES flushed")); - } - break; - case PM_OPT_USESYSLOG: - if(data != 0 && data != 1) { - RET_ERR(PM_ERR_OPT_USESYSLOG, -1); - } - if(handle->usesyslog == data) { - return(0); - } - if(handle->usesyslog) { - closelog(); - } else { - openlog("alpm", 0, LOG_USER); - } - handle->usesyslog = (unsigned short)data; - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_USESYSLOG set to '%d'"), handle->usesyslog); - break; - case PM_OPT_LOGCB: - pm_logcb = (alpm_cb_log)data; - break; - case PM_OPT_DLCB: - pm_dlcb = (download_progress_cb)data; - break; -/* case PM_OPT_DLFNM: - pm_dlfnm = (char *)data; - break; - case PM_OPT_DLOFFSET: - pm_dloffset = (int *)data; - break; - case PM_OPT_DLT0: - pm_dlt0 = (struct timeval *)data; - break; - case PM_OPT_DLT: - pm_dlt = (struct timeval *)data; - break; - case PM_OPT_DLRATE: - pm_dlrate = (float *)data; - break; - case PM_OPT_DLXFERED1: - pm_dlxfered1 = (int *)data; - break; - case PM_OPT_DLETA_H: - pm_dleta_h = (unsigned char *)data; - break; - case PM_OPT_DLETA_M: - pm_dleta_m = (unsigned char *)data; - break; - case PM_OPT_DLETA_S: - pm_dleta_s = (unsigned char *)data; - break; -*/ - case PM_OPT_UPGRADEDELAY: - handle->upgradedelay = data; - break; - case PM_OPT_LOGMASK: - pm_logmask = (unsigned char)data; - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_LOGMASK set to '%02x'"), (unsigned char)data); - break; - case PM_OPT_PROXYHOST: - if(handle->proxyhost) { - FREE(handle->proxyhost); - } - p = strstr((char*)data, "://"); - if(p) { - p += 3; - if(p == NULL || *p == '\0') { - RET_ERR(PM_ERR_SERVER_BAD_LOCATION, -1); - } - data = (long)p; - } -#if defined(__APPLE__) || defined(__OpenBSD__) - handle->proxyhost = strdup((char*)data); -#else - handle->proxyhost = strndup((char*)data, PATH_MAX); -#endif - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_PROXYHOST set to '%s'"), handle->proxyhost); - break; - case PM_OPT_PROXYPORT: - handle->proxyport = (unsigned short)data; - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_PROXYPORT set to '%d'"), handle->proxyport); - break; - case PM_OPT_XFERCOMMAND: - if(handle->xfercommand) { - FREE(handle->xfercommand); - } -#if defined(__APPLE__) || defined(__OpenBSD__) - handle->xfercommand = strdup((char*)data); -#else - handle->xfercommand = strndup((char*)data, PATH_MAX); -#endif - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_XFERCOMMAND set to '%s'"), handle->xfercommand); - break; - case PM_OPT_NOPASSIVEFTP: - handle->nopassiveftp = (unsigned short)data; - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_NOPASSIVEFTP set to '%d'"), handle->nopassiveftp); - break; - case PM_OPT_CHOMP: - handle->chomp = (unsigned short)data; - _alpm_log(PM_LOG_FLOW2, _("PM_OPT_CHOMP set to '%d'"), handle->chomp); - break; - default: - RET_ERR(PM_ERR_WRONG_ARGS, -1); +void alpm_option_set_dbpath(const char *dbpath) +{ + if(handle->dbpath) FREE(handle->dbpath); + if(dbpath) handle->dbpath = strdup(dbpath); +} + +void alpm_option_set_cachedir(const char *cachedir) +{ + if(handle->cachedir) FREE(handle->cachedir); + if(cachedir) handle->cachedir = strdup(cachedir); +} + +void alpm_option_set_logfile(const char *logfile) +{ + if(handle->logfile) { + FREE(handle->logfile); + if(handle->logfd) { + fclose(handle->logfd); + handle->logfd = NULL; + } + } + if(logfile) { + handle->logfile = strdup(logfile); + handle->logfd = fopen(logfile, "a"); } +} - return(0); +void alpm_option_set_usesyslog(unsigned char usesyslog) { handle->usesyslog = usesyslog; } + +void alpm_option_add_noupgrade(char *pkg) +{ + handle->noupgrade = _alpm_list_add(handle->noupgrade, strdup(pkg)); +} +void alpm_option_set_noupgrades(pmlist_t *noupgrade) +{ + if(handle->noupgrade) FREELIST(handle->noupgrade); + if(noupgrade) handle->noupgrade = noupgrade; } -int _alpm_handle_get_option(pmhandle_t *handle, unsigned char val, long *data) +void alpm_option_add_noextract(char *pkg) { - /* Sanity checks */ - ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); + handle->noextract = _alpm_list_add(handle->noextract, strdup(pkg)); +} +void alpm_option_set_noextracts(pmlist_t *noextract) +{ + if(handle->noextract) FREELIST(handle->noextract); + if(noextract) handle->noextract = noextract; +} - switch(val) { - case PM_OPT_ROOT: *data = (long)handle->root; break; - case PM_OPT_DBPATH: *data = (long)handle->dbpath; break; - case PM_OPT_CACHEDIR: *data = (long)handle->cachedir; break; - case PM_OPT_LOCALDB: *data = (long)handle->db_local; break; - case PM_OPT_SYNCDB: *data = (long)handle->dbs_sync; break; - case PM_OPT_LOGFILE: *data = (long)handle->logfile; break; - case PM_OPT_NOUPGRADE: *data = (long)handle->noupgrade; break; - case PM_OPT_NOEXTRACT: *data = (long)handle->noextract; break; - case PM_OPT_IGNOREPKG: *data = (long)handle->ignorepkg; break; - case PM_OPT_HOLDPKG: *data = (long)handle->holdpkg; break; - case PM_OPT_NEEDLES: *data = (long)handle->needles; break; - case PM_OPT_USESYSLOG: *data = handle->usesyslog; break; - case PM_OPT_LOGCB: *data = (long)pm_logcb; break; - case PM_OPT_DLCB: *data = (long)pm_dlcb; break; - case PM_OPT_UPGRADEDELAY: *data = (long)handle->upgradedelay; break; - case PM_OPT_LOGMASK: *data = pm_logmask; break; -/* - case PM_OPT_DLFNM: *data = (long)pm_dlfnm; break; - case PM_OPT_DLOFFSET: *data = (long)pm_dloffset; break; - case PM_OPT_DLT0: *data = (long)pm_dlt0; break; - case PM_OPT_DLT: *data = (long)pm_dlt; break; - case PM_OPT_DLRATE: *data = (long)pm_dlrate; break; - case PM_OPT_DLXFERED1: *data = (long)pm_dlxfered1; break; - case PM_OPT_DLETA_H: *data = (long)pm_dleta_h; break; - case PM_OPT_DLETA_M: *data = (long)pm_dleta_m; break; - case PM_OPT_DLETA_S: *data = (long)pm_dleta_s; break; -*/ - case PM_OPT_PROXYHOST: *data = (long)handle->proxyhost; break; - case PM_OPT_PROXYPORT: *data = handle->proxyport; break; - case PM_OPT_XFERCOMMAND: *data = (long)handle->xfercommand; break; - case PM_OPT_NOPASSIVEFTP: *data = handle->nopassiveftp; break; - case PM_OPT_CHOMP: *data = handle->chomp; break; - default: - RET_ERR(PM_ERR_WRONG_ARGS, -1); - break; - } +void alpm_option_add_ignorepkg(char *pkg) +{ + handle->ignorepkg = _alpm_list_add(handle->ignorepkg, strdup(pkg)); +} +void alpm_option_set_ignorepkgs(pmlist_t *ignorepkgs) +{ + if(handle->ignorepkg) FREELIST(handle->ignorepkg); + if(ignorepkgs) handle->ignorepkg = ignorepkgs; +} - return(0); +void alpm_option_add_holdpkg(char *pkg) +{ + handle->holdpkg = _alpm_list_add(handle->holdpkg, strdup(pkg)); +} +void alpm_option_set_holdpkgs(pmlist_t *holdpkgs) +{ + if(handle->holdpkg) FREELIST(handle->holdpkg); + if(holdpkgs) handle->holdpkg = holdpkgs; +} + +void alpm_option_set_upgradedelay(time_t delay) { handle->upgradedelay = delay; } + +void alpm_option_set_xfercommand(const char *cmd) +{ + if(handle->xfercommand) FREE(handle->xfercommand); + if(cmd) handle->xfercommand = strdup(cmd); +} + +void alpm_option_set_nopassiveftp(unsigned short nopasv) { handle->nopassiveftp = nopasv; } + +void alpm_option_set_chomp(unsigned short chomp) { handle->chomp = chomp; } + +void alpm_option_add_needle(char *needle) +{ + handle->needles = _alpm_list_add(handle->needles, strdup(needle)); +} +void alpm_option_set_needles(pmlist_t *needles) +{ + if(handle->needles) FREELIST(handle->needles); + if(needles) handle->needles = needles; } +void alpm_option_set_usecolor(unsigned short usecolor) { handle->use_color = usecolor; } -/* vim: set ts=2 sw=2 noet: */ +/* vim: set ts=2 sw=2 et: */ |