X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/bd30fed6d51a05e51fe89175dc1b84c5cfc79262..bc4721533e4041a19b42cb247064f9f42c3f9d5f:/stglibs/common.lib/common.cpp diff --git a/stglibs/common.lib/common.cpp b/stglibs/common.lib/common.cpp index 37ce079d..3361adb3 100644 --- a/stglibs/common.lib/common.cpp +++ b/stglibs/common.lib/common.cpp @@ -64,6 +64,7 @@ #include #include #include +#include #endif #include @@ -368,12 +369,6 @@ void Encode12(char * dst, const char * src, size_t srcLen) { for (size_t i = 0; i <= srcLen; i++) { - if (src[i] == 0) - { - dst[i * 2] = 'a'; - dst[i * 2 + 1] = 'a'; - break; - } char c1 = src[i] & 0x0f; char c2 = (src[i] & 0xf0) >> 4; @@ -984,4 +979,81 @@ delete[] inBuf; return dst; } -//--------------------------------------------------------------------------- + +int ParseYesNo(const std::string & str, bool * val) +{ +if (0 == strncasecmp(str.c_str(), "yes", 3)) + { + *val = true; + return 0; + } + +if (0 == strncasecmp(str.c_str(), "no", 2)) + { + *val = false; + return 0; + } + +return -1; +} + +int ParseInt(const std::string & str, int * val) +{ +if (str2x(str, *val)) + return -1; +return 0; +} + +int ParseUnsigned(const string & str, unsigned * val) +{ +if (str2x(str, *val)) + return -1; +return 0; +} + +int ParseIntInRange(const string & str, int min, int max, int * val) +{ +if (ParseInt(str, val) != 0) + return -1; + +if (*val < min || *val > max) + return -1; + +return 0; +} + +int ParseUnsignedInRange(const string & str, unsigned min, + unsigned max, unsigned * val) +{ +if (ParseUnsigned(str, val) != 0) + return -1; + +if (*val < min || *val > max) + return -1; + +return 0; +} + +bool WaitPackets(int sd) +{ +fd_set rfds; +FD_ZERO(&rfds); +FD_SET(sd, &rfds); + +struct timeval tv; +tv.tv_sec = 0; +tv.tv_usec = 500000; + +int res = select(sd + 1, &rfds, NULL, NULL, &tv); +if (res == -1) // Error + { + if (errno != EINTR) + printfd(__FILE__, "Error on select: '%s'\n", strerror(errno)); + return false; + } + +if (res == 0) // Timeout + return false; + +return true; +}