File: strparse.c

package info (click to toggle)
udpcast 20250223-0.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 940 kB
  • sloc: ansic: 7,906; sh: 3,459; perl: 228; makefile: 116
file content (39 lines) | stat: -rw-r--r-- 862 bytes parent folder | download
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

#include "config.h"
#include "strparse.h"
#include <stdlib.h>
#include <errno.h>

static long strtol_with_range(const char *nptr, char **endptr, int base,
			      long min, long max) {
	long l;
	errno = 0;
	l = strtol(nptr, endptr, base);
	if(errno != 0)
		return l;
	if(l > max) {
		errno = ERANGE;
		return max;
	}
	if(l < min) {
		errno = ERANGE;
		return min;
	}
	return l;
}

unsigned short strtous(const char *nptr, char **endptr, int base) {
	return (unsigned short) strtol_with_range(nptr, endptr, base,
						  0, USHRT_MAX);
}

#if UINT_MAX != ULONG_MAX
unsigned int strtoui(const char *nptr, char **endptr, int base) {
	return (unsigned int) strtol_with_range(nptr, endptr, base,
						0, UINT_MAX);
}
int strtoi(const char *nptr, char **endptr, int base) {
	return (int) strtol_with_range(nptr, endptr, base,
				       INT_MIN, INT_MAX);
}
#endif