43 size_t n = nbytes + 1;
47 for (u = 0; u < nbytes; u++) {
59 memcpy(
string, bytes, nbytes);
63 for (u = 0; u < nbytes; u++) {
64 if (bytes[u] ==
'\0') {
86 ret = ByteExtract(&i64, e,
len, bytes);
110 ret = ByteExtract(&i64, e,
len, bytes);
115 *res = (uint32_t)i64;
131 ret = ByteExtract(&i64, e,
len, bytes);
136 *res = (uint16_t)i64;
143 const char *ptr =
str;
168 *res = strtoull(ptr, &endptr, base);
170 if (errno == ERANGE) {
175 }
else if (endptr == ptr && *res == 0) {
178 }
else if (endptr == ptr) {
182 else if (strict && *endptr !=
'\0') {
183 SCLogError(
"Extra characters following numeric value");
187 return (
int)(endptr - ptr);
203 if (i64 > UINT32_MAX) {
207 *res = (uint32_t)i64;
209 if ((uint64_t)(*res) != i64) {
210 SCLogDebug(
"Numeric value out of range (%" PRIu64
" > %" PRIuMAX
")",
211 i64, (uintmax_t)UINT_MAX);
226 if (i64 > UINT16_MAX) {
230 *res = (uint16_t)i64;
232 if ((uint64_t)(*res) != i64) {
233 SCLogDebug(
"Numeric value out of range (%" PRIu64
" > %" PRIuMAX
")",
234 i64, (uintmax_t)USHRT_MAX);
249 if (i64 > UINT8_MAX) {
255 if ((uint64_t)(*res) != i64) {
256 SCLogDebug(
"Numeric value out of range (%" PRIu64
" > %" PRIuMAX
")",
257 i64, (uintmax_t)UCHAR_MAX);
277 if (i64 > UINT32_MAX) {
281 *res = (uint32_t)i64;
283 if ((uint64_t)(*res) != i64) {
285 "(%" PRIu64
" > %" PRIuMAX
")",
286 i64, (uintmax_t)UINT_MAX);
304 if (i64 > UINT16_MAX) {
308 *res = (uint16_t)i64;
310 if ((uint64_t)(*res) != i64) {
312 "(%" PRIu64
" > %" PRIuMAX
")",
313 i64, (uintmax_t)USHRT_MAX);
331 if (i64 > UINT8_MAX) {
337 if ((uint64_t)(*res) != i64) {
339 "(%" PRIu64
" > %" PRIuMAX
")",
340 i64, (uintmax_t)UCHAR_MAX);
348 uint64_t *res,
int base,
size_t len,
const char *
str, uint64_t min, uint64_t max)
359 if (*res < min || *res > max) {
367 uint32_t *res,
int base,
size_t len,
const char *
str, uint32_t min, uint32_t max)
375 if (u64 > UINT32_MAX) {
379 *res = (uint32_t)u64;
381 if (*res < min || *res > max) {
385 if ((uint64_t)(*res) != u64) {
387 "(%" PRIu64
" > %" PRIuMAX
")",
388 u64, (uintmax_t)UINT_MAX);
396 uint16_t *res,
int base,
size_t len,
const char *
str, uint16_t min, uint16_t max)
404 if (u64 > UINT16_MAX) {
408 *res = (uint16_t)u64;
410 if (*res < min || *res > max) {
414 if ((uint64_t)(*res) != u64) {
416 "(%" PRIu64
" > %" PRIuMAX
")",
417 u64, (uintmax_t)USHRT_MAX);
428 uint8_t *res,
int base,
size_t len,
const char *
str, uint8_t min, uint8_t max)
436 if (u64 > UINT8_MAX) {
442 if (*res < min || *res > max) {
446 if ((uint64_t)(*res) != u64) {
448 "(%" PRIu64
" > %" PRIuMAX
")",
449 u64, (uintmax_t)UCHAR_MAX);
458 const char *ptr =
str;
483 *res = strtoll(ptr, &endptr, base);
485 if (errno == ERANGE) {
488 }
else if (endptr ==
str) {
492 else if (strict &&
len && *endptr !=
'\0') {
493 SCLogError(
"Extra characters following numeric value");
499 return (
int)(endptr - ptr);
516 if (i64 < INT32_MIN || i64 > INT32_MAX) {
522 if ((int64_t)(*res) != i64) {
524 "(%" PRIi64
" > %" PRIiMAX
")\n",
525 i64, (intmax_t)INT_MAX);
541 if (i64 < INT16_MIN || i64 > INT16_MAX) {
547 if ((int64_t)(*res) != i64) {
549 "(%" PRIi64
" > %" PRIiMAX
")\n",
550 i64, (intmax_t)SHRT_MAX);
566 if (i64 < INT8_MIN || i64 > INT8_MAX) {
572 if ((int64_t)(*res) != i64) {
574 "(%" PRIi64
" > %" PRIiMAX
")\n",
575 i64, (intmax_t)CHAR_MAX);
596 if (i64 < INT32_MIN || i64 > INT32_MAX) {
602 if ((int64_t)(*res) != i64) {
604 "(%" PRIi64
" > %" PRIiMAX
")\n",
605 i64, (intmax_t)INT_MAX);
621 if (i64 < INT16_MIN || i64 > INT16_MAX) {
627 if ((int64_t)(*res) != i64) {
629 "(%" PRIi64
" > %" PRIiMAX
")\n",
630 i64, (intmax_t)SHRT_MAX);
646 if (i64 < INT8_MIN || i64 > INT8_MAX) {
652 if ((int64_t)(*res) != i64) {
654 "(%" PRIi64
" > %" PRIiMAX
")\n",
655 i64, (intmax_t)CHAR_MAX);
663 int64_t *res,
int base,
size_t len,
const char *
str, int64_t min, int64_t max)
674 if (*res < min || *res > max) {
682 int32_t *res,
int base,
size_t len,
const char *
str, int32_t min, int32_t max)
691 if (i64 < INT32_MIN || i64 > INT32_MAX) {
697 if (*res < min || *res > max) {
701 if ((int64_t)(*res) != i64) {
703 "(%" PRIi64
" > %" PRIiMAX
")\n",
704 i64, (intmax_t)INT_MAX);
712 int16_t *res,
int base,
size_t len,
const char *
str, int16_t min, int16_t max)
721 if (i64 < INT16_MIN || i64 > INT16_MAX) {
727 if (*res < min || *res > max) {
731 if ((int64_t)(*res) != i64) {
733 "(%" PRIi64
" > %" PRIiMAX
")\n",
734 i64, (intmax_t)SHRT_MAX);
742 int8_t *res,
int base,
size_t len,
const char *
str, int8_t min, int8_t max)
751 if (i64 < INT8_MIN || i64 > INT8_MAX) {
757 if (*res < min || *res > max) {
761 if ((int64_t)(*res) != i64) {
763 "(%" PRIi64
" > %" PRIiMAX
")\n",
764 i64, (intmax_t)CHAR_MAX);
771 int HexToRaw(
const uint8_t *in,
size_t ins, uint8_t *out,
size_t outs)
781 memset(hash, 0, outs);
783 for (x = 0, i = 0; i < ins; i += 2, x++) {
784 char buf[3] = { 0, 0, 0 };
788 long value = strtol(buf, NULL, 16);
789 if (value >= 0 && value <= 255)
790 hash[x] = (uint8_t)value;
792 SCLogError(
"hash byte out of range %ld", value);
797 memcpy(out, hash, outs);
804 static int ByteTest01 (
void)
806 uint16_t val = 0x0102;
807 uint16_t i16 = 0xbfbf;
808 uint8_t bytes[2] = { 0x02, 0x01 };
811 if ((ret == 2) && (i16 == val)) {
818 static int ByteTest02 (
void)
820 uint16_t val = 0x0102;
821 uint16_t i16 = 0xbfbf;
822 uint8_t bytes[2] = { 0x01, 0x02 };
825 if ((ret == 2) && (i16 == val)) {
832 static int ByteTest03 (
void)
834 uint32_t val = 0x01020304;
835 uint32_t i32 = 0xbfbfbfbf;
836 uint8_t bytes[4] = { 0x04, 0x03, 0x02, 0x01 };
839 if ((ret == 4) && (i32 == val)) {
846 static int ByteTest04 (
void)
848 uint32_t val = 0x01020304;
849 uint32_t i32 = 0xbfbfbfbf;
850 uint8_t bytes[4] = { 0x01, 0x02, 0x03, 0x04 };
853 if ((ret == 4) && (i32 == val)) {
860 static int ByteTest05 (
void)
862 uint64_t val = 0x0102030405060708ULL;
863 uint64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
864 uint8_t bytes[8] = { 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01 };
867 if ((ret == 8) && (i64 == val)) {
874 static int ByteTest06 (
void)
876 uint64_t val = 0x0102030405060708ULL;
877 uint64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
878 uint8_t bytes[8] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
881 if ((ret == 8) && (i64 == val)) {
888 static int ByteTest07 (
void)
890 const char str[] =
"1234567890";
891 uint64_t val = 1234567890;
892 uint64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
895 if ((ret == 10) && (i64 == val)) {
902 static int ByteTest08 (
void)
904 const char str[] =
"1234567890";
905 uint32_t val = 1234567890;
906 uint32_t i32 = 0xbfbfbfbf;
909 if ((ret == 10) && (i32 == val)) {
916 static int ByteTest09 (
void)
918 const char str[] =
"12345";
919 uint16_t val = 12345;
920 uint16_t i16 = 0xbfbf;
923 if ((ret == 5) && (i16 == val)) {
930 static int ByteTest10 (
void)
932 const char str[] =
"123";
937 if ((ret == 3) && (i8 == val)) {
944 static int ByteTest11 (
void)
946 const char str[] =
"-1234567890";
947 int64_t val = -1234567890;
948 int64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
951 if ((ret == 11) && (i64 == val)) {
958 static int ByteTest12 (
void)
960 const char str[] =
"-1234567890";
961 int32_t val = -1234567890;
962 int32_t i32 = 0xbfbfbfbf;
965 if ((ret == 11) && (i32 == val)) {
972 static int ByteTest13 (
void)
974 const char str[] =
"-12345";
975 int16_t val = -12345;
976 int16_t i16 = 0xbfbf;
979 if ((ret == 6) && (i16 == val)) {
986 static int ByteTest14 (
void)
988 const char str[] =
"-123";
993 if ((ret == 4) && (i8 == val)) {
1001 static int ByteTest15 (
void)
1003 const char str[] =
"4294967295";
1004 uint32_t val = 4294967295UL;
1005 uint32_t u32 = 0xffffffff;
1008 if ((ret == 10) && (u32 == val)) {
1016 static int ByteTest16 (
void)
1018 const char str[] =
"4294967296";