a26a90f2fd7378331ca8423359a66321f0620568
[platform/upstream/rpm.git] / rpmio / rpmstring.h
1 #ifndef _RPMSTRING_H_
2 #define _RPMSTRING_H_
3
4 /** \ingroup rpmstring
5  * \file rpmio/rpmstring.h
6  * String manipulation helper functions
7  */
8
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12
13 /** \ingroup rpmstring
14  * Locale insensitive islower(3) 
15  */
16 static inline int xislower(int c)  {
17     return (c >= 'a' && c <= 'z');
18 }
19
20 /** \ingroup rpmstring
21  * Locale insensitive isupper(3)
22  */
23 static inline int xisupper(int c)  {
24     return (c >= 'A' && c <= 'Z');
25 }
26
27 /** \ingroup rpmstring
28  * Locale insensitive isalpha(3)
29  */
30 static inline int xisalpha(int c)  {
31     return (xislower(c) || xisupper(c));
32 }
33
34 /** \ingroup rpmstring
35  * Locale insensitive isdigit(3)
36  */
37 static inline int xisdigit(int c)  {
38     return (c >= '0' && c <= '9');
39 }
40
41 /** \ingroup rpmstring
42  * Locale insensitive isalnum(3)
43  */
44 static inline int xisalnum(int c)  {
45     return (xisalpha(c) || xisdigit(c));
46 }
47
48 /** \ingroup rpmstring
49  * Locale insensitive isblank(3)
50  */
51 static inline int xisblank(int c)  {
52     return (c == ' ' || c == '\t');
53 }
54
55 /** \ingroup rpmstring
56  * Locale insensitive isspace(3)
57  */
58 static inline int xisspace(int c)  {
59     return (xisblank(c) || c == '\n' || c == '\r' || c == '\f' || c == '\v');
60 }
61
62 /** \ingroup rpmstring
63  * Locale insensitive tolower(3)
64  */
65 static inline int xtolower(int c)  {
66     return ((xisupper(c)) ? (c | ('a' - 'A')) : c);
67 }
68
69 /** \ingroup rpmstring
70  * Locale insensitive toupper(3)
71  */
72 static inline int xtoupper(int c)  {
73     return ((xislower(c)) ? (c & ~('a' - 'A')) : c);
74 }
75
76 /** \ingroup rpmstring
77  * Locale insensitive strcasecmp(3).
78  */
79 int xstrcasecmp(const char * s1, const char * s2)               ;
80
81 /** \ingroup rpmstring
82  * Locale insensitive strncasecmp(3).
83  */
84 int xstrncasecmp(const char *s1, const char * s2, size_t n)     ;
85
86 /** \ingroup rpmstring
87  * Split string into fields separated by a character.
88  * @param str           string
89  * @param length        length of string
90  * @param sep           separator character
91  * @return              (malloc'd) argv array
92  */
93 char ** splitString(const char * str, size_t length, char sep);
94
95 /** \ingroup rpmstring
96  * Free split string argv array.
97  * @param list          argv array
98  */
99 void freeSplitString( char ** list);
100
101 /** \ingroup rpmstring
102  * Remove occurences of trailing character from string.
103  * @param s             string
104  * @param c             character to strip
105  * @return              string
106  */
107 char * stripTrailingChar(char * s, char c);
108
109 /** \ingroup rpmstring
110  */
111 typedef struct StringBufRec *StringBuf;
112
113 /** \ingroup rpmstring
114  */
115 StringBuf newStringBuf(void);
116
117 /** \ingroup rpmstring
118  */
119 StringBuf freeStringBuf( StringBuf sb);
120
121 /** \ingroup rpmstring
122  */
123 void truncStringBuf(StringBuf sb);
124
125 /** \ingroup rpmstring
126  */
127 char * getStringBuf(StringBuf sb);
128
129 /** \ingroup rpmstring
130  */
131 void stripTrailingBlanksStringBuf(StringBuf sb);
132
133 /** \ingroup rpmstring
134  */
135 #define appendStringBuf(sb, s)     appendStringBufAux(sb, s, 0)
136
137 /** \ingroup rpmstring
138  */
139 #define appendLineStringBuf(sb, s) appendStringBufAux(sb, s, 1)
140
141 /** \ingroup rpmstring
142  */
143 void appendStringBufAux(StringBuf sb, const char * s, int nl);
144
145 #ifdef __cplusplus
146 }
147 #endif
148
149 #endif  /* _RPMSTRING_H_ */