Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=0daf4e1bc0faff5adb4b84449a7128a5d1b1b4e5

commit 0daf4e1bc0faff5adb4b84449a7128a5d1b1b4e5
Author: Michel Hermier <herm...@frugalware.org>
Date:   Tue Apr 29 19:22:18 2014 +0200

libpacman: Move pmhandle_t option handling to pacman.c.

diff --git a/lib/libpacman/handle.cpp b/lib/libpacman/handle.cpp
index f164605..a199350 100644
--- a/lib/libpacman/handle.cpp
+++ b/lib/libpacman/handle.cpp
@@ -113,224 +113,6 @@ Handle::~Handle()
FREELIST(needles);
}

-static
-void _pacman_handle_set_option_string(const char *option, char **string, const 
char *value, const char *default_value)
-{
-       free(*string);
-       *string = strdup(!_pacman_strempty(value) ? value : default_value);
-       _pacman_log(PM_LOG_FLOW2, _("%s set to '%s'"), option, *string);
-}
-
-static
-void _pacman_handle_set_option_stringlist(const char *option, pmlist_t 
**stringlist, const char *value)
-{
-       if(!_pacman_strempty(value)) {
-               *stringlist = _pacman_stringlist_append(*stringlist, value);
-               _pacman_log(PM_LOG_FLOW2, _("'%s' added to %s"), value, option);
-       } else {
-               FREELIST(*stringlist);
-               _pacman_log(PM_LOG_FLOW2, _("%s flushed"), option);
-       }
-}
-
-int _pacman_handle_set_option(Handle *ph, unsigned char val, unsigned long 
data)
-{
-
-       char logdir[PATH_MAX], path[PATH_MAX], *p, *q;
-
-       /* Sanity checks */
-       ASSERT(ph != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
-
-       switch(val) {
-               case PM_OPT_DBPATH:
-                       _pacman_handle_set_option_string("PM_OPT_DBPATH", 
&ph->dbpath, (const char *)data, PM_DBPATH);
-               break;
-               case PM_OPT_CACHEDIR:
-                       _pacman_handle_set_option_string("PM_OPT_CACHEDIR", 
&ph->cachedir, (const char *)data, PM_CACHEDIR);
-               break;
-               case PM_OPT_HOOKSDIR:
-                       _pacman_handle_set_option_string("PM_OPT_HOOKSDIR", 
&ph->hooksdir, (const char *)data, PM_HOOKSDIR);
-               break;
-               case PM_OPT_LOGFILE:
-                       if((char *)data == NULL || ph->uid != 0) {
-                               return(0);
-                       }
-                       if(ph->logfile) {
-                               FREE(ph->logfile);
-                       }
-                       if(ph->logfd) {
-                               if(fclose(ph->logfd) != 0) {
-                                       ph->logfd = NULL;
-                                       RET_ERR(PM_ERR_OPT_LOGFILE, -1);
-                               }
-                               ph->logfd = NULL;
-                       }
-
-                       snprintf(path, PATH_MAX, "%s/%s", ph->root, (char 
*)data);
-                       p = strdup((char*)data);
-                       q = strrchr(p, '/');
-                       if (q) {
-                               *q = '\0';
-                       }
-                       snprintf(logdir, PATH_MAX, "%s/%s", ph->root, p);
-                       free(p);
-                       _pacman_makepath(logdir);
-                       if((ph->logfd = fopen(path, "a")) == NULL) {
-                               _pacman_log(PM_LOG_ERROR, _("can't open log 
file %s"), path);
-                               RET_ERR(PM_ERR_OPT_LOGFILE, -1);
-                       }
-                       ph->logfile = strdup(path);
-                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_LOGFILE set to 
'%s'"), path);
-               break;
-               case PM_OPT_NOUPGRADE:
-                       
_pacman_handle_set_option_stringlist("PM_OPT_NOUPGRADE", &ph->noupgrade, (const 
char *)data);
-               break;
-               case PM_OPT_NOEXTRACT:
-                       
_pacman_handle_set_option_stringlist("PM_OPT_NOEXTRACT", &ph->noextract, (const 
char *)data);
-               break;
-               case PM_OPT_IGNOREPKG:
-                       
_pacman_handle_set_option_stringlist("PM_OPT_IGNOREPKG", &ph->ignorepkg, (const 
char *)data);
-               break;
-               case PM_OPT_HOLDPKG:
-                       _pacman_handle_set_option_stringlist("PM_OPT_HOLDPKG", 
&ph->holdpkg, (const char *)data);
-               break;
-               case PM_OPT_NEEDLES:
-                       _pacman_handle_set_option_stringlist("PM_OPT_NEEDLES", 
&ph->needles, (const char *)data);
-               break;
-               case PM_OPT_USESYSLOG:
-                       if(data != 0 && data != 1) {
-                               RET_ERR(PM_ERR_OPT_USESYSLOG, -1);
-                       }
-                       if(ph->usesyslog == data) {
-                               return(0);
-                       }
-                       if(ph->usesyslog) {
-                               closelog();
-                       } else {
-                               openlog("libpacman", 0, LOG_USER);
-                       }
-                       ph->usesyslog = (unsigned short)data;
-                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_USESYSLOG set to 
'%d'"), ph->usesyslog);
-               break;
-               case PM_OPT_LOGCB:
-                       pm_logcb = (pacman_cb_log)data;
-               break;
-               case PM_OPT_DLCB:
-                       pm_dlcb = (pacman_trans_cb_download)data;
-               break;
-               case PM_OPT_DLFNM:
-                       pm_dlfnm = (char *)data;
-               break;
-               case PM_OPT_DLREMAIN:
-                       ph->dlremain = (int *)data;
-               break;
-               case PM_OPT_DLHOWMANY:
-                       ph->dlhowmany = (int *)data;
-               break;
-               case PM_OPT_UPGRADEDELAY:
-                       ph->upgradedelay = data;
-               break;
-               case PM_OPT_OLDDELAY:
-                       ph->olddelay = data;
-               break;
-               case PM_OPT_LOGMASK:
-                       pm_logmask = (unsigned char)data;
-                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_LOGMASK set to 
'%02x'"), (unsigned char)data);
-               break;
-               case PM_OPT_PROXYHOST:
-                       if(ph->proxyhost) {
-                               FREE(ph->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__)
-                       ph->proxyhost = strdup((char*)data);
-#else
-                       ph->proxyhost = strndup((char*)data, PATH_MAX);
-#endif
-                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_PROXYHOST set to 
'%s'"), ph->proxyhost);
-               break;
-               case PM_OPT_PROXYPORT:
-                       ph->proxyport = (unsigned short)data;
-                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_PROXYPORT set to 
'%d'"), ph->proxyport);
-               break;
-               case PM_OPT_XFERCOMMAND:
-                       if(ph->xfercommand) {
-                               FREE(ph->xfercommand);
-                       }
-#if defined(__APPLE__) || defined(__OpenBSD__)
-                       ph->xfercommand = strdup((char*)data);
-#else
-                       ph->xfercommand = strndup((char*)data, PATH_MAX);
-#endif
-                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_XFERCOMMAND set to 
'%s'"), ph->xfercommand);
-               break;
-               case PM_OPT_NOPASSIVEFTP:
-                       ph->nopassiveftp = (unsigned short)data;
-                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_NOPASSIVEFTP set to 
'%d'"), ph->nopassiveftp);
-               break;
-               case PM_OPT_CHOMP:
-                       ph->chomp = (unsigned short)data;
-                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_CHOMP set to 
'%d'"), ph->chomp);
-               break;
-               case PM_OPT_MAXTRIES:
-                       ph->maxtries = (unsigned short)data;
-                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_MAXTRIES set to 
'%d'"), ph->maxtries);
-               break;
-               default:
-                       RET_ERR(PM_ERR_WRONG_ARGS, -1);
-       }
-
-       return(0);
-}
-
-int _pacman_handle_get_option(Handle *ph, unsigned char val, long *data)
-{
-       /* Sanity checks */
-       ASSERT(ph != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
-
-       switch(val) {
-               case PM_OPT_ROOT:      *data = (long)ph->root; break;
-               case PM_OPT_DBPATH:    *data = (long)ph->dbpath; break;
-               case PM_OPT_CACHEDIR:  *data = (long)ph->cachedir; break;
-               case PM_OPT_HOOKSDIR:  *data = (long)ph->hooksdir; break;
-               case PM_OPT_LOCALDB:   *data = (long)ph->db_local; break;
-               case PM_OPT_SYNCDB:    *data = (long)ph->dbs_sync; break;
-               case PM_OPT_LOGFILE:   *data = (long)ph->logfile; break;
-               case PM_OPT_NOUPGRADE: *data = (long)ph->noupgrade; break;
-               case PM_OPT_NOEXTRACT: *data = (long)ph->noextract; break;
-               case PM_OPT_IGNOREPKG: *data = (long)ph->ignorepkg; break;
-               case PM_OPT_HOLDPKG:   *data = (long)ph->holdpkg; break;
-               case PM_OPT_NEEDLES:   *data = (long)ph->needles; break;
-               case PM_OPT_USESYSLOG: *data = ph->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)ph->upgradedelay; break;
-               case PM_OPT_OLDDELAY:  *data = (long)ph->olddelay; break;
-               case PM_OPT_LOGMASK:   *data = pm_logmask; break;
-               case PM_OPT_DLFNM:     *data = (long)pm_dlfnm; break;
-               case PM_OPT_DLREMAIN:  *data = (long)ph->dlremain; break;
-               case PM_OPT_DLHOWMANY: *data = (long)ph->dlhowmany; break;
-               case PM_OPT_PROXYHOST: *data = (long)ph->proxyhost; break;
-               case PM_OPT_PROXYPORT: *data = ph->proxyport; break;
-               case PM_OPT_XFERCOMMAND: *data = (long)ph->xfercommand; break;
-               case PM_OPT_NOPASSIVEFTP: *data = ph->nopassiveftp; break;
-               case PM_OPT_CHOMP: *data = ph->chomp; break;
-               case PM_OPT_MAXTRIES: *data = ph->maxtries; break;
-               default:
-                       RET_ERR(PM_ERR_WRONG_ARGS, -1);
-               break;
-       }
-
-       return(0);
-}
-
int _pacman_handle_lock(Handle *handle)
{
char lckpath[PATH_MAX];
diff --git a/lib/libpacman/handle.h b/lib/libpacman/handle.h
index 00fe235..357066d 100644
--- a/lib/libpacman/handle.h
+++ b/lib/libpacman/handle.h
@@ -91,8 +91,6 @@ public:

extern libpacman::Handle *handle;

-int _pacman_handle_set_option(libpacman::Handle *handle, unsigned char val, 
unsigned long data);
-int _pacman_handle_get_option(libpacman::Handle *handle, unsigned char val, 
long *data);
int _pacman_handle_lock(libpacman::Handle *handle);
int _pacman_handle_unlock(libpacman::Handle *handle);

diff --git a/lib/libpacman/pacman.cpp b/lib/libpacman/pacman.cpp
index f9dd47e..3e4dfd1 100644
--- a/lib/libpacman/pacman.cpp
+++ b/lib/libpacman/pacman.cpp
@@ -59,6 +59,7 @@
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
+#include <syslog.h>
#include <unistd.h>

using namespace libpacman;
@@ -135,6 +136,26 @@ int pacman_release(void)
* @{
*/

+static
+void _pacman_handle_set_option_string(const char *option, char **string, const 
char *value, const char *default_value)
+{
+       free(*string);
+       *string = strdup(!_pacman_strempty(value) ? value : default_value);
+       _pacman_log(PM_LOG_FLOW2, _("%s set to '%s'"), option, *string);
+}
+
+static
+void _pacman_handle_set_option_stringlist(const char *option, pmlist_t 
**stringlist, const char *value)
+{
+       if(!_pacman_strempty(value)) {
+               *stringlist = _pacman_stringlist_append(*stringlist, value);
+               _pacman_log(PM_LOG_FLOW2, _("'%s' added to %s"), value, option);
+       } else {
+               FREELIST(*stringlist);
+               _pacman_log(PM_LOG_FLOW2, _("%s flushed"), option);
+       }
+}
+
/** Set a library option.
* @param parm the name of the parameter
* @param data the value of the parameter
@@ -142,10 +163,158 @@ int pacman_release(void)
*/
int pacman_set_option(unsigned char parm, unsigned long data)
{
+       char logdir[PATH_MAX], path[PATH_MAX], *p, *q;
+
/* Sanity checks */
ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));

-       return(_pacman_handle_set_option(handle, parm, data));
+       switch(parm) {
+               case PM_OPT_DBPATH:
+                       _pacman_handle_set_option_string("PM_OPT_DBPATH", 
&handle->dbpath, (const char *)data, PM_DBPATH);
+               break;
+               case PM_OPT_CACHEDIR:
+                       _pacman_handle_set_option_string("PM_OPT_CACHEDIR", 
&handle->cachedir, (const char *)data, PM_CACHEDIR);
+               break;
+               case PM_OPT_HOOKSDIR:
+                       _pacman_handle_set_option_string("PM_OPT_HOOKSDIR", 
&handle->hooksdir, (const char *)data, PM_HOOKSDIR);
+               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;
+                       }
+
+                       snprintf(path, PATH_MAX, "%s/%s", handle->root, (char 
*)data);
+                       p = strdup((char*)data);
+                       q = strrchr(p, '/');
+                       if (q) {
+                               *q = '\0';
+                       }
+                       snprintf(logdir, PATH_MAX, "%s/%s", handle->root, p);
+                       free(p);
+                       _pacman_makepath(logdir);
+                       if((handle->logfd = fopen(path, "a")) == NULL) {
+                               _pacman_log(PM_LOG_ERROR, _("can't open log 
file %s"), path);
+                               RET_ERR(PM_ERR_OPT_LOGFILE, -1);
+                       }
+                       handle->logfile = strdup(path);
+                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_LOGFILE set to 
'%s'"), path);
+               break;
+               case PM_OPT_NOUPGRADE:
+                       
_pacman_handle_set_option_stringlist("PM_OPT_NOUPGRADE", &handle->noupgrade, 
(const char *)data);
+               break;
+               case PM_OPT_NOEXTRACT:
+                       
_pacman_handle_set_option_stringlist("PM_OPT_NOEXTRACT", &handle->noextract, 
(const char *)data);
+               break;
+               case PM_OPT_IGNOREPKG:
+                       
_pacman_handle_set_option_stringlist("PM_OPT_IGNOREPKG", &handle->ignorepkg, 
(const char *)data);
+               break;
+               case PM_OPT_HOLDPKG:
+                       _pacman_handle_set_option_stringlist("PM_OPT_HOLDPKG", 
&handle->holdpkg, (const char *)data);
+               break;
+               case PM_OPT_NEEDLES:
+                       _pacman_handle_set_option_stringlist("PM_OPT_NEEDLES", 
&handle->needles, (const char *)data);
+               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("libpacman", 0, LOG_USER);
+                       }
+                       handle->usesyslog = (unsigned short)data;
+                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_USESYSLOG set to 
'%d'"), handle->usesyslog);
+               break;
+               case PM_OPT_LOGCB:
+                       pm_logcb = (pacman_cb_log)data;
+               break;
+               case PM_OPT_DLCB:
+                       pm_dlcb = (pacman_trans_cb_download)data;
+               break;
+               case PM_OPT_DLFNM:
+                       pm_dlfnm = (char *)data;
+               break;
+               case PM_OPT_DLREMAIN:
+                       handle->dlremain = (int *)data;
+               break;
+               case PM_OPT_DLHOWMANY:
+                       handle->dlhowmany = (int *)data;
+               break;
+               case PM_OPT_UPGRADEDELAY:
+                       handle->upgradedelay = data;
+               break;
+               case PM_OPT_OLDDELAY:
+                       handle->olddelay = data;
+               break;
+               case PM_OPT_LOGMASK:
+                       pm_logmask = (unsigned char)data;
+                       _pacman_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
+                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_PROXYHOST set to 
'%s'"), handle->proxyhost);
+               break;
+               case PM_OPT_PROXYPORT:
+                       handle->proxyport = (unsigned short)data;
+                       _pacman_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
+                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_XFERCOMMAND set to 
'%s'"), handle->xfercommand);
+               break;
+               case PM_OPT_NOPASSIVEFTP:
+                       handle->nopassiveftp = (unsigned short)data;
+                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_NOPASSIVEFTP set to 
'%d'"), handle->nopassiveftp);
+               break;
+               case PM_OPT_CHOMP:
+                       handle->chomp = (unsigned short)data;
+                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_CHOMP set to 
'%d'"), handle->chomp);
+               break;
+               case PM_OPT_MAXTRIES:
+                       handle->maxtries = (unsigned short)data;
+                       _pacman_log(PM_LOG_FLOW2, _("PM_OPT_MAXTRIES set to 
'%d'"), handle->maxtries);
+               break;
+               default:
+                       RET_ERR(PM_ERR_WRONG_ARGS, -1);
+       }
+
+       return(0);
}

/** Get the value of a library option.
@@ -159,7 +328,40 @@ int pacman_get_option(unsigned char parm, long *data)
ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
ASSERT(data != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));

-       return(_pacman_handle_get_option(handle, parm, data));
+       switch(parm) {
+               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_HOOKSDIR:  *data = (long)handle->hooksdir; 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_OLDDELAY:  *data = (long)handle->olddelay; break;
+               case PM_OPT_LOGMASK:   *data = pm_logmask; break;
+               case PM_OPT_DLFNM:     *data = (long)pm_dlfnm; break;
+               case PM_OPT_DLREMAIN:  *data = (long)handle->dlremain; break;
+               case PM_OPT_DLHOWMANY: *data = (long)handle->dlhowmany; 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;
+               case PM_OPT_MAXTRIES: *data = handle->maxtries; break;
+               default:
+                       RET_ERR(PM_ERR_WRONG_ARGS, -1);
+               break;
+       }
+
+       return(0);
}
/** @} */

diff --git a/lib/libpacman/sync.cpp b/lib/libpacman/sync.cpp
index 0417641..f6e3c53 100644
--- a/lib/libpacman/sync.cpp
+++ b/lib/libpacman/sync.cpp
@@ -827,7 +827,7 @@ int _pacman_trans_download_commit(pmtrans_t *trans, 
pmlist_t **data)
*/
_pacman_log(PM_LOG_WARNING, _("couldn't create package cache, using /tmp 
instead"));
snprintf(ldir, PATH_MAX, "%s/tmp", handle->root);
-                                               
if(_pacman_handle_set_option(handle, PM_OPT_CACHEDIR, (long)"/tmp") == -1) {
+                                               
if(pacman_set_option(PM_OPT_CACHEDIR, (long)"/tmp") == -1) {
_pacman_log(PM_LOG_WARNING, _("failed to set option CACHEDIR (%s)\n"), 
pacman_strerror(pm_errno));
RET_ERR(PM_ERR_RETRIEVE, -1);
}
_______________________________________________
Frugalware-git mailing list
Frugalware-git@frugalware.org
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to