X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/72229403aae25f742c07d07d625bdc1e313b401d..df56b2568e80784a3350fa9527430538fa792b79:/stglibs/common.lib/common.cpp?ds=inline diff --git a/stglibs/common.lib/common.cpp b/stglibs/common.lib/common.cpp index fb6cdbb1..a4722a00 100644 --- a/stglibs/common.lib/common.cpp +++ b/stglibs/common.lib/common.cpp @@ -47,6 +47,8 @@ #include +#include + #include #include #include @@ -343,20 +345,6 @@ for (size_t i = 0; i < src.length() / 2; i++) } } //--------------------------------------------------------------------------- -std::string Encode12str(const std::string & src) -{ -std::string res; -Encode12str(res, src); -return res; -} -//--------------------------------------------------------------------------- -std::string Decode21str(const std::string & src) -{ -std::string res; -Decode21str(res, src); -return res; -} -//--------------------------------------------------------------------------- void Encode12(char * dst, const char * src, size_t srcLen) { for (size_t i = 0; i <= srcLen; i++) @@ -761,6 +749,38 @@ void SwapBytes(int64_t & value) value = temp; } //--------------------------------------------------------------------------- +std::string formatTime(time_t ts) +{ +char buf[32]; +struct tm brokenTime; + +brokenTime.tm_wday = 0; +brokenTime.tm_yday = 0; +brokenTime.tm_isdst = 0; + +gmtime_r(&ts, &brokenTime); + +strftime(buf, 32, "%Y-%m-%d %H:%M:%S", &brokenTime); + +return buf; +} +//--------------------------------------------------------------------------- +time_t readTime(const std::string & ts) +{ +if (ts == "0000-00-00 00:00:00") + return 0; + +struct tm brokenTime; + +brokenTime.tm_wday = 0; +brokenTime.tm_yday = 0; +brokenTime.tm_isdst = 0; + +stg_strptime(ts.c_str(), "%Y-%m-%d %H:%M:%S", &brokenTime); + +return stg_timegm(&brokenTime); +} +//--------------------------------------------------------------------------- int str2x(const std::string & str, int32_t & x) { x = static_cast(strtol(str.c_str(), NULL, 10)); @@ -856,20 +876,16 @@ std::string res(val); return TrimR(TrimL(res)); } //--------------------------------------------------------------------------- -std::string ToLower(const std::string & value) +std::string ToLower(std::string value) { - std::string res; - for (std::string::size_type pos = 0; pos < value.length(); ++pos) - res += tolower(value[pos]); - return res; + std::transform(value.begin(), value.end(), value.begin(), ::tolower); + return value; } //--------------------------------------------------------------------------- -std::string ToUpper(const std::string & value) +std::string ToUpper(std::string value) { - std::string res; - for (std::string::size_type pos = 0; pos < value.length(); ++pos) - res += toupper(value[pos]); - return res; + std::transform(value.begin(), value.end(), value.begin(), ::toupper); + return value; } //--------------------------------------------------------------------------- #ifdef WIN32 @@ -937,7 +953,7 @@ strncpy(inBuf, source.c_str(), source.length()); inBuf[source.length()] = 0; -#if defined(FREE_BSD) || defined(FREE_BSD5) || defined(WIN32) +#if defined(CONST_ICONV) const char * srcPos = inBuf; #else char * srcPos = inBuf; @@ -1067,3 +1083,48 @@ if (res == 0) // Timeout return true; } + +bool ReadAll(int sd, void * dest, size_t size) +{ +size_t done = 0; +char * ptr = static_cast(dest); +while (done < size) + { + if (!WaitPackets(sd)) + return false; + ssize_t res = read(sd, ptr + done, size - done); + if (res < 0) + return false; + if (res == 0) + return true; + done += res; + } +return true; +} + +bool WriteAll(int sd, const void * source, size_t size) +{ +size_t done = 0; +const char * ptr = static_cast(source); +while (done < size) + { + ssize_t res = write(sd, ptr + done, size - done); + if (res <= 0) + return false; + done += res; + } +return true; +} + +std::string ToPrintable(const std::string & src) +{ + std::string dest; + + for (size_t i = 0; i < src.size(); ++i) + if (std::isprint(src[i])) + dest += src[i]; + else + dest += "\\" + x2str(src[i]); + + return dest; +}