• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt/router/openssl-1.0.0q/demos/tunala/
1#include "tunala.h"
2
3int int_strtoul(const char *str, unsigned long *val)
4{
5#ifdef HAVE_STRTOUL
6	char *tmp;
7	unsigned long ret = strtoul(str, &tmp, 10);
8	if((str == tmp) || (*tmp != '\0'))
9		/* The value didn't parse cleanly */
10		return 0;
11	if(ret == ULONG_MAX)
12		/* We hit a limit */
13		return 0;
14	*val = ret;
15	return 1;
16#else
17	char buf[2];
18	unsigned long ret = 0;
19	buf[1] = '\0';
20	if(str == '\0')
21		/* An empty string ... */
22		return 0;
23	while(*str != '\0') {
24		/* We have to multiply 'ret' by 10 before absorbing the next
25		 * digit. If this will overflow, catch it now. */
26		if(ret && (((ULONG_MAX + 10) / ret) < 10))
27			return 0;
28		ret *= 10;
29		if(!isdigit(*str))
30			return 0;
31		buf[0] = *str;
32		ret += atoi(buf);
33		str++;
34	}
35	*val = ret;
36	return 1;
37#endif
38}
39
40#ifndef HAVE_STRSTR
41char *int_strstr(const char *haystack, const char *needle)
42{
43	const char *sub_haystack = haystack, *sub_needle = needle;
44	unsigned int offset = 0;
45	if(!needle)
46		return haystack;
47	if(!haystack)
48		return NULL;
49	while((*sub_haystack != '\0') && (*sub_needle != '\0')) {
50		if(sub_haystack[offset] == sub_needle) {
51			/* sub_haystack is still a candidate */
52			offset++;
53			sub_needle++;
54		} else {
55			/* sub_haystack is no longer a possibility */
56			sub_haystack++;
57			offset = 0;
58			sub_needle = needle;
59		}
60	}
61	if(*sub_haystack == '\0')
62		/* Found nothing */
63		return NULL;
64	return sub_haystack;
65}
66#endif
67