X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/542ec555f1d484a299b56e35655756d78716f102..1fcbfcb8ba78224fd0e4d532d4fa976f0ea00fef:/apt-pkg/contrib/strutl.cc diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index 499b72a5e..2411623c5 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/apt-pkg/contrib/strutl.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: strutl.cc,v 1.15 1998/12/04 21:16:50 jgg Exp $ +// $Id: strutl.cc,v 1.24 1999/04/04 08:07:39 jgg Exp $ /* ###################################################################### String Util - Some usefull string functions. @@ -16,15 +16,17 @@ /*}}}*/ // Includes /*{{{*/ #ifdef __GNUG__ -#pragma implementation "strutl.h" +#pragma implementation "apt-pkg/strutl.h" #endif -#include +#include #include #include #include #include +#include +#include /*}}}*/ // strstrip - Remove white space from the front and back of a string /*{{{*/ @@ -95,7 +97,7 @@ bool ParseQuoteWord(const char *&String,string &Res) return false; // Jump to the next word - for (;*C != 0 && *C != ' '; C++) + for (;*C != 0 && isspace(*C) == 0; C++) { if (*C == '"') { @@ -116,7 +118,7 @@ bool ParseQuoteWord(const char *&String,string &Res) { Tmp[0] = Start[1]; Tmp[1] = Start[2]; - Tmp[3] = 0; + Tmp[2] = 0; *I = (char)strtol(Tmp,0,16); Start += 3; continue; @@ -131,7 +133,7 @@ bool ParseQuoteWord(const char *&String,string &Res) Res = Buffer; // Skip ending white space - for (;*C != 0 && *C == ' '; C++); + for (;*C != 0 && isspace(*C) != 0; C++); String = C; return true; } @@ -198,6 +200,31 @@ string QuoteString(string Str,const char *Bad) return Res; } /*}}}*/ +// DeQuoteString - Convert a string from quoted from /*{{{*/ +// --------------------------------------------------------------------- +/* This undoes QuoteString */ +string DeQuoteString(string Str) +{ + string Res; + for (string::iterator I = Str.begin(); I != Str.end(); I++) + { + if (*I == '%' && I + 2 < Str.end()) + { + char Tmp[3]; + Tmp[0] = I[1]; + Tmp[1] = I[2]; + Tmp[2] = 0; + Res += (char)strtol(Tmp,0,16); + I += 2; + continue; + } + else + Res += *I; + } + return Res; +} + + /*}}}*/ // SizeToStr - Convert a long into a human readable size /*{{{*/ // --------------------------------------------------------------------- /* A max of 4 digits are shown before conversion to the next highest unit. @@ -214,7 +241,7 @@ string SizeToStr(double Size) /* bytes, KiloBytes, MegaBytes, GigaBytes, TeraBytes, PetaBytes, ExaBytes, ZettaBytes, YottaBytes */ - char Ext[] = {'b','k','M','G','T','P','E','Z','Y'}; + char Ext[] = {'\0','k','M','G','T','P','E','Z','Y'}; int I = 0; while (I <= 8) { @@ -456,6 +483,7 @@ int StringToBool(string Text,int Default = -1) if (strcasecmp(Text.c_str(),"no") == 0 || strcasecmp(Text.c_str(),"false") == 0 || strcasecmp(Text.c_str(),"without") == 0 || + strcasecmp(Text.c_str(),"off") == 0 || strcasecmp(Text.c_str(),"disable") == 0) return 0; @@ -463,6 +491,7 @@ int StringToBool(string Text,int Default = -1) if (strcasecmp(Text.c_str(),"yes") == 0 || strcasecmp(Text.c_str(),"true") == 0 || strcasecmp(Text.c_str(),"with") == 0 || + strcasecmp(Text.c_str(),"on") == 0 || strcasecmp(Text.c_str(),"enable") == 0) return 1; @@ -501,6 +530,8 @@ bool ReadMessages(int Fd, vector &List) while (1) { int Res = read(Fd,End,sizeof(Buffer) - (End-Buffer)); + if (Res < 0 && errno == EINTR) + continue; // Process is dead, this is kind of bad.. if (Res == 0) @@ -570,6 +601,30 @@ static int MonthConv(char *Month) } } /*}}}*/ +// timegm - Internal timegm function if gnu is not available /*{{{*/ +// --------------------------------------------------------------------- +/* Ripped this evil little function from wget - I prefer the use of + GNU timegm if possible as this technique will have interesting problems + with leap seconds, timezones and other. + + Converts struct tm to time_t, assuming the data in tm is UTC rather + than local timezone (mktime assumes the latter). + + Contributed by Roger Beeman , with the help of + Mark Baushke and the rest of the Gurus at CISCO. */ +#ifndef __USE_MISC // glib sets this +static time_t timegm(struct tm *t) +{ + time_t tl, tb; + + tl = mktime (t); + if (tl == -1) + return -1; + tb = mktime (gmtime (&tl)); + return (tl <= tb ? (tl + (tl - tb)) : (tl - (tb - tl))); +} +#endif + /*}}}*/ // StrToTime - Converts a string into a time_t /*{{{*/ // --------------------------------------------------------------------- /* This handles all 3 populare time formats including RFC 1123, RFC 1036