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