618 |
} |
} |
619 |
|
|
620 |
bool Arg::parse_string(const char* str, int n, void* dest) { |
bool Arg::parse_string(const char* str, int n, void* dest) { |
621 |
|
if (dest == NULL) return true; |
622 |
reinterpret_cast<string*>(dest)->assign(str, n); |
reinterpret_cast<string*>(dest)->assign(str, n); |
623 |
return true; |
return true; |
624 |
} |
} |
625 |
|
|
626 |
bool Arg::parse_stringpiece(const char* str, int n, void* dest) { |
bool Arg::parse_stringpiece(const char* str, int n, void* dest) { |
627 |
|
if (dest == NULL) return true; |
628 |
reinterpret_cast<StringPiece*>(dest)->set(str, n); |
reinterpret_cast<StringPiece*>(dest)->set(str, n); |
629 |
return true; |
return true; |
630 |
} |
} |
631 |
|
|
632 |
bool Arg::parse_char(const char* str, int n, void* dest) { |
bool Arg::parse_char(const char* str, int n, void* dest) { |
633 |
if (n != 1) return false; |
if (n != 1) return false; |
634 |
|
if (dest == NULL) return true; |
635 |
*(reinterpret_cast<char*>(dest)) = str[0]; |
*(reinterpret_cast<char*>(dest)) = str[0]; |
636 |
return true; |
return true; |
637 |
} |
} |
638 |
|
|
639 |
bool Arg::parse_uchar(const char* str, int n, void* dest) { |
bool Arg::parse_uchar(const char* str, int n, void* dest) { |
640 |
if (n != 1) return false; |
if (n != 1) return false; |
641 |
|
if (dest == NULL) return true; |
642 |
*(reinterpret_cast<unsigned char*>(dest)) = str[0]; |
*(reinterpret_cast<unsigned char*>(dest)) = str[0]; |
643 |
return true; |
return true; |
644 |
} |
} |
687 |
long r = strtol(str, &end, radix); |
long r = strtol(str, &end, radix); |
688 |
if (end != str + n) return false; // Leftover junk |
if (end != str + n) return false; // Leftover junk |
689 |
if (errno) return false; |
if (errno) return false; |
690 |
|
if (dest == NULL) return true; |
691 |
*(reinterpret_cast<long*>(dest)) = r; |
*(reinterpret_cast<long*>(dest)) = r; |
692 |
return true; |
return true; |
693 |
} |
} |
705 |
unsigned long r = strtoul(str, &end, radix); |
unsigned long r = strtoul(str, &end, radix); |
706 |
if (end != str + n) return false; // Leftover junk |
if (end != str + n) return false; // Leftover junk |
707 |
if (errno) return false; |
if (errno) return false; |
708 |
|
if (dest == NULL) return true; |
709 |
*(reinterpret_cast<unsigned long*>(dest)) = r; |
*(reinterpret_cast<unsigned long*>(dest)) = r; |
710 |
return true; |
return true; |
711 |
} |
} |
717 |
long r; |
long r; |
718 |
if (!parse_long_radix(str, n, &r, radix)) return false; // Could not parse |
if (!parse_long_radix(str, n, &r, radix)) return false; // Could not parse |
719 |
if (r < SHRT_MIN || r > SHRT_MAX) return false; // Out of range |
if (r < SHRT_MIN || r > SHRT_MAX) return false; // Out of range |
720 |
|
if (dest == NULL) return true; |
721 |
*(reinterpret_cast<short*>(dest)) = static_cast<short>(r); |
*(reinterpret_cast<short*>(dest)) = static_cast<short>(r); |
722 |
return true; |
return true; |
723 |
} |
} |
729 |
unsigned long r; |
unsigned long r; |
730 |
if (!parse_ulong_radix(str, n, &r, radix)) return false; // Could not parse |
if (!parse_ulong_radix(str, n, &r, radix)) return false; // Could not parse |
731 |
if (r > USHRT_MAX) return false; // Out of range |
if (r > USHRT_MAX) return false; // Out of range |
732 |
|
if (dest == NULL) return true; |
733 |
*(reinterpret_cast<unsigned short*>(dest)) = static_cast<unsigned short>(r); |
*(reinterpret_cast<unsigned short*>(dest)) = static_cast<unsigned short>(r); |
734 |
return true; |
return true; |
735 |
} |
} |
741 |
long r; |
long r; |
742 |
if (!parse_long_radix(str, n, &r, radix)) return false; // Could not parse |
if (!parse_long_radix(str, n, &r, radix)) return false; // Could not parse |
743 |
if (r < INT_MIN || r > INT_MAX) return false; // Out of range |
if (r < INT_MIN || r > INT_MAX) return false; // Out of range |
744 |
|
if (dest == NULL) return true; |
745 |
*(reinterpret_cast<int*>(dest)) = r; |
*(reinterpret_cast<int*>(dest)) = r; |
746 |
return true; |
return true; |
747 |
} |
} |
753 |
unsigned long r; |
unsigned long r; |
754 |
if (!parse_ulong_radix(str, n, &r, radix)) return false; // Could not parse |
if (!parse_ulong_radix(str, n, &r, radix)) return false; // Could not parse |
755 |
if (r > UINT_MAX) return false; // Out of range |
if (r > UINT_MAX) return false; // Out of range |
756 |
|
if (dest == NULL) return true; |
757 |
*(reinterpret_cast<unsigned int*>(dest)) = r; |
*(reinterpret_cast<unsigned int*>(dest)) = r; |
758 |
return true; |
return true; |
759 |
} |
} |
781 |
#endif |
#endif |
782 |
if (end != str + n) return false; // Leftover junk |
if (end != str + n) return false; // Leftover junk |
783 |
if (errno) return false; |
if (errno) return false; |
784 |
|
if (dest == NULL) return true; |
785 |
*(reinterpret_cast<long long*>(dest)) = r; |
*(reinterpret_cast<long long*>(dest)) = r; |
786 |
return true; |
return true; |
787 |
#endif /* HAVE_LONG_LONG */ |
#endif /* HAVE_LONG_LONG */ |
811 |
#endif |
#endif |
812 |
if (end != str + n) return false; // Leftover junk |
if (end != str + n) return false; // Leftover junk |
813 |
if (errno) return false; |
if (errno) return false; |
814 |
|
if (dest == NULL) return true; |
815 |
*(reinterpret_cast<unsigned long long*>(dest)) = r; |
*(reinterpret_cast<unsigned long long*>(dest)) = r; |
816 |
return true; |
return true; |
817 |
#endif /* HAVE_UNSIGNED_LONG_LONG */ |
#endif /* HAVE_UNSIGNED_LONG_LONG */ |
829 |
double r = strtod(buf, &end); |
double r = strtod(buf, &end); |
830 |
if (end != buf + n) return false; // Leftover junk |
if (end != buf + n) return false; // Leftover junk |
831 |
if (errno) return false; |
if (errno) return false; |
832 |
|
if (dest == NULL) return true; |
833 |
*(reinterpret_cast<double*>(dest)) = r; |
*(reinterpret_cast<double*>(dest)) = r; |
834 |
return true; |
return true; |
835 |
} |
} |
837 |
bool Arg::parse_float(const char* str, int n, void* dest) { |
bool Arg::parse_float(const char* str, int n, void* dest) { |
838 |
double r; |
double r; |
839 |
if (!parse_double(str, n, &r)) return false; |
if (!parse_double(str, n, &r)) return false; |
840 |
|
if (dest == NULL) return true; |
841 |
*(reinterpret_cast<float*>(dest)) = static_cast<float>(r); |
*(reinterpret_cast<float*>(dest)) = static_cast<float>(r); |
842 |
return true; |
return true; |
843 |
} |
} |