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 for (x = 0, i = 0; i < ins; i += 2, x++) {
782 char buf[3] = { 0, 0, 0 };
786 long value = strtol(buf, NULL, 16);
787 if (value >= 0 && value <= 255)
788 out[x] = (uint8_t)value;
790 SCLogError(
"hash byte out of range %ld", value);
801 static int ByteTest01 (
void)
803 uint16_t val = 0x0102;
804 uint16_t i16 = 0xbfbf;
805 uint8_t bytes[2] = { 0x02, 0x01 };
808 if ((ret == 2) && (i16 == val)) {
815 static int ByteTest02 (
void)
817 uint16_t val = 0x0102;
818 uint16_t i16 = 0xbfbf;
819 uint8_t bytes[2] = { 0x01, 0x02 };
822 if ((ret == 2) && (i16 == val)) {
829 static int ByteTest03 (
void)
831 uint32_t val = 0x01020304;
832 uint32_t i32 = 0xbfbfbfbf;
833 uint8_t bytes[4] = { 0x04, 0x03, 0x02, 0x01 };
836 if ((ret == 4) && (i32 == val)) {
843 static int ByteTest04 (
void)
845 uint32_t val = 0x01020304;
846 uint32_t i32 = 0xbfbfbfbf;
847 uint8_t bytes[4] = { 0x01, 0x02, 0x03, 0x04 };
850 if ((ret == 4) && (i32 == val)) {
857 static int ByteTest05 (
void)
859 uint64_t val = 0x0102030405060708ULL;
860 uint64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
861 uint8_t bytes[8] = { 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01 };
864 if ((ret == 8) && (i64 == val)) {
871 static int ByteTest06 (
void)
873 uint64_t val = 0x0102030405060708ULL;
874 uint64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
875 uint8_t bytes[8] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
878 if ((ret == 8) && (i64 == val)) {
885 static int ByteTest07 (
void)
887 const char str[] =
"1234567890";
888 uint64_t val = 1234567890;
889 uint64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
892 if ((ret == 10) && (i64 == val)) {
899 static int ByteTest08 (
void)
901 const char str[] =
"1234567890";
902 uint32_t val = 1234567890;
903 uint32_t i32 = 0xbfbfbfbf;
906 if ((ret == 10) && (i32 == val)) {
913 static int ByteTest09 (
void)
915 const char str[] =
"12345";
916 uint16_t val = 12345;
917 uint16_t i16 = 0xbfbf;
920 if ((ret == 5) && (i16 == val)) {
927 static int ByteTest10 (
void)
929 const char str[] =
"123";
934 if ((ret == 3) && (i8 == val)) {
941 static int ByteTest11 (
void)
943 const char str[] =
"-1234567890";
944 int64_t val = -1234567890;
945 int64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
948 if ((ret == 11) && (i64 == val)) {
955 static int ByteTest12 (
void)
957 const char str[] =
"-1234567890";
958 int32_t val = -1234567890;
959 int32_t i32 = 0xbfbfbfbf;
962 if ((ret == 11) && (i32 == val)) {
969 static int ByteTest13 (
void)
971 const char str[] =
"-12345";
972 int16_t val = -12345;
973 int16_t i16 = 0xbfbf;
976 if ((ret == 6) && (i16 == val)) {
983 static int ByteTest14 (
void)
985 const char str[] =
"-123";
990 if ((ret == 4) && (i8 == val)) {
998 static int ByteTest15 (
void)
1000 const char str[] =
"4294967295";
1001 uint32_t val = 4294967295UL;
1002 uint32_t u32 = 0xffffffff;
1005 if ((ret == 10) && (u32 == val)) {
1013 static int ByteTest16 (
void)
1015 const char str[] =
"4294967296";