diff options
author | Michael Vogt <egon@debian-devbox> | 2012-10-17 10:27:50 +0200 |
---|---|---|
committer | Michael Vogt <egon@debian-devbox> | 2012-10-17 10:27:50 +0200 |
commit | 20a2b201389092a17763b703039b2e4528234e30 (patch) | |
tree | 089749317dfe78ffc4676903003b68c389999041 | |
parent | 7f8f2c43b1bf98fb01f8dbced68bee1dbc745ed0 (diff) | |
parent | 8d01b9d692f49309235e710b79937baf605fda3d (diff) |
* lp:~mvo/apt/add-glob-function:
- add Glob() to fileutl.{cc,h}
-rw-r--r-- | apt-pkg/contrib/fileutl.cc | 31 | ||||
-rw-r--r-- | apt-pkg/contrib/fileutl.h | 3 | ||||
-rw-r--r-- | debian/changelog | 2 | ||||
-rw-r--r-- | test/libapt/fileutl_test.cc | 42 | ||||
-rw-r--r-- | test/libapt/makefile | 5 |
5 files changed, 82 insertions, 1 deletions
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index 4c224337e..a31a8a141 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -41,6 +41,8 @@ #include <dirent.h> #include <signal.h> #include <errno.h> +#include <glob.h> + #include <set> #include <algorithm> @@ -1778,3 +1780,32 @@ bool FileFd::Sync() /*}}}*/ gzFile FileFd::gzFd() { return (gzFile) d->gz; } + + +// Glob - wrapper around "glob()" /*{{{*/ +// --------------------------------------------------------------------- +/* */ +std::vector<std::string> Glob(std::string const &pattern, int flags) +{ + std::vector<std::string> result; + glob_t globbuf; + int glob_res, i; + + glob_res = glob(pattern.c_str(), flags, NULL, &globbuf); + + if (glob_res != 0) + { + if(glob_res != GLOB_NOMATCH) { + _error->Errno("glob", "Problem with glob"); + return result; + } + } + + // append results + for(i=0;i<globbuf.gl_pathc;i++) + result.push_back(string(globbuf.gl_pathv[i])); + + globfree(&globbuf); + return result; +} + /*}}}*/ diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h index 510b1c984..4d933a307 100644 --- a/apt-pkg/contrib/fileutl.h +++ b/apt-pkg/contrib/fileutl.h @@ -190,6 +190,7 @@ std::string flNoLink(std::string File); std::string flExtension(std::string File); std::string flCombine(std::string Dir,std::string File); - +// simple c++ glob +std::vector<std::string> Glob(std::string const &pattern, int flags=0); #endif diff --git a/debian/changelog b/debian/changelog index 2688a2686..e93ed51ae 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,8 @@ apt (0.9.8~exp1) UNRELEASED; urgency=low - fix invalid InRelease file download checking and add regression test to server broken files to the buildin test webserver * stop exporting the accidently exported parsenetrc() symbol + * lp:~mvo/apt/add-glob-function: + - add Glob() to fileutl.{cc,h} -- David Kalnischkies <kalnischkies@gmail.com> Mon, 09 Jul 2012 17:36:40 +0200 diff --git a/test/libapt/fileutl_test.cc b/test/libapt/fileutl_test.cc new file mode 100644 index 000000000..b6b8ac579 --- /dev/null +++ b/test/libapt/fileutl_test.cc @@ -0,0 +1,42 @@ +#include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> + +#include "assert.h" +#include <string> +#include <vector> + +#include <stdio.h> +#include <iostream> +#include <stdlib.h> + + +int main(int argc,char *argv[]) +{ + std::vector<std::string> files; + + // normal match + files = Glob("*.lst"); + if (files.size() != 1) + { + _error->DumpErrors(); + return 1; + } + + // not there + files = Glob("xxxyyyzzz"); + if (files.size() != 0 || _error->PendingError()) + { + _error->DumpErrors(); + return 1; + } + + // many matches (number is a bit random) + files = Glob("*.cc"); + if (files.size() < 10) + { + _error->DumpErrors(); + return 1; + } + + return 0; +} diff --git a/test/libapt/makefile b/test/libapt/makefile index 5e225f240..578f2da4d 100644 --- a/test/libapt/makefile +++ b/test/libapt/makefile @@ -97,4 +97,9 @@ include $(PROGRAM_H) PROGRAM = IndexCopyToSourceList${BASENAME} SLIBS = -lapt-pkg SOURCE = indexcopytosourcelist_test.cc + +# test fileutls +PROGRAM = FileUtl${BASENAME} +SLIBS = -lapt-pkg +SOURCE = fileutl_test.cc include $(PROGRAM_H) |