docs: Added note to curvetun doc
[netsniff-ng.git] / src / xstring.c
blobf14c10673b5933a4068a39896fea959820e6eb0e
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 "compiler.h"
20 size_t strlcpy(char *dest, const char *src, size_t size)
22 size_t ret = strlen(src);
23 if (size) {
24 size_t len = (ret >= size) ? size - 1 : ret;
25 memcpy(dest, src, len);
26 dest[len] = '\0';
28 return ret;
31 int slprintf(char *dst, size_t size, const char *fmt, ...)
33 int ret;
34 va_list ap;
35 va_start(ap, fmt);
36 ret = vsnprintf(dst, size, fmt, ap);
37 dst[size - 1] = '\0';
38 va_end(ap);
39 return ret;
42 noinline void *xmemset(void *s, int c, size_t n)
44 size_t i;
45 uint8_t *ptr = s;
46 for (i = 0; i < n; ++i)
47 ptr[i] = (uint8_t) c;
48 return ptr;
51 char *getuint(char *in, uint32_t *out)
53 char *pt = in, tmp;
54 char *endptr = NULL;
55 while (*in && (isdigit(*in) || isxdigit(*in) || *in == 'x'))
56 in++;
57 if (!*in)
58 panic("Syntax error!\n");
59 errno = 0;
60 tmp = *in;
61 *in = 0;
62 *out = strtoul(pt, &endptr, 0);
63 if ((endptr != NULL && *endptr != '\0') || errno != 0) {
64 panic("Syntax error!\n");
66 *in = tmp;
67 return in;
70 char *strtrim_right(register char *p, register char c)
72 register char *end;
73 register int len;
74 len = strlen(p);
75 while (*p && len) {
76 end = p + len - 1;
77 if (c == *end)
78 *end = 0;
79 else
80 break;
81 len = strlen(p);
83 return p;
86 char *strtrim_left(register char *p, register char c)
88 register int len;
89 len = strlen(p);
90 while (*p && len--) {
91 if (c == *p)
92 p++;
93 else
94 break;
96 return p;