wxString & strip(wxString &s, bool newlines) { int i, len; const wxChar *c; c = s.c_str(); i = 0; if (newlines) while ((c[i] != 0) && (isblanktab(c[i]) || iscr(c[i]))) i++; else while ((c[i] != 0) && isblanktab(c[i])) i++; if (i > 0) s.Remove(0, i); c = s.c_str(); len = s.length(); i = 0; if (newlines) while ((i < len) && (isblanktab(c[len - i - 1]) || iscr(c[len - i - 1]))) i++; else while ((i < len) && isblanktab(c[len - i - 1])) i++; if (i > 0) s.Remove(len - i, i); return s; }
void strip_back(std::string &s, bool newlines) { const char *c = s.c_str(); int len = s.length(); int i = 0; if (newlines) while ((i < len) && (isblanktab(c[len - i - 1]) || iscr(c[len - i - 1]))) ++i; else while ((i < len) && isblanktab(c[len - i - 1])) ++i; if (i > 0) s.erase(len - i, i); }
void strip(std::string &s, bool newlines) { const char *c = s.c_str(); int i = 0; if (newlines) while ((c[i] != 0) && (isblanktab(c[i]) || iscr(c[i]))) i++; else while ((c[i] != 0) && isblanktab(c[i])) i++; if (i > 0) s.erase(0, i); strip_back(s, newlines); }
int base64_decode(const std::string &src, unsigned char *dst) { unsigned int pos = 0; unsigned int dst_pos = 0; unsigned int pad = 0; while (pos < src.size()) { unsigned char in[4]; unsigned int in_pos = 0; while ((src.size() > pos) && (4 > in_pos)) { unsigned char c = (unsigned char)src[pos]; ++pos; if ((('A' <= c) && ('Z' >= c)) || (('a' <= c) && ('z' >= 'c')) || (('0' <= c) && ('9' >= c)) || ('+' == c) || ('/' == c)) { in[in_pos] = c; ++in_pos; } else if (c == '=') pad++; else if (!isblanktab(c) && !iscr(c)) return -1; } unsigned int values_idx; unsigned char values[4]; for (values_idx = 0; values_idx < in_pos; values_idx++) { values[values_idx] = (('A' <= in[values_idx]) && ('Z' >= in[values_idx])) ? in[values_idx] - 'A' : (('a' <= in[values_idx]) && ('z' >= in[values_idx])) ? in[values_idx] - 'a' + 26 : (('0' <= in[values_idx]) && ('9' >= in[values_idx])) ? in[values_idx] - '0' + 52 : ('+' == in[values_idx]) ? 62 : ('/' == in[values_idx]) ? 63 : 255; if (255 == values[values_idx]) throw mtx::base64::invalid_data_x(); } unsigned char mid[6]; mid[0] = values[0] << 2; mid[1] = values[1] >> 4; mid[2] = values[1] << 4; mid[3] = values[2] >> 2; mid[4] = values[2] << 6; mid[5] = values[3]; dst[dst_pos] = mid[0] | mid[1]; dst_pos++; if (1 >= pad) { dst[dst_pos] = mid[2] | mid[3]; dst_pos++; if (0 == pad) { dst[dst_pos] = mid[4] | mid[5]; dst_pos++; } } if (0 != pad) return dst_pos; } return dst_pos; }
std::string base64_decode(std::string const &src) { auto pos = 0u; auto pad = 0u; auto dst = std::string{}; while (pos < src.size()) { unsigned char in[4]; unsigned int in_pos = 0; while ((src.size() > pos) && (4 > in_pos)) { unsigned char c = (unsigned char)src[pos]; ++pos; if ((('A' <= c) && ('Z' >= c)) || (('a' <= c) && ('z' >= 'c')) || (('0' <= c) && ('9' >= c)) || ('+' == c) || ('/' == c)) { in[in_pos] = c; ++in_pos; } else if (c == '=') pad++; else if (!isblanktab(c) && !iscr(c)) throw mtx::base64::invalid_data_x{}; } unsigned int values_idx; unsigned char values[4]; memset(values, 0, 4); for (values_idx = 0; values_idx < in_pos; values_idx++) { values[values_idx] = (('A' <= in[values_idx]) && ('Z' >= in[values_idx])) ? in[values_idx] - 'A' : (('a' <= in[values_idx]) && ('z' >= in[values_idx])) ? in[values_idx] - 'a' + 26 : (('0' <= in[values_idx]) && ('9' >= in[values_idx])) ? in[values_idx] - '0' + 52 : ('+' == in[values_idx]) ? 62 : ('/' == in[values_idx]) ? 63 : 255; if (255 == values[values_idx]) throw mtx::base64::invalid_data_x{}; } unsigned char mid[6]; mid[0] = values[0] << 2; mid[1] = values[1] >> 4; mid[2] = values[1] << 4; mid[3] = values[2] >> 2; mid[4] = values[2] << 6; mid[5] = values[3]; dst += mid[0] | mid[1]; if (1 >= pad) { dst += mid[2] | mid[3]; if (0 == pad) dst += mid[4] | mid[5]; } if (0 != pad) break; } return dst; }