~lifeless/ubuntu/lucid/apt/bug-22354

« back to all changes in this revision

Viewing changes to apt-pkg/contrib/strutl.h

  • Committer: Bazaar Package Importer
  • Author(s): Jason Gunthorpe
  • Date: 2001-08-18 17:21:59 UTC
  • Revision ID: james.westby@ubuntu.com-20010818172159-85f7g43wdzi9dwb5
Tags: 0.5.4
* M68k config.guess patch. Closes: #88913
* Bi-yearly test on OpenBSD and Solaris
* Doc updates. Closes: #89121, #89854, #99671, #98353, #95823, #93057,
        #97520, #102867, #101071, #102421, #101565, #98272, #106914,
        #105606, #105377
* Various cosmetic code updates. Closes: #89066, #89066, #89152
* Add "pre-auto" as an option for DSelect::Clean (run autoclean after
  update).
* More patches from Alfredo for Vendors and more SHA-1 stuff
* Fix for AJ's 'desire to remove perl-5.005' and possibly other
  similar situations. Closes: #56708, #59432
* no_proxy and ftp. Closes: #89671
* Philippe Batailler's man page patches.
* Fix for display bug. Closes: #92033, #93652, #98468
* Use more than 16bits for the dep ID. Some people ran out..
  Closes: #103020, #97809, #102951, #99974, #107362, #107395, #107362,
          #106911, #107395, #108968
* Reordered some things to make dante and FTP happier. Closes: #92757
* James R. Van Zandt's guide.sgml updates. Closes: #90027
* apt-ftparchive copes with no uncompressed package files + contents.
* French man pages from philippe batailler - well sort of. They 
  don't build yet..
* run-parts. Closes: #94286
* 'apt-cache policy' preferences debug tool.
* Whatever. Closes: #89762
* libstdc++ and HURD. Closes: #92025
* More apt-utils verbage. Closes: #86954
* Fliped comparision operator. Closes: #94618
* Used the right copyright file. Closes: #65691
* Randolph's G++3 patches. 
* Fixed no_proxy tokanizing. Closes: #100046
* Strip Config-Version when copying status to available. Closes: #97520
* Segfault with missing source files. Closes: #100325
* EINTR check. Closes: #102293
* Various changes to the locking metholodgy for --print-uris. 
  Closes: #100590
* Lame LD_LIBRARY_PATH thing. Closes: #98928
* apt-cache search searchs provide names too now. Closes: #98695
* Checksum and long lines problem. Closes: #106591
* .aptignr and empty files are just a warning. Closes: #97364  

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// -*- mode: cpp; mode: fold -*-
 
2
// Description                                                          /*{{{*/
 
3
// $Id: strutl.h,v 1.21 2001/05/29 05:09:44 jgg Exp $
 
4
/* ######################################################################
 
5
 
 
6
   String Util - These are some useful string functions
 
7
   
 
8
   _strstrip is a function to remove whitespace from the front and end
 
9
   of a string.
 
10
   
 
11
   This source is placed in the Public Domain, do with it what you will
 
12
   It was originally written by Jason Gunthorpe <jgg@gpu.srv.ualberta.ca>   
 
13
   
 
14
   ##################################################################### */
 
15
                                                                        /*}}}*/
 
16
#ifndef STRUTL_H
 
17
#define STRUTL_H
 
18
 
 
19
#ifdef __GNUG__
 
20
#pragma interface "apt-pkg/strutl.h"
 
21
#endif 
 
22
 
 
23
#include <stdlib.h>
 
24
#include <string>
 
25
#include <vector>
 
26
#include <iostream>
 
27
#include <time.h>
 
28
 
 
29
using std::string;
 
30
using std::vector;
 
31
using std::ostream;
 
32
 
 
33
#ifdef __GNUG__
 
34
// Methods have a hidden this parameter that is visible to this attribute
 
35
#define APT_FORMAT2 __attribute__ ((format (printf, 2, 3)))
 
36
#else
 
37
#define APT_FORMAT2
 
38
#endif    
 
39
    
 
40
char *_strstrip(char *String);
 
41
char *_strtabexpand(char *String,size_t Len);
 
42
bool ParseQuoteWord(const char *&String,string &Res);
 
43
bool ParseCWord(const char *&String,string &Res);
 
44
string QuoteString(string Str,const char *Bad);
 
45
string DeQuoteString(string Str);
 
46
string SizeToStr(double Bytes);
 
47
string TimeToStr(unsigned long Sec);
 
48
string Base64Encode(string Str);
 
49
string URItoFileName(string URI);
 
50
string TimeRFC1123(time_t Date);
 
51
bool StrToTime(string Val,time_t &Result);
 
52
string LookupTag(string Message,const char *Tag,const char *Default = 0);
 
