36 void operator()(
void *p) {
45 APT_PUBLIC std::string_view Strip(std::string_view s);
46 APT_PUBLIC
bool Endswith(
const std::string_view &s,
const std::string_view &ending);
47 APT_PUBLIC
bool Startswith(
const std::string_view &s,
const std::string_view &starting);
48 APT_PUBLIC std::string Join(std::vector<std::string> list,
const std::string_view &sep);
50 APT_PUBLIC
size_t DisplayLength(std::string_view str);
55APT_PUBLIC
bool UTF8ToCodeset(
const char *codeset,
const std::string &orig, std::string *dest);
56APT_PUBLIC
char *_strstrip(
char *String);
57APT_PUBLIC
char *_strrstrip(
char *String);
58APT_PUBLIC
bool ParseQuoteWord(
const char *&String,std::string &Res);
59APT_PUBLIC
bool ParseCWord(
const char *&String,std::string &Res);
60APT_PUBLIC std::string QuoteString(
const std::string &Str,
const char *Bad);
61APT_PUBLIC std::string DeQuoteString(
const std::string &Str);
62APT_PUBLIC std::string DeQuoteString(std::string::const_iterator
const &begin, std::string::const_iterator
const &end);
65APT_PUBLIC std::string DeEscapeString(
const std::string &input);
67APT_PUBLIC std::string SizeToStr(
double Bytes);
68APT_PUBLIC std::string TimeToStr(
unsigned long Sec);
69APT_PUBLIC std::string Base64Encode(
const std::string &Str);
70APT_PUBLIC std::string Base64Decode(
const std::string_view in);
71APT_PUBLIC std::string OutputInDepth(
const unsigned long Depth,
const char* Separator=
" ");
72APT_PUBLIC std::string URItoFileName(
const std::string &
URI);
82APT_PUBLIC std::string TimeRFC1123(time_t Date,
bool const NumericTimezone);
98[[nodiscard]] APT_PUBLIC
bool RFC1123StrToTime(
const std::string &str,time_t &time);
99APT_PUBLIC std::string LookupTag(
const std::string &Message,
const char *Tag,
const char *Default = 0);
100APT_PUBLIC
int StringToBool(
const std::string &Text,
int Default = -1);
101APT_PUBLIC
bool ReadMessages(
int Fd, std::vector<std::string> &List);
102APT_PUBLIC
bool StrToNum(
const char *Str,
unsigned long &Res,
unsigned Len,
unsigned Base = 0);
103APT_PUBLIC
bool StrToNum(
const char *Str,
unsigned long long &Res,
unsigned Len,
unsigned Base = 0);
104APT_PUBLIC
bool Base256ToNum(
const char *Str,
unsigned long &Res,
unsigned int Len);
105APT_PUBLIC
bool Base256ToNum(
const char *Str,
unsigned long long &Res,
unsigned int Len);
106APT_PUBLIC
bool Hex2Num(
const std::string_view Str,
unsigned char *Num,
unsigned int Length);
108APT_PUBLIC
bool TokSplitString(
char Tok,
char *Input,
char **List,
109 unsigned long ListMax);
112APT_PUBLIC std::vector<std::string> VectorizeString(std::string_view
const &haystack,
char const &split) APT_PURE;
128APT_PUBLIC std::vector<std::string> StringSplit(std::string_view
const &input,
129 std::string_view
const &sep,
130 unsigned int maxsplit=std::numeric_limits<unsigned int>::max()) APT_PURE;
133APT_HIDDEN
bool iovprintf(std::ostream &out, const
char *format, va_list &args, ssize_t &size);
134APT_PUBLIC
void ioprintf(std::ostream &out,const
char *format,...) APT_PRINTF(2);
135APT_PUBLIC
void strprintf(std::
string &out,const
char *format,...) APT_PRINTF(2);
136APT_PUBLIC
char *safe_snprintf(
char *Buffer,
char *End,const
char *Format,...) APT_PRINTF(3);
137APT_PUBLIC
bool CheckDomainList(const std::
string &Host, const std::
string &List);
140#define tolower_ascii tolower_ascii_inline
141#define isspace_ascii isspace_ascii_inline
144static inline int tolower_ascii_unsafe(
int const c)
149static inline int tolower_ascii_inline(
int const c)
151 return (c >=
'A' && c <=
'Z') ? c + 32 : c;
154static inline int isspace_ascii_inline(
int const c)
157 return (c >= 9 && c <= 13) || c ==
' ';
160static inline int islower_ascii(
int const c)
162 return c >=
'a' && c <=
'z';
165static inline int isupper_ascii(
int const c)
167 return c >=
'A' && c <=
'Z';
170static inline int isalpha_ascii(
int const c)
172 return isupper_ascii(c) || islower_ascii(c);
175APT_PUBLIC std::string StripEpoch(
const std::string &VerStr);
177#define APT_MKSTRCMP(name,func) \
178inline APT_PURE int name(const char *A,const char *B) {return func(A,A+strlen(A),B,B+strlen(B));} \
179inline APT_PURE int name(const char *A,const char *AEnd,const char *B) {return func(A,AEnd,B,B+strlen(B));} \
180inline APT_PURE int name(const std::string& A,const char *B) {return func(A.c_str(),A.c_str()+A.length(),B,B+strlen(B));} \
181inline APT_PURE int name(const std::string& A,const std::string& B) {return func(A.c_str(),A.c_str()+A.length(),B.c_str(),B.c_str()+B.length());} \
182inline APT_PURE int name(const std::string& A,const char *B,const char *BEnd) {return func(A.c_str(),A.c_str()+A.length(),B,BEnd);}
184#define APT_MKSTRCMP2(name,func) \
185inline APT_PURE int name(const char *A,const char *AEnd,const char *B) {return func(A,AEnd,B,B+strlen(B));} \
186inline APT_PURE int name(const std::string& A,const char *B) {return func(A.begin(),A.end(),B,B+strlen(B));} \
187inline APT_PURE int name(const std::string& A,const std::string& B) {return func(A.begin(),A.end(),B.begin(),B.end());} \
188inline APT_PURE int name(const std::string& A,const char *B,const char *BEnd) {return func(A.begin(),A.end(),B,BEnd);}
190APT_PUBLIC
int APT_PURE stringcmp(
const char *A,
const char *AEnd,
const char *B,
const char *BEnd);
191APT_PUBLIC
int APT_PURE stringcasecmp(
const char *A,
const char *AEnd,
const char *B,
const char *BEnd);
197APT_PUBLIC
int APT_PURE stringcmp(std::string::const_iterator A,std::string::const_iterator AEnd,
198 const char *B,
const char *BEnd);
199APT_PUBLIC
int APT_PURE stringcmp(std::string::const_iterator A,std::string::const_iterator AEnd,
200 std::string::const_iterator B,std::string::const_iterator BEnd);
201APT_PUBLIC
int APT_PURE stringcasecmp(std::string::const_iterator A,std::string::const_iterator AEnd,
202 const char *B,
const char *BEnd);
203APT_PUBLIC
int APT_PURE stringcasecmp(std::string::const_iterator A,std::string::const_iterator AEnd,
204 std::string::const_iterator B,std::string::const_iterator BEnd);
206inline APT_PURE
int stringcmp(std::string::const_iterator A,std::string::const_iterator Aend,
const char *B) {
return stringcmp(A,Aend,B,B+strlen(B));}
207inline APT_PURE
int stringcasecmp(std::string::const_iterator A,std::string::const_iterator Aend,
const char *B) {
return stringcasecmp(A,Aend,B,B+strlen(B));}
210APT_MKSTRCMP2(stringcmp,stringcmp)
211APT_MKSTRCMP2(stringcasecmp,stringcasecmp)
214APT_PUBLIC
size_t APT_PURE strv_length(
const char **str_array);
217inline const char *DeNull(
const char *s) {
return (s == 0?
"(null)":s);}
221 void CopyFrom(
const std::string &From);
227 std::string Password;
232 operator std::string();
233 inline void operator =(
const std::string &From) {CopyFrom(From);}
234 inline bool empty() {
return Access.empty();};
235 static std::string SiteOnly(
const std::string &
URI);
236 static std::string ArchiveOnly(
const std::string &
URI);
237 static std::string NoUserPassword(
const std::string &
URI);
239 explicit URI(std::string Path) { CopyFrom(Path); }
246 const std::string *Contents;
248APT_PUBLIC std::string
SubstVar(std::string Str,
const struct SubstVar *Vars);
249APT_PUBLIC std::string
SubstVar(
const std::string_view &Str,
const std::string_view &Subst,
const std::string_view &Contents);
257APT_PUBLIC
unsigned long RegexChoice(
RxChoiceList *Rxs,
const char **ListBegin,
258 const char **ListEnd);
264static inline int StringViewCompareFast(
const std::string_view & a,
const std::string_view & b) {
265 if (a.size() != b.size())
266 return a.size() - b.size();