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

commit 660b6227894368b273e2451e5bfaf181ea66136e
Author: Michel Hermier <[email protected]>
Date:   Sat Apr 26 11:21:39 2014 +0200

libpacman: s/struct __pmgrp_t/libpacman::Group/

diff --git a/lib/libpacman/cache.cpp b/lib/libpacman/cache.cpp
index e4a489c..0281797 100644
--- a/lib/libpacman/cache.cpp
+++ b/lib/libpacman/cache.cpp
@@ -45,6 +45,8 @@
#include "handle.h"
#include "error.h"

+using namespace libpacman;
+
static
int _pacman_db_clear_grpcache(pmdb_t *db);

@@ -200,7 +202,7 @@ int _pacman_db_load_grpcache(pmdb_t *db)

for(i = pkg->groups; i; i = i->next) {
if(!_pacman_list_is_strin(i->data, db->grpcache)) {
-                               pmgrp_t *grp = _pacman_grp_new();
+                               Group *grp = new Group();

STRNCPY(grp->name, (char *)i->data, GRP_NAME_LEN);
grp->packages = _pacman_list_add_sorted(grp->packages, pkg->name, 
_pacman_grp_cmp);
@@ -209,7 +211,7 @@ int _pacman_db_load_grpcache(pmdb_t *db)
pmlist_t *j;

for(j = db->grpcache; j; j = j->next) {
-                                       pmgrp_t *grp = j->data;
+                                       Group *grp = j->data;

if(strcmp(grp->name, i->data) == 0) {
if(!_pacman_list_is_strin(pkg->name, grp->packages)) {
@@ -249,7 +251,7 @@ pmlist_t *_pacman_db_get_grpcache(pmdb_t *db)
return(db->grpcache);
}

-pmgrp_t *_pacman_db_get_grpfromcache(pmdb_t *db, const char *target)
+Group *_pacman_db_get_grpfromcache(pmdb_t *db, const char *target)
{
pmlist_t *i;

@@ -259,7 +261,7 @@ pmgrp_t *_pacman_db_get_grpfromcache(pmdb_t *db, const char 
*target)
}

for(i = _pacman_db_get_grpcache(db); i; i = i->next) {
-               pmgrp_t *info = i->data;
+               Group *info = i->data;

if(strcmp(info->name, target) == 0) {
return(info);
diff --git a/lib/libpacman/cache.h b/lib/libpacman/cache.h
index 82d2c20..bad42bb 100644
--- a/lib/libpacman/cache.h
+++ b/lib/libpacman/cache.h
@@ -35,7 +35,7 @@ pmpkg_t *_pacman_db_get_pkgfromcache(pmdb_t *db, const char 
*target);
pmlist_t *_pacman_db_whatprovides(pmdb_t *db, char *package);
/* groups */
pmlist_t *_pacman_db_get_grpcache(pmdb_t *db);
-pmgrp_t *_pacman_db_get_grpfromcache(pmdb_t *db, const char *target);
+libpacman::Group *_pacman_db_get_grpfromcache(pmdb_t *db, const char *target);

#endif /* _PACMAN_CACHE_H */

diff --git a/lib/libpacman/group.cpp b/lib/libpacman/group.cpp
index d3d68e2..b449b28 100644
--- a/lib/libpacman/group.cpp
+++ b/lib/libpacman/group.cpp
@@ -32,39 +32,30 @@

using namespace libpacman;

-pmgrp_t *_pacman_grp_new()
+Group::Group()
+       : packages(NULL)
{
-       pmgrp_t* grp = _pacman_zalloc(sizeof(pmgrp_t));
-
-       if(grp == NULL) {
-               return(NULL);
-       }
-
-       return(grp);
+       memset(name, 0, sizeof(name));
}

-void _pacman_grp_delete(pmgrp_t *grp)
+Group::~Group()
{
-       if(grp == NULL) {
-               return;
-       }
+       f_ptrlist_delete(packages, NULL);
+}

-       f_ptrlist_delete(grp->packages, NULL);
-       free(grp);
+void _pacman_grp_delete(Group *grp)
+{
+       delete (grp);
}

/* Helper function for sorting groups
*/
int _pacman_grp_cmp(const void *g1, const void *g2)
{
-       pmgrp_t *grp1 = (pmgrp_t *)g1;
-       pmgrp_t *grp2 = (pmgrp_t *)g2;
+       const Group *grp1 = (const Group *)g1;
+       const Group *grp2 = (const Group *)g2;

return(strcmp(grp1->name, grp2->name));
}

-Group::~Group()
-{
-}
-
/* vim: set ts=2 sw=2 noet: */
diff --git a/lib/libpacman/group.h b/lib/libpacman/group.h
index bed0322..6df2ae2 100644
--- a/lib/libpacman/group.h
+++ b/lib/libpacman/group.h
@@ -27,28 +27,25 @@

#define GRP_NAME_LEN 256

-/* Groups structure */
-struct __pmgrp_t {
-       char name[GRP_NAME_LEN];
-       pmlist_t *packages; /* List of unowned strings */
-};
-
-pmgrp_t *_pacman_grp_new(void);
-void _pacman_grp_delete(pmgrp_t *group);
-int _pacman_grp_cmp(const void *g1, const void *g2);
-
namespace libpacman
{

class Group
-       : public libpacman::Object
+//     : public libpacman::Object // FIXME: Enable when C list search is 
removed.
{
public:
-       virtual ~Group();
+       Group();
+       ~Group();
+
+       char name[GRP_NAME_LEN];
+       pmlist_t *packages; /* List of unowned strings */
};

}

+void _pacman_grp_delete(libpacman::Group *group);
+int _pacman_grp_cmp(const void *g1, const void *g2);
+
#endif /* _PACMAN_GROUP_H */

/* vim: set ts=2 sw=2 noet: */
diff --git a/lib/libpacman/pacman.cpp b/lib/libpacman/pacman.cpp
index 78b8ecb..48bf949 100644
--- a/lib/libpacman/pacman.cpp
+++ b/lib/libpacman/pacman.cpp
@@ -61,6 +61,17 @@
#include <stdlib.h>
#include <unistd.h>

+using namespace libpacman;
+
+#define DEFINE_CAST(c_type, cxx_type)  \
+static c_type *c_cast(cxx_type *obj)   \
+{ return (c_type *)obj; }              \
+                                       \
+static cxx_type *cxx_cast(c_type *obj) \
+{ return (cxx_type *)obj; }
+
+DEFINE_CAST(struct __pmgrp_t, Group)
+
/* Globals */
pmhandle_t *handle = NULL;
enum __pmerrno_t pm_errno;
@@ -391,7 +402,7 @@ pmgrp_t *pacman_db_readgrp(pmdb_t *db, char *name)
ASSERT(db != NULL, return(NULL));
ASSERT(!_pacman_strempty(name), return(NULL));

-       return(_pacman_db_get_grpfromcache(db, name));
+       return c_cast(_pacman_db_get_grpfromcache(db, name));
}

/** Get the group cache of a package database
@@ -659,13 +670,14 @@ int pacman_pkg_vercmp(const char *ver1, const char *ver2)
void *pacman_grp_getinfo(pmgrp_t *grp, unsigned char parm)
{
void *data = NULL;
+       Group *group = cxx_cast(grp);

/* Sanity checks */
-       ASSERT(grp != NULL, return(NULL));
+       ASSERT(group != NULL, return(NULL));

switch(parm) {
-               case PM_GRP_NAME:     data = grp->name; break;
-               case PM_GRP_PKGNAMES: data = grp->packages; break;
+               case PM_GRP_NAME:     data = group->name; break;
+               case PM_GRP_PKGNAMES: data = group->packages; break;
default:
data = NULL;
break;
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to