53
int StringToBool(string Text,int Default = -1);
 
54
bool ReadMessages(int Fd, vector<string> &List);
 
55
bool StrToNum(const char *Str,unsigned long &Res,unsigned Len,unsigned Base = 0);
 
56
bool Hex2Num(string Str,unsigned char *Num,unsigned int Length);
 
57
bool TokSplitString(char Tok,char *Input,char **List,
 
58
                    unsigned long ListMax);
 
59
void ioprintf(ostream &out,const char *format,...) APT_FORMAT2;
 
60
bool CheckDomainList(string Host,string List);
 
61
 
 
62
#define APT_MKSTRCMP(name,func) \
 
63
inline int name(const char *A,const char *AEnd,const char *B) {return func(A,AEnd,B,B+strlen(B));}; \
 
64
inline int name(string A,const char *B) {return func(A.c_str(),A.c_str()+A.length(),B,B+strlen(B));}; \
 
65
inline int name(string A,string B) {return func(A.c_str(),A.c_str()+A.length(),B.c_str(),B.c_str()+B.length());}; \
 
66
inline int name(string A,const char *B,const char *BEnd) {return func(A.c_str(),A.c_str()+A.length(),B,BEnd);}; 
 
67
 
 
68
#define APT_MKSTRCMP2(name,func) \
 
69
inline int name(const char *A,const char *AEnd,const char *B) {return func(A,AEnd,B,B+strlen(B));}; \
 
70
inline int name(string A,const char *B) {return func(A.begin(),A.end(),B,B+strlen(B));}; \
 
71
inline int name(string A,string B) {return func(A.begin(),A.end(),B.begin(),B.end());}; \
 
72
inline int name(string A,const char *B,const char *BEnd) {return func(A.begin(),A.end(),B,BEnd);}; 
 
73
 
 
74
int stringcmp(const char *A,const char *AEnd,const char *B,const char *BEnd);
 
75
int stringcasecmp(const char *A,const char *AEnd,const char *B,const char *BEnd);
 
76
 
 
77
/* We assume that GCC 3 indicates that libstdc++3 is in use too. In that
 
78
   case the definition of string::const_iterator is not the same as
 
79
   const char * and we need these extra functions */
 
80
#if __GNUC__ >= 3
 
81
int stringcmp(string::const_iterator A,string::const_iterator AEnd,
 
82
              const char *B,const char *BEnd);
 
83
int stringcmp(string::const_iterator A,string::const_iterator AEnd,
 
84
              string::const_iterator B,string::const_iterator BEnd);
 
85
int stringcasecmp(string::const_iterator A,string::const_iterator AEnd,
 
86
                  const char *B,const char *BEnd);
 
87
int stringcasecmp(string::const_iterator A,string::const_iterator AEnd,
 
88
                  string::const_iterator B,string::const_iterator BEnd);
 
89
 
 
90
inline int stringcmp(string::const_iterator A,string::const_iterator Aend,const char *B) {return stringcmp(A,Aend,B,B+strlen(B));};
 
91
inline int stringcasecmp(string::const_iterator A,string::const_iterator Aend,const char *B) {return stringcasecmp(A,Aend,B,B+strlen(B));};
 
92
#endif
 
93
 
 
94
APT_MKSTRCMP2(stringcmp,stringcmp);
 
95
APT_MKSTRCMP2(stringcasecmp,stringcasecmp);
 
96
 
 
97
inline const char *DeNull(const char *s) {return (s == 0?"(null)":s);};
 
98
 
 
99
class URI
 
100
{
 
101
   void CopyFrom(string From);
 
102
                 
 
103
   public:
 
104
   
 
105
   string Access;
 
106
   string User;
 
107
   string Password;
 
108
   string Host;
 
109
   string Path;
 
110
   unsigned int Port;
 
111
   
 
112
   operator string();
 
113
   inline void operator =(string From) {CopyFrom(From);};
 
114
   inline bool empty() {return Access.empty();};
 
115
   static string SiteOnly(string URI);
 
116
   
 
117
   URI(string Path) {CopyFrom(Path);};
 
118
   URI() : Port(0) {};
 
119
};
 
120
 
 
121
struct SubstVar
 
122
{
 
123
   const char *Subst;
 
124
   const string *Contents;
 
125
};
 
126
string SubstVar(string Str,const struct SubstVar *Vars);
 
127
string SubstVar(string Str,string Subst,string Contents);
 
128
 
 
129
struct RxChoiceList
 
130
{
 
131
   void *UserData;
 
132
   const char *Str;
 
133
   bool Hit;
 
134
};
 
135
unsigned long RegexChoice(RxChoiceList *Rxs,const char **ListBegin,
 
136
                      const char **ListEnd);
 
137
 
 
138
#undef APT_FORMAT2
 
139
 
 
140
#endif