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') {
89 size_t n = nbytes + 1;
93 for (u = 0; u < nbytes; u++) {
103 memcpy(
string, bytes, nbytes);
104 string[nbytes] =
'\0';
108 for (u = 0; u < nbytes; u++) {
109 if (bytes[u] ==
'\0') {
119 strlcpy(outstr,
string, outlen);
133 ret = ByteExtract(&i64, e,
len, bytes);
138 *res = (uint64_t)i64;
157 ret = ByteExtract(&i64, e,
len, bytes);
162 *res = (uint32_t)i64;
178 ret = ByteExtract(&i64, e,
len, bytes);
183 *res = (uint16_t)i64;
190 const char *ptr =
str;
215 *res = strtoull(ptr, &endptr, base);
217 if (errno == ERANGE) {
222 }
else if (endptr == ptr && *res == 0) {
225 }
else if (endptr == ptr) {
229 else if (strict && *endptr !=
'\0') {
230 SCLogError(
"Extra characters following numeric value");
234 return (
int)(endptr - ptr);
250 if (i64 > UINT32_MAX) {
254 *res = (uint32_t)i64;
256 if ((uint64_t)(*res) != i64) {
257 SCLogDebug(
"Numeric value out of range (%" PRIu64
" > %" PRIuMAX
")",
258 i64, (uintmax_t)UINT_MAX);
273 if (i64 > UINT16_MAX) {
277 *res = (uint16_t)i64;
279 if ((uint64_t)(*res) != i64) {
280 SCLogDebug(
"Numeric value out of range (%" PRIu64
" > %" PRIuMAX
")",
281 i64, (uintmax_t)USHRT_MAX);
296 if (i64 > UINT8_MAX) {
302 if ((uint64_t)(*res) != i64) {
303 SCLogDebug(
"Numeric value out of range (%" PRIu64
" > %" PRIuMAX
")",
304 i64, (uintmax_t)UCHAR_MAX);
324 if (i64 > UINT32_MAX) {
328 *res = (uint32_t)i64;
330 if ((uint64_t)(*res) != i64) {
332 "(%" PRIu64
" > %" PRIuMAX
")",
333 i64, (uintmax_t)UINT_MAX);
351 if (i64 > UINT16_MAX) {
355 *res = (uint16_t)i64;
357 if ((uint64_t)(*res) != i64) {
359 "(%" PRIu64
" > %" PRIuMAX
")",
360 i64, (uintmax_t)USHRT_MAX);
378 if (i64 > UINT8_MAX) {
384 if ((uint64_t)(*res) != i64) {
386 "(%" PRIu64
" > %" PRIuMAX
")",
387 i64, (uintmax_t)UCHAR_MAX);
395 uint64_t *res,
int base,
size_t len,
const char *
str, uint64_t min, uint64_t max)
406 if (*res < min || *res > max) {
414 uint32_t *res,
int base,
size_t len,
const char *
str, uint32_t min, uint32_t max)
422 if (u64 > UINT32_MAX) {
426 *res = (uint32_t)u64;
428 if (*res < min || *res > max) {
432 if ((uint64_t)(*res) != u64) {
434 "(%" PRIu64
" > %" PRIuMAX
")",
435 u64, (uintmax_t)UINT_MAX);
443 uint16_t *res,
int base,
size_t len,
const char *
str, uint16_t min, uint16_t max)
451 if (u64 > UINT16_MAX) {
455 *res = (uint16_t)u64;
457 if (*res < min || *res > max) {
461 if ((uint64_t)(*res) != u64) {
463 "(%" PRIu64
" > %" PRIuMAX
")",
464 u64, (uintmax_t)USHRT_MAX);
475 uint8_t *res,
int base,
size_t len,
const char *
str, uint8_t min, uint8_t max)
483 if (u64 > UINT8_MAX) {
489 if (*res < min || *res > max) {
493 if ((uint64_t)(*res) != u64) {
495 "(%" PRIu64
" > %" PRIuMAX
")",
496 u64, (uintmax_t)UCHAR_MAX);
505 const char *ptr =
str;
530 *res = strtoll(ptr, &endptr, base);
532 if (errno == ERANGE) {
535 }
else if (endptr ==
str) {
539 else if (strict &&
len && *endptr !=
'\0') {
540 SCLogError(
"Extra characters following numeric value");
546 return (
int)(endptr - ptr);
563 if (i64 < INT32_MIN || i64 > INT32_MAX) {
569 if ((int64_t)(*res) != i64) {
571 "(%" PRIi64
" > %" PRIiMAX
")\n",
572 i64, (intmax_t)INT_MAX);
588 if (i64 < INT16_MIN || i64 > INT16_MAX) {
594 if ((int64_t)(*res) != i64) {
596 "(%" PRIi64
" > %" PRIiMAX
")\n",
597 i64, (intmax_t)SHRT_MAX);
613 if (i64 < INT8_MIN || i64 > INT8_MAX) {
619 if ((int64_t)(*res) != i64) {
621 "(%" PRIi64
" > %" PRIiMAX
")\n",
622 i64, (intmax_t)CHAR_MAX);
643 if (i64 < INT32_MIN || i64 > INT32_MAX) {
649 if ((int64_t)(*res) != i64) {
651 "(%" PRIi64
" > %" PRIiMAX
")\n",
652 i64, (intmax_t)INT_MAX);
668 if (i64 < INT16_MIN || i64 > INT16_MAX) {
674 if ((int64_t)(*res) != i64) {
676 "(%" PRIi64
" > %" PRIiMAX
")\n",
677 i64, (intmax_t)SHRT_MAX);
693 if (i64 < INT8_MIN || i64 > INT8_MAX) {
699 if ((int64_t)(*res) != i64) {
701 "(%" PRIi64
" > %" PRIiMAX
")\n",
702 i64, (intmax_t)CHAR_MAX);
710 int64_t *res,
int base,
size_t len,
const char *
str, int64_t min, int64_t max)
721 if (*res < min || *res > max) {
729 int32_t *res,
int base,
size_t len,
const char *
str, int32_t min, int32_t max)
738 if (i64 < INT32_MIN || i64 > INT32_MAX) {
744 if (*res < min || *res > max) {
748 if ((int64_t)(*res) != i64) {
750 "(%" PRIi64
" > %" PRIiMAX
")\n",
751 i64, (intmax_t)INT_MAX);
759 int16_t *res,
int base,
size_t len,
const char *
str, int16_t min, int16_t max)
768 if (i64 < INT16_MIN || i64 > INT16_MAX) {
774 if (*res < min || *res > max) {
778 if ((int64_t)(*res) != i64) {
780 "(%" PRIi64
" > %" PRIiMAX
")\n",
781 i64, (intmax_t)SHRT_MAX);
789 int8_t *res,
int base,
size_t len,
const char *
str, int8_t min, int8_t max)
798 if (i64 < INT8_MIN || i64 > INT8_MAX) {
804 if (*res < min || *res > max) {
808 if ((int64_t)(*res) != i64) {
810 "(%" PRIi64
" > %" PRIiMAX
")\n",
811 i64, (intmax_t)CHAR_MAX);
818 int HexToRaw(
const uint8_t *in,
size_t ins, uint8_t *out,
size_t outs)
828 memset(hash, 0, outs);
830 for (x = 0, i = 0; i < ins; i += 2, x++) {
831 char buf[3] = { 0, 0, 0 };
835 long value = strtol(buf, NULL, 16);
836 if (value >= 0 && value <= 255)
837 hash[x] = (uint8_t)value;
839 SCLogError(
"hash byte out of range %ld", value);
844 memcpy(out, hash, outs);
851 static int ByteTest01 (
void)
853 uint16_t val = 0x0102;
854 uint16_t i16 = 0xbfbf;
855 uint8_t bytes[2] = { 0x02, 0x01 };
858 if ((ret == 2) && (i16 == val)) {
865 static int ByteTest02 (
void)
867 uint16_t val = 0x0102;
868 uint16_t i16 = 0xbfbf;
869 uint8_t bytes[2] = { 0x01, 0x02 };
872 if ((ret == 2) && (i16 == val)) {
879 static int ByteTest03 (
void)
881 uint32_t val = 0x01020304;
882 uint32_t i32 = 0xbfbfbfbf;
883 uint8_t bytes[4] = { 0x04, 0x03, 0x02, 0x01 };
886 if ((ret == 4) && (i32 == val)) {
893 static int ByteTest04 (
void)
895 uint32_t val = 0x01020304;
896 uint32_t i32 = 0xbfbfbfbf;
897 uint8_t bytes[4] = { 0x01, 0x02, 0x03, 0x04 };
900 if ((ret == 4) && (i32 == val)) {
907 static int ByteTest05 (
void)
909 uint64_t val = 0x0102030405060708ULL;
910 uint64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
911 uint8_t bytes[8] = { 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01 };
914 if ((ret == 8) && (i64 == val)) {
921 static int ByteTest06 (
void)
923 uint64_t val = 0x0102030405060708ULL;
924 uint64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
925 uint8_t bytes[8] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
928 if ((ret == 8) && (i64 == val)) {
935 static int ByteTest07 (
void)
937 const char str[] =
"1234567890";
938 uint64_t val = 1234567890;
939 uint64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
942 if ((ret == 10) && (i64 == val)) {
949 static int ByteTest08 (
void)
951 const char str[] =
"1234567890";
952 uint32_t val = 1234567890;
953 uint32_t i32 = 0xbfbfbfbf;
956 if ((ret == 10) && (i32 == val)) {
963 static int ByteTest09 (
void)
965 const char str[] =
"12345";
966 uint16_t val = 12345;
967 uint16_t i16 = 0xbfbf;
970 if ((ret == 5) && (i16 == val)) {
977 static int ByteTest10 (
void)
979 const char str[] =
"123";
984 if ((ret == 3) && (i8 == val)) {
991 static int ByteTest11 (
void)
993 const char str[] =
"-1234567890";
994 int64_t val = -1234567890;
995 int64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
998 if ((ret == 11) && (i64 == val)) {
1005 static int ByteTest12 (
void)
1007 const char str[] =
"-1234567890";
1008 int32_t val = -1234567890;
1009 int32_t i32 = 0xbfbfbfbf;
1012 if ((ret == 11) && (i32 == val)) {
1019 static int ByteTest13 (
void)
1021 const char str[] =
"-12345";
1022 int16_t val = -12345;
1023 int16_t i16 = 0xbfbf;
1026 if ((ret == 6) && (i16 == val)) {
1033 static int ByteTest14 (
void)
1035 const char str[] =
"-123";
1040 if ((ret == 4) && (i8 == val)) {
1048 static int ByteTest15 (
void)
1050 const char str[] =
"4294967295";
1051 uint32_t val = 4294967295UL;
1052 uint32_t u32 = 0xffffffff;
1055 if ((ret == 10) && (u32 == val)) {
1063 static int ByteTest16 (
void)
1065 const char str[] =
"4294967296";