summaryrefslogtreecommitdiffstats
path: root/common/stringhelp.h
blob: d9225a3bba19e170a813dea01ec9ef2385cb4d5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/* stringhelp.h
 * Copyright (C) 1998, 1999, 2000, 2001, 2003,
 *               2006, 2007, 2009  Free Software Foundation, Inc.
 *               2015  g10 Code GmbH
 *
 * This file is part of GnuPG.
 *
 * GnuPG is free software; you can redistribute it and/or modify it
 * under the terms of either
 *
 *   - the GNU Lesser General Public License as published by the Free
 *     Software Foundation; either version 3 of the License, or (at
 *     your option) any later version.
 *
 * or
 *
 *   - the GNU General Public License as published by the Free
 *     Software Foundation; either version 2 of the License, or (at
 *     your option) any later version.
 *
 * or both in parallel, as here.
 *
 * GnuPG is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copies of the GNU General Public License
 * and the GNU Lesser General Public License along with this program;
 * if not, see <http://www.gnu.org/licenses/>.
 */

#ifndef GNUPG_COMMON_STRINGHELP_H
#define GNUPG_COMMON_STRINGHELP_H

#include "types.h"

/*-- stringhelp.c --*/
char *has_leading_keyword (const char *string, const char *keyword);

const char *memistr (const void *buf, size_t buflen, const char *sub);
char *mem2str( char *, const void *, size_t);
char *trim_spaces( char *string );
char *trim_trailing_spaces( char *string );
unsigned int trim_trailing_chars( unsigned char *line, unsigned len,
					      const char *trimchars);
unsigned int trim_trailing_ws( unsigned char *line, unsigned len );
size_t length_sans_trailing_chars (const unsigned char *line, size_t len,
                                   const char *trimchars );
size_t length_sans_trailing_ws (const unsigned char *line, size_t len);


char *make_basename(const char *filepath, const char *inputpath);
char *make_dirname(const char *filepath);
char *make_filename( const char *first_part, ... ) GPGRT_ATTR_SENTINEL(0);
char *make_filename_try (const char *first_part, ... ) GPGRT_ATTR_SENTINEL(0);
char *make_absfilename (const char *first_part, ...) GPGRT_ATTR_SENTINEL(0);
char *make_absfilename_try (const char *first_part,
                            ...) GPGRT_ATTR_SENTINEL(0);
int compare_filenames( const char *a, const char *b );

int hextobyte (const char *s);

char *sanitize_buffer (const void *p, size_t n, int delim);


size_t utf8_charcount (const char *s, int len);


#ifdef HAVE_W32_SYSTEM
const char *w32_strerror (int ec);
#endif


int ascii_isupper (int c);
int ascii_islower (int c);
int ascii_toupper (int c);
int ascii_tolower (int c);
char *ascii_strlwr (char *s);
int ascii_strcasecmp( const char *a, const char *b );
int ascii_strncasecmp (const char *a, const char *b, size_t n);
int ascii_memcasecmp( const void *a, const void *b, size_t n );
const char *ascii_memistr ( const void *buf, size_t buflen, const char *sub);
void *ascii_memcasemem (const void *haystack, size_t nhaystack,
                        const void *needle, size_t nneedle);


#ifndef HAVE_MEMICMP
int memicmp( const char *a, const char *b, size_t n );
#endif
#ifndef HAVE_STPCPY
char *stpcpy(char *a,const char *b);
#endif
#ifndef HAVE_STRPBRK
char *strpbrk (const char *s, const char *accept);
#endif
#ifndef HAVE_STRSEP
char *strsep (char **stringp, const char *delim);
#endif
#ifndef HAVE_STRLWR
char *strlwr(char *a);
#endif
#ifndef HAVE_STRTOUL
#  define strtoul(a,b,c)  ((unsigned long)strtol((a),(b),(c)))
#endif
#ifndef HAVE_MEMMOVE
#  define memmove(d, s, n) bcopy((s), (d), (n))
#endif
#ifndef HAVE_STRICMP
#  define stricmp(a,b)	 strcasecmp( (a), (b) )
#endif
#ifndef HAVE_MEMRCHR
void *memrchr (const void *buffer, int c, size_t n);
#endif


#ifndef HAVE_ISASCII
static inline int
isascii (int c)
{
  return (((c) & ~0x7f) == 0);
}
#endif /* !HAVE_ISASCII */


#ifndef STR
#  define STR(v) #v
#endif
#define STR2(v) STR(v)

/* Percent-escape the string STR by replacing colons with '%3a'.  If
   EXTRA is not NULL, also replace all characters given in EXTRA.  The
   "try_" variant fails with NULL if not enough memory can be
   allocated.  */
char *percent_escape (const char *str, const char *extra);
char *try_percent_escape (const char *str, const char *extra);


/* Concatenate the string S1 with all the following strings up to a
   NULL.  Returns a malloced buffer with the new string or NULL on a
   malloc error or if too many arguments are given.  */
char *strconcat (const char *s1, ...) GPGRT_ATTR_SENTINEL(0);
/* Ditto, but die on error.  */
char *xstrconcat (const char *s1, ...) GPGRT_ATTR_SENTINEL(0);

char **strsplit (char *string, char delim, char replacement, int *count);

/* Tokenize STRING using the set of delimiters in DELIM.  */
char **strtokenize (const char *string, const char *delim);

/* Return True if MYVERSION is greater or equal than REQ_VERSION.  */
int compare_version_strings (const char *my_version, const char *req_version);

/* Format a string so that it fits within about TARGET_COLS columns.  */
char *format_text (char *text, int in_place, int target_cols, int max_cols);


/*-- mapstrings.c --*/
const char *map_static_macro_string (const char *string);

#endif /*GNUPG_COMMON_STRINGHELP_H*/