summaryrefslogtreecommitdiff
path: root/apt-pkg/contrib/strutl.cc
diff options
context:
space:
mode:
authorMichael Vogt <mvo@debian.org>2005-10-17 14:20:25 +0000
committerMichael Vogt <mvo@debian.org>2005-10-17 14:20:25 +0000
commitc511502fcec38680fff2f27aec75908e348e5905 (patch)
tree113bdb52474c1111110da47939342c9fd2994f1a /apt-pkg/contrib/strutl.cc
parent3226f06e15d6c9816c26e87bb58f5589b84a467b (diff)
parent422eeaaadf17904bf2f08cdf9e8998bec645097c (diff)
* merged ddtp support
Patches applied: * michael.vogt@ubuntu.com--2005/apt--ddtp--0--base-0 tag of otavio@debian.org--2005/apt--ddtp--0.6--patch-14 * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-1 * fixed a problem when it comes to the cache rebuilding * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-2 * try harder to get the correct language code * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-3 * fix for output of the description and the debTranslationsIndex::Exists() * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-4 * made the translation downloading work * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-5 * FindInCache() uses the correct file now * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-6 * don't throw any more warnings * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-7 * merged with otavoi * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-8 * merged with otavios branch * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-9 * code cleanups (thanks matt!), moved UsePackage before the description list build in pkgcachegen to catch MMap errors early * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-10 * added a BUGS file with known problem, added apt-cdrom support for translated package descriptions * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-11 * updated with mainline * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-12 * added README.ddtp * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-13 * merged with apt--mvo * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-14 * added DDTP::URL-Remap. KILL THIS FEATURE once ddtp support is offical * michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-15 * remvoed the remap feature again, dosn't work anyway * otavio@debian.org--2005/apt--ddtp--0.6--base-0 tag of apt@packages.debian.org/apt--main--0--patch-71 * otavio@debian.org--2005/apt--ddtp--0.6--patch-1 Port DDTP to APT 0.6 branch * otavio@debian.org--2005/apt--ddtp--0.6--patch-2 Fix sintax error on apt-cache * otavio@debian.org--2005/apt--ddtp--0.6--patch-3 Remove a unused var. * otavio@debian.org--2005/apt--ddtp--0.6--patch-4 Fix problems due APT and structural changes. * otavio@debian.org--2005/apt--ddtp--0.6--patch-5 Fix problems due APT and structural changes. * otavio@debian.org--2005/apt--ddtp--0.6--patch-6 Sync with apt@packages.debian.org/apt--main--0--patch-74 * otavio@debian.org--2005/apt--ddtp--0.6--patch-7 Sync with apt@packages.debian.org/apt--main--0--patch-75 * otavio@debian.org--2005/apt--ddtp--0.6--patch-8 Sync with apt--main--0--patch-76 * otavio@debian.org--2005/apt--ddtp--0.6--patch-9 Remote a changelog entry added by mistake while merging. * otavio@debian.org--2005/apt--ddtp--0.6--patch-10 Sync with apt--main--0--patch-78 * otavio@debian.org--2005/apt--ddtp--0.6--patch-11 Revert fixes changes to move these to apt--fixes--0 branch. * otavio@debian.org--2005/apt--ddtp--0.6--patch-12 Another fix included here by mistake. Moving it to apt--fixes--0 branch. * otavio@debian.org--2005/apt--ddtp--0.6--patch-13 Merge last changes from apt--main--0. * otavio@debian.org--2005/apt--ddtp--0.6--patch-14 Add FindInCache method to skip the rebuild of cache every time. * otavio@debian.org--2005/apt--ddtp--0.6--patch-15 Merge changes did by Michael Vogt to solve some rebuilding mistakes. * otavio@debian.org--2005/apt--ddtp--0.6--patch-16 Does't show Description twice * otavio@debian.org--2005/apt--ddtp--0.6--patch-17 Merge last fixes did by Michael but preserve my version of apt-cache.cc fix. * otavio@debian.org--2005/apt--ddtp--0.6--patch-18 Revert changes did by mistake on translation files. * otavio@debian.org--2005/apt--ddtp--0.6--patch-19 Merge last changes did from upstream side. * otavio@debian.org--2005/apt--ddtp--0.6--patch-20 Sync with apt--main--0--patch-87
Diffstat (limited to 'apt-pkg/contrib/strutl.cc')
-rw-r--r--apt-pkg/contrib/strutl.cc45
1 files changed, 44 insertions, 1 deletions
diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc
index a75fbdf92..303cb27db 100644
--- a/apt-pkg/contrib/strutl.cc
+++ b/apt-pkg/contrib/strutl.cc
@@ -32,12 +32,55 @@
#include <regex.h>
#include <errno.h>
#include <stdarg.h>
+#include <iconv.h>
#include "config.h"
using namespace std;
/*}}}*/
+// UTF8ToCodeset - Convert some UTF-8 string for some codeset /*{{{*/
+// ---------------------------------------------------------------------
+/* This is handy to use before display some information for enduser */
+bool UTF8ToCodeset(const char *codeset, const string &orig, string *dest)
+{
+ iconv_t cd;
+ const char *inbuf;
+ char *inptr, *outbuf, *outptr;
+ size_t insize, outsize;
+
+ cd = iconv_open(codeset, "UTF-8");
+ if (cd == (iconv_t)(-1)) {
+ // Something went wrong
+ if (errno == EINVAL)
+ _error->Error("conversion from 'UTF-8' to '%s' not available",
+ codeset);
+ else
+ perror("iconv_open");
+
+ // Clean the destination string
+ *dest = "";
+
+ return false;
+ }
+
+ insize = outsize = orig.size();
+ inbuf = orig.data();
+ inptr = (char *)inbuf;
+ outbuf = new char[insize+1];
+ outptr = outbuf;
+
+ iconv(cd, &inptr, &insize, &outptr, &outsize);
+ *outptr = '\0';
+
+ *dest = outbuf;
+ delete[] outbuf;
+
+ iconv_close(cd);
+
+ return true;
+}
+ /*}}}*/
// strstrip - Remove white space from the front and back of a string /*{{{*/
// ---------------------------------------------------------------------
/* This is handy to use when parsing a file. It also removes \n's left
@@ -357,7 +400,7 @@ string URItoFileName(string URI)
U.Access = "";
// "\x00-\x20{}|\\\\^\\[\\]<>\"\x7F-\xFF";
- URI = QuoteString(U,"\\|{}[]<>\"^~_=!@#$%^&*");
+ URI = QuoteString(U,"\\|{}[]<>\"^~=!@#$%^&*");
string::iterator J = URI.begin();
for (; J != URI.end(); J++)
if (*J == '/')