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

commit 1a9b527c18e2614cbd758acd6dc8ceaf82e3ff8d
Author: Michel Hermier <[email protected]>
Date:   Sun Jun 8 10:44:36 2014 +0200

libpacman: Remove pmtrans_cbs_t and use signal/slots instead.

diff --git a/lib/libpacman/pacman.cpp b/lib/libpacman/pacman.cpp
index fcc2037..eac749b 100644
--- a/lib/libpacman/pacman.cpp
+++ b/lib/libpacman/pacman.cpp
@@ -1060,16 +1060,13 @@ int pacman_trans_init(unsigned char type, unsigned int 
flags, pacman_trans_cb_ev
return -1;
}

-       pmtrans_cbs_t cbs = {
-               .event = event,
-               .conv = conv,
-               .progress = progress
-       };
-
-       handle->trans = new __pmtrans_t(handle, (pmtranstype_t)type, flags, 
cbs);
+       handle->trans = new __pmtrans_t(handle, (pmtranstype_t)type, flags);
if(handle->trans == NULL) {
RET_ERR(PM_ERR_MEMORY, -1);
}
+       handle->trans->event.connect(event);
+       handle->trans->conv.connect(conv);
+       handle->trans->progress.connect(progress);

return _pacman_packages_transaction_init(handle->trans);
}
diff --git a/lib/libpacman/trans.cpp b/lib/libpacman/trans.cpp
index 4b83e03..7b4c51c 100644
--- a/lib/libpacman/trans.cpp
+++ b/lib/libpacman/trans.cpp
@@ -76,7 +76,7 @@ static int check_oldcache(void)
return(0);
}

-__pmtrans_t::__pmtrans_t(Handle *handle, pmtranstype_t type, unsigned int 
flags, pmtrans_cbs_t cbs)
+__pmtrans_t::__pmtrans_t(Handle *handle, pmtranstype_t type, unsigned int 
flags)
: state(STATE_IDLE)
{
switch(type) {
@@ -94,7 +94,6 @@ __pmtrans_t::__pmtrans_t(Handle *handle, pmtranstype_t type, 
unsigned int flags,
this->handle = handle;
m_type = type;
this->flags = flags;
-       this->cbs = cbs;
//      packages = f_ptrlist_new();
targets = f_stringlist_new();
skiplist = f_stringlist_new();
@@ -189,9 +188,6 @@ int _pacman_trans_event(pmtrans_t *trans, unsigned char 
event, void *data1, void
break;
}

-       if(trans->cbs.event) {
-               trans->cbs.event(event, data1, data2);
-       }
trans->event(event, data1, data2);
return 0;
}
@@ -1635,12 +1631,15 @@ int __pmtrans_t::commit(pmlist_t **data)
_pacman_runhook("pre_sysupgrade", this);
}
/* remove conflicting and to-be-replaced packages */
-       tr = new __pmtrans_t(handle, PM_TRANS_TYPE_REMOVE, 
PM_TRANS_FLAG_NODEPS, cbs);
+       tr = new __pmtrans_t(handle, PM_TRANS_TYPE_REMOVE, 
PM_TRANS_FLAG_NODEPS);
if(tr == NULL) {
_pacman_log(PM_LOG_ERROR, _("could not create removal transaction"));
pm_errno = PM_ERR_MEMORY;
goto error;
}
+       tr->event.connect(&event);
+       tr->conv.connect(&conv);
+       tr->progress.connect(&progress);
for(i = syncpkgs; i; i = i->next) {
pmsyncpkg_t *ps = i->data;
if(ps->type == PM_SYNC_TYPE_REPLACE) {
@@ -1661,8 +1660,6 @@ int __pmtrans_t::commit(pmlist_t **data)
_pacman_log(PM_LOG_ERROR, _("could not prepare removal transaction"));
goto error;
}
-               /* we want the frontend to be aware of commit details */
-               tr->cbs.event = cbs.event;
if(tr->commit(NULL) == -1) {
_pacman_log(PM_LOG_ERROR, _("could not commit removal transaction"));
goto error;
@@ -1673,12 +1670,15 @@ int __pmtrans_t::commit(pmlist_t **data)

/* install targets */
_pacman_log(PM_LOG_FLOW1, _("installing packages"));
-       tr = new __pmtrans_t(handle, PM_TRANS_TYPE_UPGRADE, flags | 
PM_TRANS_FLAG_NODEPS, cbs);
+       tr = new __pmtrans_t(handle, PM_TRANS_TYPE_UPGRADE, flags | 
PM_TRANS_FLAG_NODEPS);
if(tr == NULL) {
_pacman_log(PM_LOG_ERROR, _("could not create transaction"));
pm_errno = PM_ERR_MEMORY;
goto error;
}
+       tr->event.connect(&event);
+       tr->conv.connect(&conv);
+       tr->progress.connect(&progress);
for(i = syncpkgs; i; i = i->next) {
pmsyncpkg_t *ps = i->data;
Package *spkg = ps->pkg_new;
diff --git a/lib/libpacman/trans.h b/lib/libpacman/trans.h
index b6f2197..9f4598e 100644
--- a/lib/libpacman/trans.h
+++ b/lib/libpacman/trans.h
@@ -49,12 +49,6 @@ enum {
STATE_MAX
};

-typedef struct __pmtrans_cbs_t {
-       pacman_trans_cb_event event;
-       pacman_trans_cb_conv conv;
-       pacman_trans_cb_progress progress;
-} pmtrans_cbs_t;
-
struct __pmtrans_t
: public ::flib::FObject
{
@@ -62,7 +56,7 @@ struct __pmtrans_t
flib::FSignal<void(unsigned char, void *, void *, void *, int *)> conv;
flib::FSignal<void(unsigned char, const char *, int, int, int)> progress;

-       __pmtrans_t(::libpacman::Handle *handle, pmtranstype_t type, unsigned 
int flags, pmtrans_cbs_t cbs);
+       __pmtrans_t(::libpacman::Handle *handle, pmtranstype_t type, unsigned 
int flags);
~__pmtrans_t();

pmsyncpkg_t *find(const char *pkgname) const;
@@ -84,7 +78,6 @@ struct __pmtrans_t
FPtrList *syncpkgs; /* FPtrList of (pmsyncpkg_t *) */
FStringList *skiplist;
FStringList *triggers;
-       pmtrans_cbs_t cbs;

private:
};
@@ -94,17 +87,11 @@ private:
#define QUESTION(_t, q, d1, d2, d3, r) \
do { \
pmtrans_t *t = (_t); \
-       if(t && t->cbs.conv) { \
-               t->cbs.conv((q), (d1), (d2), (d3), (r)); \
-       } \
t->conv((q), (d1), (d2), (d3), (r)); \
} while(0)
#define PROGRESS(_t, e, p, per, h, r) \
do { \
pmtrans_t *t = (_t); \
-       if(t && t->cbs.progress) { \
-               t->cbs.progress((e), (p), (per), (h), (r)); \
-       } \
t->progress((e), (p), (per), (h), (r)); \
} while(0)
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to