improving dissector_fuzz
[netsniff-ng.git] / src / xstring.c
blob0b036c200e746dfc093c582e422ec68fbd077520
1 /*
2 * netsniff-ng - the packet sniffing beast
3 * By Daniel Borkmann <daniel@netsniff-ng.org>
4 * Copyright 2009, 2010, 2011, 2012 Daniel Borkmann.
5 * Copyright 2009, 2010, 2011, 2012 Emmanuel Roullit.
6 * strlcpy, Copyright 1991, 1992 Linus Torvalds.
7 * Subject to the GPL, version 2.
8 */
10 #define _BSD_SOURCE
11 #include <string.h>
12 #include <stdio.h>
13 #include <stdarg.h>
14 #include <ctype.h>
15 #include <stdint.h>
17 #include "xstring.h"
18 #include "built_in.h"
20 size_t strlcpy(char *dest, const char *src, size_t size)
22 size_t ret = strlen(src);
24 if (size) {
25 size_t len = (ret >= size) ? size - 1 : ret;
27 memcpy(dest, src, len);
28 dest[len] = '\0';
31 return ret;
34 int slprintf(char *dst, size_t size, const char *fmt, ...)
36 int ret;
37 va_list ap;
39 va_start(ap, fmt);
41 ret = vsnprintf(dst, size, fmt, ap);
42 dst[size - 1] = '\0';
44 va_end(ap);
46 return ret;
49 noinline void *xmemset(void *s, int c, size_t n)
51 size_t i;
52 uint8_t *ptr = s;
54 for (i = 0; i < n; ++i)
55 ptr[i] = (uint8_t) c;
57 return ptr;
60 char *getuint(char *in, uint32_t *out)
62 char *pt = in, tmp;
63 char *endptr = NULL;
65 while (*in && (isdigit(*in) || isxdigit(*in) || *in == 'x'))
66 in++;
67 if (!*in)
68 panic("Syntax error!\n");
69 errno = 0;
70 tmp = *in;
71 *in = 0;
72 *out = strtoul(pt, &endptr, 0);
73 if ((endptr != NULL && *endptr != '\0') || errno != 0) {
74 panic("Syntax error!\n");
76 *in = tmp;
78 return in;
81 char *strtrim_right(register char *p, register char c)
83 register char *end;
84 register int len;
86 len = strlen(p);
87 while (*p && len) {
88 end = p + len - 1;
89 if (c == *end)
90 *end = 0;
91 else
92 break;
93 len = strlen(p);
96 return p;
99 char *strtrim_left(register char *p, register char c)
101 register int len;
103 len = strlen(p);
104 while (*p && len--) {
105 if (c == *p)
106 p++;
107 else
108 break;
111 return p;