3866752e7e
possible problems. - New file breakage.c handles (so far) missing functions. - Get rid of some signed/unsigned/const warnings thanks to solaris-cc - Add autoconf/automake input files, and helper scripts to populate missing (but auto-generated) files. This change adds a configure.in and Makefile.am to build everything using autoconf, automake, and libtool - and adds "gunk" scripts to generate the various files those things need (and clean then up again after). This means that "autogunk.sh" needs to be run first on a system with the autotools, but the resulting directory should be "configure"able and compilable on systems without those tools.
66 lines
1.4 KiB
C
66 lines
1.4 KiB
C
#include "tunala.h"
|
|
|
|
int int_strtoul(const char *str, unsigned long *val)
|
|
{
|
|
#ifdef HAVE_STRTOUL
|
|
char *tmp;
|
|
unsigned long ret = strtoul(str, &tmp, 10);
|
|
if((str == tmp) || (*tmp != '\0'))
|
|
/* The value didn't parse cleanly */
|
|
return 0;
|
|
if(ret == ULONG_MAX)
|
|
/* We hit a limit */
|
|
return 0;
|
|
*val = ret;
|
|
return 1;
|
|
#else
|
|
char buf[2];
|
|
unsigned long ret = 0;
|
|
buf[1] = '\0';
|
|
if(str == '\0')
|
|
/* An empty string ... */
|
|
return 0;
|
|
while(*str != '\0') {
|
|
/* We have to multiply 'ret' by 10 before absorbing the next
|
|
* digit. If this will overflow, catch it now. */
|
|
if(ret && (((ULONG_MAX + 10) / ret) < 10))
|
|
return 0;
|
|
ret *= 10;
|
|
if(!isdigit(*str))
|
|
return 0;
|
|
buf[0] = *str;
|
|
ret += atoi(buf);
|
|
str++;
|
|
}
|
|
*val = ret;
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
#ifndef HAVE_STRSTR
|
|
char *int_strstr(const char *haystack, const char *needle)
|
|
{
|
|
const char *sub_haystack = haystack, *sub_needle = needle;
|
|
unsigned int offset = 0;
|
|
if(!needle)
|
|
return haystack;
|
|
if(!haystack)
|
|
return NULL;
|
|
while((*sub_haystack != '\0') && (*sub_needle != '\0')) {
|
|
if(sub_haystack[offset] == sub_needle) {
|
|
/* sub_haystack is still a candidate */
|
|
offset++;
|
|
sub_needle++;
|
|
} else {
|
|
/* sub_haystack is no longer a possibility */
|
|
sub_haystack++;
|
|
offset = 0;
|
|
sub_needle = needle;
|
|
}
|
|
}
|
|
if(*sub_haystack == '\0')
|
|
/* Found nothing */
|
|
return NULL;
|
|
return sub_haystack;
|
|
}
|
|
#endif
|