diff --git a/DateTimeCore.cpp b/DateTimeCore.cpp index 1aa388f..539bbdf 100644 --- a/DateTimeCore.cpp +++ b/DateTimeCore.cpp @@ -417,11 +417,12 @@ char const * BuildTimeStr( unsigned char Hours, unsigned char Minutes, unsigned char const * BuildDateTimeStr( unsigned char Day, unsigned char Month, unsigned Year, unsigned char Hours, unsigned char Minutes, unsigned char Seconds, - const char * DateSeparator, const char * TimeSeparator ) + const char * DateSeparator, const char * TimeSeparator, const char * Separator ) { // Build String - sprintf( ReturnStr, "%04d%s%02d%s%02d %02d%s%02d%s%02d", + sprintf( ReturnStr, "%04d%s%02d%s%02d%s%02d%s%02d%s%02d", Year, ((DateSeparator)? DateSeparator : ""), Month, ((DateSeparator)? DateSeparator : ""), Day, + Separator, Hours, ((TimeSeparator)? TimeSeparator : ""), Minutes, ((TimeSeparator)? TimeSeparator : ""), Seconds ); return (ReturnStr); @@ -457,7 +458,8 @@ char const * BuildTimeStr( const time_t EpochTime, bool LocalTime, const char * } //--------------------------------------------------------------------------- -char const * BuildDateTimeStr( const time_t EpochTime, bool LocalTime, const char * DateSeparator, const char * TimeSeparator ) +char const * BuildDateTimeStr( const time_t EpochTime, bool LocalTime, + const char * DateSeparator, const char * TimeSeparator, const char * Separator ) { unsigned char Day; unsigned char Month; diff --git a/DateTimeCore.h b/DateTimeCore.h index 1fe92ff..dcd9257 100644 --- a/DateTimeCore.h +++ b/DateTimeCore.h @@ -50,11 +50,12 @@ char const * BuildDateStr( unsigned char Day, unsigned char Month, unsigned Yea char const * BuildTimeStr( unsigned char Hours, unsigned char Minutes, unsigned char Seconds, const char * TimeSeparator = ":" ); char const * BuildDateTimeStr( unsigned char Day, unsigned char Month, unsigned Year, unsigned char Hours, unsigned char Minutes, unsigned char Seconds, - const char * DateSeparator = "/", const char * TimeSeparator = ":" ); + const char * DateSeparator = "/", const char * TimeSeparator = ":", const char * Separator = " " ); char const * BuildDateStr( const time_t EpochTime, bool LocalTime, const char * DateSeparator = "/" ); char const * BuildTimeStr( const time_t EpochTime, bool LocalTime, const char * TimeSeparator = ":" ); -char const * BuildDateTimeStr( const time_t EpochTime, bool LocalTime, const char * DateSeparator = "/", const char * TimeSeparator = ":" ); +char const * BuildDateTimeStr( const time_t EpochTime, bool LocalTime, + const char * DateSeparator = "/", const char * TimeSeparator = ":", const char * Separator = " " ); //--------------------------------------------------------------------------- diff --git a/UtilCore.cpp b/UtilCore.cpp index 29b14f6..beac708 100644 --- a/UtilCore.cpp +++ b/UtilCore.cpp @@ -213,3 +213,79 @@ char * StrSearch( const char * Haystack, const char * Needle, const int Haystac return NULL; } //--------------------------------------------------------------------------- + +bool UrlEncode( const char * Input, char * Output, char ** EndPos ) +{ + int c; + char h[] = "0123456789abcdef"; + char * Ipos = (char*)Input; + char * Opos = Output; + + if (!Ipos || !Opos) { + if (*EndPos) *EndPos = NULL; + return false; + } + + while ((c = *Ipos)) { + if ((('a' <= c) && (c <= 'z')) || + (('A' <= c) && (c <= 'Z')) || + (('0' <= c) && (c <= '9')) || + (c == '-') || (c == '_') || (c == '.')) { + *Opos = *Ipos; + Opos++; + } + else if (c == ' ') { + *Opos = '+'; + Opos++; + } + else { + Opos[0] = '%'; + Opos[1] = h[c >> 4]; + Opos[2] = h[c & 0x0f]; + Opos += 3; + } + Ipos++; + } + *Opos = 0; + if (EndPos) *EndPos = Opos; + return true; +} +//--------------------------------------------------------------------------- + +bool UrlDecode( const char * Input, char * Output, char ** EndPos ) +{ + char c, c1, c2; + char * Ipos = (char*)Input; + char * Opos = Output; + + if (!Ipos || !Opos) { + if (EndPos) *EndPos = Output; + return false; + } + + while ((c = *Ipos)) { + if (c == '%') { + if (!(c1 = tolower(Ipos[1])) || + !(c2 = tolower(Ipos[2])) || + !isxdigit(c1) || !isxdigit(c2)) + return false; + c1 = (c1 <= '9')? (c1 - '0') : (c1 - 'a' + 10); + c2 = (c2 <= '9')? (c2 - '0') : (c2 - 'a' + 10); + *Opos = 16*c1 + c2; + Ipos += 3; + } + else if (c == '+') { + *Opos = ' '; + Ipos++; + } + else { + *Opos = c; + Ipos++; + } + Opos++; + } + *Opos = 0; + if (EndPos) *EndPos = Opos; + return true; +} +//--------------------------------------------------------------------------- diff --git a/UtilCore.h b/UtilCore.h index 1a8f568..2e078d6 100644 --- a/UtilCore.h +++ b/UtilCore.h @@ -33,6 +33,8 @@ inline u_int8_t HexToInt( char Digit ) { char * HexStrToBytes( const char * Str, const int Len, const char * Separator = NULL, char * OutBuf = NULL ); char * BinStrToBytes( const char * Str, const int Len, const char * Separator = NULL, char * OutBuf = NULL ); +//--------------------------------------------------------------------------- + // Search string data char * StrSearch( const char * Haystack, const char * Needle, const int hLen = 0, const int nLen = 0 ); @@ -43,6 +45,11 @@ inline char * strlcase( char * Str ) { return Str; } +//--------------------------------------------------------------------------- + +// URL encoding & decoding +bool UrlEncode( const char * Input, char * Output, char ** EndPos = NULL ); +bool UrlDecode( const char * Input, char * Output, char ** EndPos = NULL ); //---------------------------------------------------------------------------