]> git.ipfire.org Git - people/stevee/pakfire.git/blame - src/debugedit/rpmiotypes.h
Use autotools.
[people/stevee/pakfire.git] / src / debugedit / rpmiotypes.h
CommitLineData
3ce6a8ad
MT
1#ifndef _H_RPMIOTYPES_
2#define _H_RPMIOTYPES_
3
4/** \ingroup rpmio
5 * \file rpmio/rpmiotypes.h
6 */
7
8/** \ingroup rpmio
9 * RPM return codes.
10 */
11typedef enum rpmRC_e {
12 RPMRC_OK = 0, /*!< Generic success code */
13 RPMRC_NOTFOUND = 1, /*!< Generic not found code. */
14 RPMRC_FAIL = 2, /*!< Generic failure code. */
15 RPMRC_NOTTRUSTED = 3, /*!< Signature is OK, but key is not trusted. */
16 RPMRC_NOKEY = 4 /*!< Public key is unavailable. */
17} rpmRC;
18
19/** \ingroup rpmio
20 * Private int typedefs to avoid C99 portability issues.
21 */
22typedef /*@unsignedintegraltype@*/ unsigned char rpmuint8_t;
23typedef /*@unsignedintegraltype@*/ unsigned short rpmuint16_t;
24typedef /*@unsignedintegraltype@*/ unsigned int rpmuint32_t;
25typedef /*@unsignedintegraltype@*/ unsigned long long rpmuint64_t;
26
27/** \ingroup rpmio
28 */
29typedef /*@signedintegraltype@*/ int rpmint32_t;
30
31/**
32 */
33typedef /*@refcounted@*/ struct rpmioItem_s * rpmioItem;
34struct rpmioItem_s {
35/*@null@*/
36 void *use; /*!< use count -- return to pool when zero */
37/*@kept@*/ /*@null@*/
38 void *pool; /*!< pool (or NULL if malloc'd) */
39#if defined(__LCLINT__)
40/*@refs@*/
41 int nrefs; /*!< (unused) keep splint happy */
42#endif
43};
44
45/**
46 */
47typedef struct rpmioPool_s * rpmioPool;
48
49/** \ingroup rpmio
50 */
51typedef /*@abstract@*/ /*@refcounted@*/ struct rpmiob_s * rpmiob;
52
53/** \ingroup rpmio
54 */
55/*@unchecked@*/
56extern size_t _rpmiob_chunk;
57
58/** \ingroup rpmio
59 */
60typedef struct rpmioP_s {
61 char * str;
62 char * next;
63 const char ** av;
64 int ac;
65} * rpmioP;
66
67/** \ingroup rpmpgp
68 */
69typedef /*@abstract@*/ struct DIGEST_CTX_s * DIGEST_CTX;
70
71/** \ingroup rpmpgp
72 */
73typedef /*@abstract@*/ struct pgpPkt_s * pgpPkt;
74
75/** \ingroup rpmpgp
76 */
77typedef /*@abstract@*/ /*@refcounted@*/ struct pgpDig_s * pgpDig;
78
79/** \ingroup rpmpgp
80 */
81typedef /*@abstract@*/ struct pgpDigParams_s * pgpDigParams;
82
83/** \ingroup rpmpgp
84 */
85typedef rpmuint8_t pgpKeyID_t[8];
86
87/** \ingroup rpmpgp
88 */
89typedef rpmuint8_t pgpTime_t[4];
90
91/** \ingroup rpmpgp
92 * Bit(s) to control digest and signature verification.
93 */
94typedef enum pgpVSFlags_e {
95 RPMVSF_DEFAULT = 0,
96 RPMVSF_NOHDRCHK = (1 << 0),
97 RPMVSF_NEEDPAYLOAD = (1 << 1),
98 /* bit(s) 2-7 unused */
99 RPMVSF_NOSHA1HEADER = (1 << 8),
100 RPMVSF_NOMD5HEADER = (1 << 9), /* unimplemented */
101 RPMVSF_NODSAHEADER = (1 << 10),
102 RPMVSF_NORSAHEADER = (1 << 11),
103 /* bit(s) 12-15 unused */
104 RPMVSF_NOSHA1 = (1 << 16), /* unimplemented */
105 RPMVSF_NOMD5 = (1 << 17),
106 RPMVSF_NODSA = (1 << 18),
107 RPMVSF_NORSA = (1 << 19)
108 /* bit(s) 20-31 unused */
109} pgpVSFlags;
110
111#define _RPMVSF_NODIGESTS \
112 ( RPMVSF_NOSHA1HEADER | \
113 RPMVSF_NOMD5HEADER | \
114 RPMVSF_NOSHA1 | \
115 RPMVSF_NOMD5 )
116
117#define _RPMVSF_NOSIGNATURES \
118 ( RPMVSF_NODSAHEADER | \
119 RPMVSF_NORSAHEADER | \
120 RPMVSF_NODSA | \
121 RPMVSF_NORSA )
122
123#define _RPMVSF_NOHEADER \
124 ( RPMVSF_NOSHA1HEADER | \
125 RPMVSF_NOMD5HEADER | \
126 RPMVSF_NODSAHEADER | \
127 RPMVSF_NORSAHEADER )
128
129#define _RPMVSF_NOPAYLOAD \
130 ( RPMVSF_NOSHA1 | \
131 RPMVSF_NOMD5 | \
132 RPMVSF_NODSA | \
133 RPMVSF_NORSA )
134
135/*@-redef@*/ /* LCL: ??? */
136typedef /*@abstract@*/ const void * fnpyKey;
137/*@=redef@*/
138
139/**
140 * Bit(s) to identify progress callbacks.
141 */
142typedef enum rpmCallbackType_e {
143 RPMCALLBACK_UNKNOWN = 0,
144 RPMCALLBACK_INST_PROGRESS = (1 << 0),
145 RPMCALLBACK_INST_START = (1 << 1),
146 RPMCALLBACK_INST_OPEN_FILE = (1 << 2),
147 RPMCALLBACK_INST_CLOSE_FILE = (1 << 3),
148 RPMCALLBACK_TRANS_PROGRESS = (1 << 4),
149 RPMCALLBACK_TRANS_START = (1 << 5),
150 RPMCALLBACK_TRANS_STOP = (1 << 6),
151 RPMCALLBACK_UNINST_PROGRESS = (1 << 7),
152 RPMCALLBACK_UNINST_START = (1 << 8),
153 RPMCALLBACK_UNINST_STOP = (1 << 9),
154 RPMCALLBACK_REPACKAGE_PROGRESS = (1 << 10),
155 RPMCALLBACK_REPACKAGE_START = (1 << 11),
156 RPMCALLBACK_REPACKAGE_STOP = (1 << 12),
157 RPMCALLBACK_UNPACK_ERROR = (1 << 13),
158 RPMCALLBACK_CPIO_ERROR = (1 << 14),
159 RPMCALLBACK_SCRIPT_ERROR = (1 << 15)
160} rpmCallbackType;
161
162/**
163 */
164typedef void * rpmCallbackData;
165
166/** \ingroup rpmpgp
167 * 9.4. Hash Algorithms
168 *
169\verbatim
170 ID Algorithm Text Name
171 -- --------- ---- ----
172 1 - MD5 "MD5"
173 2 - SHA-1 "SHA1"
174 3 - RIPE-MD/160 "RIPEMD160"
175 4 - Reserved for double-width SHA (experimental)
176 5 - MD2 "MD2"
177 6 - Reserved for TIGER/192 "TIGER192"
178 7 - Reserved for HAVAL (5 pass, 160-bit) "HAVAL-5-160"
179 100 to 110 - Private/Experimental algorithm.
180\endverbatim
181 *
182 * Implementations MUST implement SHA-1. Implementations SHOULD
183 * implement MD5.
184 * @todo Add SHA256.
185 */
186typedef enum pgpHashAlgo_e {
187 PGPHASHALGO_ERROR = -1,
188 PGPHASHALGO_NONE = 0,
189 PGPHASHALGO_MD5 = 1, /*!< MD5 */
190 PGPHASHALGO_SHA1 = 2, /*!< SHA-1 */
191 PGPHASHALGO_RIPEMD160 = 3, /*!< RIPEMD-160 */
192 PGPHASHALGO_MD2 = 5, /*!< MD2 */
193 PGPHASHALGO_TIGER192 = 6, /*!< TIGER-192 */
194 PGPHASHALGO_HAVAL_5_160 = 7, /*!< HAVAL-5-160 */
195 PGPHASHALGO_SHA256 = 8, /*!< SHA-256 */
196 PGPHASHALGO_SHA384 = 9, /*!< SHA-384 */
197 PGPHASHALGO_SHA512 = 10, /*!< SHA-512 */
198 PGPHASHALGO_SHA224 = 11, /*!< SHA-224 */
199
200 PGPHASHALGO_MD4 = 104, /*!< (private) MD4 */
201 PGPHASHALGO_RIPEMD128 = 105, /*!< (private) RIPEMD-128 */
202 PGPHASHALGO_CRC32 = 106, /*!< (private) CRC-32 */
203 PGPHASHALGO_ADLER32 = 107, /*!< (private) ADLER-32 */
204 PGPHASHALGO_CRC64 = 108, /*!< (private) CRC-64 */
205 PGPHASHALGO_JLU32 = 109, /*!< (private) Jenkins lookup3.c */
206
207 PGPHASHALGO_RIPEMD256 = 111, /*!< (private) RIPEMD-256 */
208 PGPHASHALGO_RIPEMD320 = 112, /*!< (private) RIPEMD-320 */
209 PGPHASHALGO_SALSA10 = 113, /*!< (private) SALSA-10 */
210 PGPHASHALGO_SALSA20 = 114, /*!< (private) SALSA-20 */
211
212 PGPHASHALGO_MD6_224 = 128+0,/*!< (private) MD6-224 */
213 PGPHASHALGO_MD6_256 = 128+1,/*!< (private) MD6-256 */
214 PGPHASHALGO_MD6_384 = 128+2,/*!< (private) MD6-384 */
215 PGPHASHALGO_MD6_512 = 128+3,/*!< (private) MD6-512 */
216
217 PGPHASHALGO_CUBEHASH_224 = 136+0,/*!< (private) CUBEHASH-224 */
218 PGPHASHALGO_CUBEHASH_256 = 136+1,/*!< (private) CUBEHASH-256 */
219 PGPHASHALGO_CUBEHASH_384 = 136+2,/*!< (private) CUBEHASH-384 */
220 PGPHASHALGO_CUBEHASH_512 = 136+3,/*!< (private) CUBEHASH-512 */
221
222 PGPHASHALGO_KECCAK_224 = 144+0,/*!< (private) KECCAK-224 */
223 PGPHASHALGO_KECCAK_256 = 144+1,/*!< (private) KECCAK-256 */
224 PGPHASHALGO_KECCAK_384 = 144+2,/*!< (private) KECCAK-384 */
225 PGPHASHALGO_KECCAK_512 = 144+3,/*!< (private) KECCAK-384 */
226
227 PGPHASHALGO_ECHO_224 = 148+0,/*!< (private) ECHO-224 */
228 PGPHASHALGO_ECHO_256 = 148+1,/*!< (private) ECHO-256 */
229 PGPHASHALGO_ECHO_384 = 148+2,/*!< (private) ECHO-384 */
230 PGPHASHALGO_ECHO_512 = 148+3,/*!< (private) ECHO-384 */
231
232 PGPHASHALGO_EDONR_224 = 152+0,/*!< (private) EDON-R-224 */
233 PGPHASHALGO_EDONR_256 = 152+1,/*!< (private) EDON-R-256 */
234 PGPHASHALGO_EDONR_384 = 152+2,/*!< (private) EDON-R-384 */
235 PGPHASHALGO_EDONR_512 = 152+3,/*!< (private) EDON-R-512 */
236
237 PGPHASHALGO_FUGUE_224 = 156+0,/*!< (private) FUGUE-224 */
238 PGPHASHALGO_FUGUE_256 = 156+1,/*!< (private) FUGUE-256 */
239 PGPHASHALGO_FUGUE_384 = 156+2,/*!< (private) FUGUE-384 */
240 PGPHASHALGO_FUGUE_512 = 156+3,/*!< (private) FUGUE-512 */
241
242 PGPHASHALGO_SKEIN_224 = 160+0,/*!< (private) SKEIN-224 */
243 PGPHASHALGO_SKEIN_256 = 160+1,/*!< (private) SKEIN-256 */
244 PGPHASHALGO_SKEIN_384 = 160+2,/*!< (private) SKEIN-384 */
245 PGPHASHALGO_SKEIN_512 = 160+3,/*!< (private) SKEIN-512 */
246 PGPHASHALGO_SKEIN_1024 = 160+4,/*!< (private) SKEIN-1024 */
247
248 PGPHASHALGO_BMW_224 = 168+0,/*!< (private) BMW-224 */
249 PGPHASHALGO_BMW_256 = 168+1,/*!< (private) BMW-256 */
250 PGPHASHALGO_BMW_384 = 168+2,/*!< (private) BMW-384 */
251 PGPHASHALGO_BMW_512 = 168+3,/*!< (private) BMW-512 */
252
253 PGPHASHALGO_SHABAL_224 = 176+0,/*!< (private) SHABAL-224 */
254 PGPHASHALGO_SHABAL_256 = 176+1,/*!< (private) SHABAL-256 */
255 PGPHASHALGO_SHABAL_384 = 176+2,/*!< (private) SHABAL-384 */
256 PGPHASHALGO_SHABAL_512 = 176+3,/*!< (private) SHABAL-512 */
257
258 PGPHASHALGO_SHAVITE3_224 = 180+0,/*!< (private) SHAVITE3-224 */
259 PGPHASHALGO_SHAVITE3_256 = 180+1,/*!< (private) SHAVITE3-256 */
260 PGPHASHALGO_SHAVITE3_384 = 180+2,/*!< (private) SHAVITE3-384 */
261 PGPHASHALGO_SHAVITE3_512 = 180+3,/*!< (private) SHAVITE3-512 */
262
263 PGPHASHALGO_BLAKE_224 = 184+0,/*!< (private) BLAKE-224 */
264 PGPHASHALGO_BLAKE_256 = 184+1,/*!< (private) BLAKE-256 */
265 PGPHASHALGO_BLAKE_384 = 184+2,/*!< (private) BLAKE-384 */
266 PGPHASHALGO_BLAKE_512 = 184+3,/*!< (private) BLAKE-512 */
267
268 PGPHASHALGO_TIB3_224 = 192+0,/*!< (private) TIB3-224 */
269 PGPHASHALGO_TIB3_256 = 192+1,/*!< (private) TIB3-256 */
270 PGPHASHALGO_TIB3_384 = 192+2,/*!< (private) TIB3-384 */
271 PGPHASHALGO_TIB3_512 = 192+3,/*!< (private) TIB3-512 */
272
273 PGPHASHALGO_SIMD_224 = 200+0,/*!< (private) SIMD-224 */
274 PGPHASHALGO_SIMD_256 = 200+1,/*!< (private) SIMD-256 */
275 PGPHASHALGO_SIMD_384 = 200+2,/*!< (private) SIMD-384 */
276 PGPHASHALGO_SIMD_512 = 200+3,/*!< (private) SIMD-512 */
277
278 PGPHASHALGO_ARIRANG_224 = 208+0,/*!< (private) ARIRANG-224 */
279 PGPHASHALGO_ARIRANG_256 = 208+1,/*!< (private) ARIRANG-256 */
280 PGPHASHALGO_ARIRANG_384 = 208+2,/*!< (private) ARIRANG-384 */
281 PGPHASHALGO_ARIRANG_512 = 208+3,/*!< (private) ARIRANG-512 */
282
283 PGPHASHALGO_LANE_224 = 212+0,/*!< (private) LANE-224 */
284 PGPHASHALGO_LANE_256 = 212+1,/*!< (private) LANE-256 */
285 PGPHASHALGO_LANE_384 = 212+2,/*!< (private) LANE-384 */
286 PGPHASHALGO_LANE_512 = 212+3,/*!< (private) LANE-512 */
287
288 PGPHASHALGO_LUFFA_224 = 216+0,/*!< (private) LUFFA-224 */
289 PGPHASHALGO_LUFFA_256 = 216+1,/*!< (private) LUFFA-256 */
290 PGPHASHALGO_LUFFA_384 = 216+2,/*!< (private) LUFFA-384 */
291 PGPHASHALGO_LUFFA_512 = 216+3,/*!< (private) LUFFA-512 */
292
293 PGPHASHALGO_CHI_224 = 224+0,/*!< (private) CHI-224 */
294 PGPHASHALGO_CHI_256 = 224+1,/*!< (private) CHI-256 */
295 PGPHASHALGO_CHI_384 = 224+2,/*!< (private) CHI-384 */
296 PGPHASHALGO_CHI_512 = 224+3,/*!< (private) CHI-512 */
297
298 PGPHASHALGO_JH_224 = 232+0,/*!< (private) JH-224 */
299 PGPHASHALGO_JH_256 = 232+1,/*!< (private) JH-256 */
300 PGPHASHALGO_JH_384 = 232+2,/*!< (private) JH-384 */
301 PGPHASHALGO_JH_512 = 232+3,/*!< (private) JH-512 */
302
303 PGPHASHALGO_GROESTL_224 = 240+0,/*!< (private) GROESTL-224 */
304 PGPHASHALGO_GROESTL_256 = 240+1,/*!< (private) GROESTL-256 */
305 PGPHASHALGO_GROESTL_384 = 240+2,/*!< (private) GROESTL-384 */
306 PGPHASHALGO_GROESTL_512 = 240+3,/*!< (private) GROESTL-512 */
307
308 PGPHASHALGO_HAMSI_224 = 248+0,/*!< (private) HAMSI-224 */
309 PGPHASHALGO_HAMSI_256 = 248+1,/*!< (private) HAMSI-256 */
310 PGPHASHALGO_HAMSI_384 = 248+2,/*!< (private) HAMSI-384 */
311 PGPHASHALGO_HAMSI_512 = 248+3,/*!< (private) HAMSI-512 */
312
313} pgpHashAlgo;
314
315/** \ingroup rpmpgp
316 * Bit(s) to control digest operation.
317 */
318typedef enum rpmDigestFlags_e {
319 RPMDIGEST_NONE = 0,
320} rpmDigestFlags;
321
322#if defined(_RPMIOB_INTERNAL)
323/** \ingroup rpmio
324 */
325struct rpmiob_s{
326 struct rpmioItem_s _item; /*!< usage mutex and pool identifier. */
327 rpmuint8_t * b; /*!< data octects. */
328 size_t blen; /*!< no. of octets used. */
329 size_t allocated; /*!< no. of octets allocated. */
330#if defined(__LCLINT__)
331/*@refs@*/
332 int nrefs; /*!< (unused) keep splint happy */
333#endif
334};
335#endif
336
337#ifdef __cplusplus
338extern "C" {
339#endif
340
341/** \ingroup rpmpgp
342 * Return digest algorithm identifier.
343 * @param ctx digest context
344 * @return digest hash algorithm identifier
345 */
346pgpHashAlgo rpmDigestAlgo(DIGEST_CTX ctx)
347 /*@*/;
348
349/** \ingroup rpmpgp
350 * Return digest flags.
351 * @param ctx digest context
352 * @return digest flags
353 */
354rpmDigestFlags rpmDigestF(DIGEST_CTX ctx)
355 /*@*/;
356
357/** \ingroup rpmpgp
358 * Return digest name.
359 * @param ctx digest context
360 * @return digest name
361 */
362/*@observer@*/
363const char * rpmDigestName(DIGEST_CTX ctx)
364 /*@*/;
365
366/** \ingroup rpmpgp
367 * Return digest ASN1 oid string.
368 * Values from PKCS#1 v2.1 (aka RFC-3447).
369 * @param ctx digest context
370 * @return digest ASN1 oid string
371 */
372/*@observer@*/ /*@null@*/
373const char * rpmDigestASN1(DIGEST_CTX ctx)
374 /*@*/;
375
376/** \ingroup rpmpgp
377 * Duplicate a digest context.
378 * @param octx existing digest context
379 * @return duplicated digest context
380 */
381/*@only@*/
382DIGEST_CTX rpmDigestDup(DIGEST_CTX octx)
383 /*@*/;
384
385/** \ingroup rpmpgp
386 * Initialize digest.
387 * Set bit count to 0 and buffer to mysterious initialization constants.
388 * @param hashalgo type of digest
389 * @param flags bit(s) to control digest operation
390 * @return digest context
391 */
392/*@only@*/ /*@null@*/
393DIGEST_CTX rpmDigestInit(pgpHashAlgo hashalgo, rpmDigestFlags flags)
394 /*@*/;
395
396/** \ingroup rpmpgp
397 * Update context with next plain text buffer.
398 * @param ctx digest context
399 * @param data next data buffer
400 * @param len no. bytes of data
401 * @return 0 on success
402 */
403int rpmDigestUpdate(/*@null@*/ DIGEST_CTX ctx, const void * data, size_t len)
404 /*@modifies ctx @*/;
405
406/** \ingroup rpmpgp
407 * Return digest and destroy context.
408 *
409 * @param ctx digest context
410 * @retval *datap digest
411 * @retval *lenp no. bytes of digest
412 * @param asAscii return digest as ascii string?
413 * @return 0 on success
414 */
415int rpmDigestFinal(/*@only@*/ /*@null@*/ DIGEST_CTX ctx,
416 /*@null@*/ /*@out@*/ void * datap,
417 /*@null@*/ /*@out@*/ size_t * lenp, int asAscii)
418 /*@modifies *datap, *lenp @*/;
419
420/** \ingroup rpmpgp
421 *
422 * Compute key material and add to digest context.
423 * @param ctx digest context
424 * @param key HMAC key (NULL does digest instead)
425 * @param keylen HMAC key length(bytes) (0 uses strlen(key))
426 * @return 0 on success
427 */
428int rpmHmacInit(DIGEST_CTX ctx, const void * key, size_t keylen)
429 /*@*/;
430
431/** \ingroup rpmio
432 */
433typedef void * (*rpmCallbackFunction)
434 (/*@null@*/ const void * h,
435 const rpmCallbackType what,
436 const rpmuint64_t amount,
437 const rpmuint64_t total,
438 /*@null@*/ fnpyKey key,
439 /*@null@*/ rpmCallbackData data)
440 /*@globals internalState@*/
441 /*@modifies internalState@*/;
442
443#if !defined(SWIG)
444/** \ingroup rpmio
445 * Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
446 * @param p memory to free
447 * @return NULL always
448 */
449#if defined(WITH_DMALLOC)
450#define _free(p) ((p) != NULL ? free((void *)(p)) : (void)0, NULL)
451#else
452/*@unused@*/ static inline /*@null@*/
453void * _free(/*@only@*/ /*@null@*/ /*@out@*/ const void * p)
454 /*@modifies p @*/
455{
456 if (p != NULL) free((void *)p);
457 return NULL;
458}
459#endif
460#endif
461
462/*@unused@*/ static inline int xislower(int c) /*@*/ {
463 return (c >= (int)'a' && c <= (int)'z');
464}
465/*@unused@*/ static inline int xisupper(int c) /*@*/ {
466 return (c >= (int)'A' && c <= (int)'Z');
467}
468/*@unused@*/ static inline int xisalpha(int c) /*@*/ {
469 return (xislower(c) || xisupper(c));
470}
471/*@unused@*/ static inline int xisdigit(int c) /*@*/ {
472 return (c >= (int)'0' && c <= (int)'9');
473}
474/*@unused@*/ static inline int xisalnum(int c) /*@*/ {
475 return (xisalpha(c) || xisdigit(c));
476}
477/*@unused@*/ static inline int xisblank(int c) /*@*/ {
478 return (c == (int)' ' || c == (int)'\t');
479}
480/*@unused@*/ static inline int xisspace(int c) /*@*/ {
481 return (xisblank(c) || c == (int)'\n' || c == (int)'\r' || c == (int)'\f' || c == (int)'\v');
482}
483/*@unused@*/ static inline int xiscntrl(int c) /*@*/ {
484 return (c < (int)' ');
485}
486/*@unused@*/ static inline int xisascii(int c) /*@*/ {
487 return ((c & 0x80) != 0x80);
488}
489/*@unused@*/ static inline int xisprint(int c) /*@*/ {
490 return (c >= (int)' ' && xisascii(c));
491}
492/*@unused@*/ static inline int xisgraph(int c) /*@*/ {
493 return (c > (int)' ' && xisascii(c));
494}
495/*@unused@*/ static inline int xispunct(int c) /*@*/ {
496 return (xisgraph(c) && !xisalnum(c));
497}
498
499/*@unused@*/ static inline int xtolower(int c) /*@*/ {
500 return ((xisupper(c)) ? (c | ('a' - 'A')) : c);
501}
502/*@unused@*/ static inline int xtoupper(int c) /*@*/ {
503 return ((xislower(c)) ? (c & ~('a' - 'A')) : c);
504}
505
506/** \ingroup rpmio
507 * Locale insensitive strcasecmp(3).
508 */
509int xstrcasecmp(const char * s1, const char * s2) /*@*/;
510
511/** \ingroup rpmio
512 * Locale insensitive strncasecmp(3).
513 */
514int xstrncasecmp(const char *s1, const char * s2, size_t n) /*@*/;
515
516/** \ingroup rpmio
517 * Force encoding of string.
518 */
519/*@only@*/ /*@null@*/
520const char * xstrtolocale(/*@only@*/ const char *str)
521 /*@modifies *str @*/;
522
523/**
524 * Unreference a I/O buffer instance.
525 * @param iob hash table
526 * @return NULL if free'd
527 */
528/*@unused@*/ /*@null@*/
529rpmiob rpmiobUnlink (/*@killref@*/ /*@null@*/ rpmiob iob)
530 /*@globals fileSystem @*/
531 /*@modifies iob, fileSystem @*/;
532#define rpmiobUnlink(_iob) \
533 ((rpmiob)rpmioUnlinkPoolItem((rpmioItem)(_iob), __FUNCTION__, __FILE__, __LINE__))
534
535/**
536 * Reference a I/O buffer instance.
537 * @param iob I/O buffer
538 * @return new I/O buffer reference
539 */
540/*@unused@*/ /*@newref@*/ /*@null@*/
541rpmiob rpmiobLink (/*@null@*/ rpmiob iob)
542 /*@globals fileSystem @*/
543 /*@modifies iob, fileSystem @*/;
544#define rpmiobLink(_iob) \
545 ((rpmiob)rpmioLinkPoolItem((rpmioItem)(_iob), __FUNCTION__, __FILE__, __LINE__))
546
547/**
548 * Destroy a I/O buffer instance.
549 * @param iob I/O buffer
550 * @return NULL on last dereference
551 */
552/*@null@*/
553rpmiob rpmiobFree( /*@killref@*/ rpmiob iob)
554 /*@globals fileSystem @*/
555 /*@modifies iob, fileSystem @*/;
556#define rpmiobFree(_iob) \
557 ((rpmiob)rpmioFreePoolItem((rpmioItem)(_iob), __FUNCTION__, __FILE__, __LINE__))
558
559/**
560 * Create an I/O buffer.
561 * @param len no. of octets to allocate
562 * @return new I/O buffer
563 */
564/*@newref@*/ /*@null@*/
565rpmiob rpmiobNew(size_t len)
566 /*@globals fileSystem @*/
567 /*@modifies fileSystem @*/;
568
569/**
570 * Empty an I/O buffer.
571 * @param iob I/O buffer
572 * @return I/O buffer
573 */
574rpmiob rpmiobEmpty(/*@returned@*/ rpmiob iob)
575 /*@modifies iob @*/;
576
577/**
578 * Trim trailing white space.
579 * @param iob I/O buffer
580 * @return I/O buffer
581 */
582rpmiob rpmiobRTrim(/*@returned@*/ rpmiob iob)
583 /*@modifies iob @*/;
584
585/**
586 * Append string to I/O buffer.
587 * @param iob I/O buffer
588 * @param s string
589 * @param nl append NL?
590 * @return I/O buffer
591 */
592rpmiob rpmiobAppend(/*@returned@*/ rpmiob iob, const char * s, size_t nl)
593 /*@modifies iob @*/;
594
595/**
596 * Return I/O buffer.
597 * @param iob I/O buffer
598 * @return I/O buffer (as octets)
599 */
600rpmuint8_t * rpmiobBuf(rpmiob iob)
601 /*@*/;
602
603/**
604 * Return I/O buffer (as string).
605 * @param iob I/O buffer
606 * @return I/O buffer (as string)
607 */
608char * rpmiobStr(rpmiob iob)
609 /*@*/;
610
611/**
612 * Return I/O buffer len.
613 * @param iob I/O buffer
614 * @return I/O buffer length
615 */
616size_t rpmiobLen(rpmiob iob)
617 /*@*/;
618
619#if defined(_RPMIOB_INTERNAL)
620/**
621 * Read an entire file into a buffer.
622 * @param fn file name to read
623 * @retval *iobp I/O buffer
624 * @return 0 on success
625 */
626int rpmiobSlurp(const char * fn, rpmiob * iobp)
627 /*@globals h_errno, fileSystem, internalState @*/
628 /*@modifies *iobp, fileSystem, internalState @*/;
629#endif
630
631/**
632 * Destroy a rpmioP object.
633 * @param P parser state
634 * @return NULL
635 */
636/*@null@*/
637rpmioP rpmioPFree(/*@only@*/ /*@null@*/ rpmioP P)
638 /*@modifies P @*/;
639
640/**
641 * Parse next command out of a string incrementally.
642 * @param *Pptr parser state
643 * @param str string to parse
644 * @return RPMRC_OK on success
645 */
646rpmRC rpmioParse(rpmioP *Pptr, const char * str)
647 /*@modifies *Pptr @*/;
648
649#ifdef __cplusplus
650}
651#endif
652
653#endif /* _H_RPMIOTYPES_ */