summaryrefslogtreecommitdiff
path: root/common/xstring.h
blob: aff2d1fe59086c168195e704b96e7dbe792bfb59 (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
/*
 * AUTHOR
 * N. Nielsen
 *
 * VERSION
 * 2.1.2b
 *
 * LICENSE
 * This software is in the public domain.
 *
 * The software is provided "as is", without warranty of any kind,
 * express or implied, including but not limited to the warranties
 * of merchantability, fitness for a particular purpose, and
 * noninfringement. In no event shall the author(s) be liable for any
 * claim, damages, or other liability, whether in an action of
 * contract, tort, or otherwise, arising from, out of, or in connection
 * with the software or the use or other dealings in the software.
 *
 * SUPPORT
 * Send bug reports to: <nielsen@memberwebs.com>
 */

#ifndef __XSTRING_H__
#define __XSTRING_H__

#include <stdarg.h>

/* Insert bytes at a memory location */
void memins(void* buff, size_t cbuff, const void* ins, size_t cins);

/* Insert string into a string */
#define strins(buff, ins) \
	memins((byte*)buff, strlen(buff) + 1, (byte*)ins, strlen(ins))

/* Replace a number of bytes with other bytes at a memory location */
void* memrep(void* buff, size_t len, size_t cold, const void* ins, size_t cnew);

/* Replace a number of chars with a string */
#define strrep(s, cold, ins) \
	(char*)memrep(s, sizeof(char) * (strlen(s) + 1), cold, ins, strlen(ins))
#define strnrep(s, cold, ins, cins) \
	(char*)memrep(s, sizeof(char) * (strlen(s) + 1), cold, ins, cins)

/* Reserve memory in a string. (NOTE: buff must be allocated with malloc) */
#define strrsrv(buff, cnt) \
	(buff = (char*)realloc(buff, sizeof(char) * ((cnt) + 1)))



/* Get the length of a null terminated string array */
size_t starlen(const char* array);

/* Get the end of a null terminated string array */
char* starend(const char* array);

/* Add a string to the end of a null terminated string array */
char* starnadd(char** parray, const char* str, size_t len);
#define staradd(parray, str) \
	starnadd(parray, str, strlen(str))

/* Get next value in a null terminated string array */
const char* starnext(const char* prev);

/* Clear a null terminated string array */
#define starclr(arr) \
	(arr[0] = arr[1] = 0)



#endif //__XSTRING_H__