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

commit be947fce4f9eb4f0f645775b52b0e7424d970cb9
Author: Michel Hermier <herm...@frugalware.org>
Date:   Fri Oct 31 08:50:04 2014 +0100

libpacman Use flib::str_set to store package files.

diff --git a/lib/libpacman/conflict.cpp b/lib/libpacman/conflict.cpp
index cc04672..2aa67e7 100644
--- a/lib/libpacman/conflict.cpp
+++ b/lib/libpacman/conflict.cpp
@@ -42,6 +42,7 @@
#include <string.h>
#include <unistd.h>

+using namespace flib;
using namespace libpacman;

/* Returns a FPtrList* of pmdepmissing_t pointers.
@@ -198,14 +199,14 @@ FPtrList pmtrans_t::checkconflicts()
*  Hooray for set-intersects!
*  Pre-condition: both lists are sorted!
*/
-static FStringList chk_fileconflicts(const FStringList &filesA, const 
FStringList &filesB)
+static FStringList chk_fileconflicts(const str_set &filesA, const str_set 
&filesB)
{
FStringList ret;
auto pA = filesA.begin(), pB = filesB.begin();

while(pA != filesA.end() && pB != filesB.end()) {
-               const char *strA = *pA;
-               const char *strB = *pB;
+               const char *strA = pA->c_str();
+               const char *strB = pB->c_str();
/* skip directories, we don't care about dir conflicts */
if(strA[strlen(strA)-1] == '/') {
++pA;
@@ -275,7 +276,7 @@ FPtrList pmtrans_t::find_conflicts()
dbpkg = NULL;
auto &files = p->files();
for(auto j = files.begin(), j_end = files.end(); j != j_end; ++j) {
-                       const char *filestr = *j;
+                       const char *filestr = j->c_str();
snprintf(path, PATH_MAX, "%s%s", root, filestr);
/* is this target a file or directory? */
if(path[strlen(path)-1] == '/') {
diff --git a/lib/libpacman/db/localdb.cpp b/lib/libpacman/db/localdb.cpp
index 66157ee..c16db75 100644
--- a/lib/libpacman/db/localdb.cpp
+++ b/lib/libpacman/db/localdb.cpp
@@ -142,7 +142,7 @@ int _pacman_localpackage_remove(package_ptr pkg, pmtrans_t 
*trans, int howmany,
for(auto lp = pkg->files().rbegin(), end = pkg->files().rend(); lp != end; 
++lp) {
int nb = 0;
double percent = 0;
-               const char *file = *lp;
+               const char *file = lp->c_str();
char *hash_orig = pkg->fileneedbackup(file);

if (position != 0) {
@@ -377,6 +377,18 @@ void _pacman_localdb_write(const char *entry, const char 
*value, FILE *stream)
}

static
+void _pacman_localdb_write(const char *entry, const flib::str_set &values, 
FILE *stream)
+{
+       if(!values.empty()) {
+               fprintf(stream, "%%%s%%\n", entry);
+               for(auto lp = values.begin(), end = values.end(); lp != end; 
++lp) {
+                       fprintf(stream, "%s\n", lp->c_str());
+               }
+               fputc('\n', stream);
+       }
+}
+
+static
void _pacman_localdb_write(const char *entry, const FStringList &values, FILE 
*stream)
{
if(!values.empty()) {
@@ -506,7 +518,7 @@ package_list LocalDatabase::getowners(const char *filename)
for(auto i = files.begin(), end = files.end(); i != end; ++i) {
char path[PATH_MAX];

-                       snprintf(path, PATH_MAX, "%s%s", m_handle->root, *i);
+                       snprintf(path, PATH_MAX, "%s%s", m_handle->root, 
i->c_str());
if(!strcmp(path, rpath)) {
ret.add(info);
if(rpath[strlen(rpath)-1] != '/') {
diff --git a/lib/libpacman/kernel/fstr.cpp b/lib/libpacman/kernel/fstr.cpp
index b1c2a82..d91f6f8 100644
--- a/lib/libpacman/kernel/fstr.cpp
+++ b/lib/libpacman/kernel/fstr.cpp
@@ -213,6 +213,11 @@ bool FStrMatcher::match(const char *str) const
return 0;
}

+bool FStrMatcher::match(const str &s) const
+{
+       return match(s.c_str());
+}
+
int f_stringlist_any_match(const FStringList *list, const FStrMatcher *matcher)
{
#ifndef F_NOCOMPAT
diff --git a/lib/libpacman/kernel/fstr.h b/lib/libpacman/kernel/fstr.h
index d0a97eb..3c24258 100644
--- a/lib/libpacman/kernel/fstr.h
+++ b/lib/libpacman/kernel/fstr.h
@@ -122,7 +122,18 @@ public:

~FStrMatcher();

-       bool match(const char *str) const;
+       bool operator () (const char *s) const
+       {
+               return match(s);
+       }
+
+       bool operator () (const flib::str &s) const
+       {
+               return match(s);
+       }
+
+       bool match(const char *s) const;
+       bool match(const flib::str &s) const;

protected:
int m_flags;
diff --git a/lib/libpacman/package.cpp b/lib/libpacman/package.cpp
index ad87ad8..d68c51d 100644
--- a/lib/libpacman/package.cpp
+++ b/lib/libpacman/package.cpp
@@ -361,7 +361,7 @@ int _pacman_strmatcher_match(const FStrMatcher *strmatcher, 
const package_ptr &p
((flags & PM_PACKAGE_FLAG_LICENSE) && f_stringlist_any_match(&pkg->license, 
strmatcher)) ||
((flags & PM_PACKAGE_FLAG_REPLACES) && f_stringlist_any_match(&pkg->replaces(), 
strmatcher)) ||
((flags & PM_PACKAGE_FLAG_GROUPS) && f_stringlist_any_match(&pkg->groups(), 
strmatcher)) ||
-                       ((flags & PM_PACKAGE_FLAG_FILES) && 
f_stringlist_any_match(&pkg->files(), strmatcher)) ||
+                       ((flags & PM_PACKAGE_FLAG_FILES) && 
pkg->files().any_match_if(*strmatcher)) ||
((flags & PM_PACKAGE_FLAG_BACKUP) && f_stringlist_any_match(&pkg->backup(), 
strmatcher)) ||
((flags & PM_PACKAGE_FLAG_DEPENDS) && f_stringlist_any_match(&pkg->depends(), 
strmatcher)) ||
((flags & PM_PACKAGE_FLAG_REMOVES) && f_stringlist_any_match(&pkg->removes(), 
strmatcher)) ||
diff --git a/lib/libpacman/package.h b/lib/libpacman/package.h
index 915a27f..49e9812 100644
--- a/lib/libpacman/package.h
+++ b/lib/libpacman/package.h
@@ -35,6 +35,7 @@
#include "kernel/fstr.h"
#include "util/fset.h"
#include "util/fstringlist.h"
+#include "util/fstrset.h"

typedef struct __pmdepend_t pmdepend_t;

@@ -164,7 +165,7 @@ public:
FStringList license;
FStringList m_replaces;
FStringList m_groups;
-       FStringList m_files;
+       flib::str_set m_files;
FStringList m_backup;
FStringList m_depends;
FStringList m_removes;
diff --git a/lib/libpacman/package_properties.h 
b/lib/libpacman/package_properties.h
index 0542ddf..a743065 100644
--- a/lib/libpacman/package_properties.h
+++ b/lib/libpacman/package_properties.h
@@ -23,7 +23,7 @@ LIBPACMAN_PACKAGE_PROPERTY(FStringList &, backup,     BACKUP  
  )
LIBPACMAN_PACKAGE_PROPERTY(FStringList &, conflicts,  CONFLICTS )
LIBPACMAN_PACKAGE_PROPERTY(FStringList &, depends,    DEPENDS   )
LIBPACMAN_PACKAGE_PROPERTY(const char *,  description, DESCRIPTION)
-LIBPACMAN_PACKAGE_PROPERTY(FStringList &, files,      FILES     )
+LIBPACMAN_PACKAGE_PROPERTY(flib::str_set &, files,      FILES     )
LIBPACMAN_PACKAGE_PROPERTY(unsigned char, force,      FORCE     )
LIBPACMAN_PACKAGE_PROPERTY(FStringList &, groups,     GROUPS    )
LIBPACMAN_PACKAGE_PROPERTY(const char *,  name,       NAME      )
_______________________________________________
Frugalware-git mailing list
Frugalware-git@frugalware.org
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to