static int __num2string(int num, int sign, int setid, char *buf, size_t buflen, const char *const list[], size_t max, const char *def) { int ret = 0; size_t len; (void *)&setid; if (0 <= num && num < max) { len = strlcpy(buf, list[num], buflen); if (len >= buflen) ret = ERANGE; } else { len = strlcpy(buf, def, buflen); if (len >= buflen) ret = ERANGE; else { ret = __itoa(num, sign, buf, len, buflen); if (ret == 0) ret = EINVAL; } } return ret; }
int strerror_r(int errnum, char *strerrbuf, size_t buflen) { int save_errno; int len, ret = 0; const char* msg; save_errno = errno; msg = __code_string_lookup( _sys_error_strings, errnum ); if (msg != NULL) { len = strlcpy(strerrbuf, msg, buflen); if ((size_t)len >= buflen) ret = ERANGE; } else { len = strlcpy(strerrbuf, "Unknown error: ", buflen); if ((size_t)len >= buflen) ret = ERANGE; else { int ret = __itoa(errnum, 1, strerrbuf, len, buflen); if (ret == 0) ret = EINVAL; } } return ret; }
char *__itoa(unsigned n, char s[]) { if (n / 10) s = __itoa(n / 10, s); *s++ = n % 10 + '0'; *s = '\0'; }
char *itoa(int n, char s[]) { unsigned int m; if (n < 0) { *s++ = '-'; m = -n; } return __itoa(m, s); }
void replace( std::string& string , const std::string &search , const int value) { // length of value for char buffer: const int n = _ma(1, ceil(log10(static_cast<float>(value)))); char *buffer = new char[n + 1]; __itoa(value, buffer, n + 1); replace(string, search, buffer); delete[] buffer; }
static int __num2string(int num, int sign, int setid, char *buf, size_t buflen, char * list[], size_t max, const char *def) { int ret = 0; size_t len; #ifdef NLS nl_catd catd; catd = catopen("libc", NL_CAT_LOCALE); #endif if (0 <= num && num < max) { #ifdef NLS len = strlcpy(buf, catgets(catd, setid, num, list[num]), buflen); #else len = strlcpy(buf, list[num], buflen); #endif if (len >= buflen) ret = ERANGE; } else { #ifdef NLS len = strlcpy(buf, catgets(catd, setid, 0xffff, def), buflen); #else len = strlcpy(buf, def, buflen); #endif if (len >= buflen) ret = ERANGE; else { ret = __itoa(num, sign, buf, len, buflen); if (ret == 0) ret = EINVAL; } } #ifdef NLS catclose(catd); #endif return ret; }
BOOL process_costume(const CHAR *target, CHAR *source, const CHAR *format) { pcostumex variables, selected, temp, last_var; pcostumestrx strvariables, strselected, strtemp, strlast_var; PCHAR pointer; char *_temp; int count, value; BOOL ifcon; CHAR *srcptr; pointer = format; srcptr = source; ifcon = FALSE; last_var = variables = costume_init(); strlast_var = strvariables = costumestr_init(); selected = NULL, strselected = NULL; for (; *pointer != _COTM_OPEN && *pointer; pointer++) ; if (*pointer == '\0') return _CTOM_ERROR_NOT_EXIST_FORAMT; pointer++; do { switch (*pointer++) { case _COTM_CLOSE: costume_release(variables); return _CTOM_SUCCESS; // end case _COTM_FUNCTION: // function call @var=%func% if (selected == NULL) return _CTOM_ERROR_FUNCTIONCALL_BEFOR_LVALUE; _temp = (char *)malloc(sizeof(char) * 20); for (count = 0; *pointer && *pointer != _COTM_FUNCTION; pointer++, count++) _temp[count] = *pointer; _temp[count] = 0; pointer++; // *pointer is pointer to '%' if(ifcon == FALSE){ // no-operate error selected->data = _costume_process_function(variables, _temp, target); selected = NULL; // abort selected variable } break; case _COTM_VARIABLE: // @asdf, @asdf= temp = costume_init(); _temp = (char *)malloc(sizeof(char) * 20); for (count = 0; _isalnumub((int)(*pointer)); pointer++, count++) _temp[count] = *pointer; _temp[count] = 0; if (NULL != (selected = _costume_find_variable(variables, _temp))) if(ifcon == FALSE){ return _CTOM_ERROR_ALREADY_EXIST_VARIABLE; } else; if(ifcon == FALSE){ temp->name = _temp; last_var->_Next = temp; last_var = temp; } if(*pointer == _COTM_LVALUE) { selected = temp; pointer++; } break; case _COTM_STRVARIABLE: // $asdf, $asdf="~~~" strtemp = costumestr_init(); _temp = (char *)malloc(sizeof(char) * 20); for (count = 0; _isalnumub((int)(*pointer)); pointer++, count++) _temp[count] = *pointer; _temp[count] = 0; if (NULL != (strselected = _costume_find_strvariable(strvariables, _temp))) if(ifcon == FALSE){ return _CTOM_ERROR_ALREADY_EXIST_VARIABLE; } else; if(ifcon == FALSE){ strtemp->name = _temp; strlast_var->_Next = strtemp; strlast_var = strtemp; } if(*pointer == _COTM_LVALUE) { strselected = strtemp; pointer++; } break; case _COTM_IF: if (*pointer++ != _COTM_BRET_OPEN) return _CTOM_ERROR_NOT_FOUND_IF_SCOPE; value = _costume_if(variables, pointer); if (value) ifcon = FALSE; else ifcon = TRUE; pointer = _costume_ict; if (*pointer == _COTM_BRET_CLOSE) pointer++; else return _CTOM_ERROR_NOT_FOUND_SCOPE_CLOSE; break; case _COTM_ELSE: if (ifcon == FALSE) ifcon = TRUE; else ifcon = FALSE; break; case _COTM_DELIMITER: ifcon = FALSE; break; case _COTM_SHARP: switch(*pointer++) { case '#': *srcptr++ = '0'; *srcptr++ = 'x'; break; } break; case _COTM_OPTIONS: // add function switch(*pointer++) { case 'n': *srcptr++ = '\n'; break; case 'r': *srcptr++ = '\r'; break; case 't': *srcptr++ = '\t'; break; case 'f': *srcptr++ = '\f'; break; default: *srcptr++ = *(pointer-1); break; } break; case _COTM_CONNECTION: switch(*pointer++) { case _COTM_VARIABLE: _temp = (char *)malloc(sizeof(char) * 20); for (count = 0; _isalnumub((int)(*pointer)); pointer++, count++) _temp[count] = *pointer; _temp[count] = 0; if (NULL == (selected = _costume_find_variable(variables, _temp))) return _CTOM_ERROR_NOT_FOUND_VARIABLE; free(_temp); if(ifcon == FALSE){ _temp = __itoa(selected->data); for (; *_temp; _temp++) *srcptr++ = *_temp; } selected = NULL; break; case _COTM_STRVARIABLE: _temp = (char *)malloc(sizeof(char) * 20); for (count = 0; _isalnumub((int)(*pointer)); pointer++, count++) _temp[count] = *pointer; _temp[count] = 0; if (NULL == (strselected = _costume_find_strvariable(strvariables, _temp))) return _CTOM_ERROR_NOT_FOUND_VARIABLE; free(_temp); if(ifcon == FALSE){ _temp = strselected->data; for (; *_temp; _temp++) *srcptr++ = *_temp; } strselected = NULL; break; default: return _CTOM_ERROR_NOT_EXIST_FORAMT; } break; default: if(selected != NULL || strselected != NULL) { pointer--; // for 'pointer++' if(*pointer == _COTM_STRDELIMITER) { if (strselected == NULL) return _CTOM_ERROR_STRINGPTR_BEFOR_LVALUE; pointer++; _temp = (char *)malloc(sizeof(char) * 256); for (count = 0; *pointer != _COTM_STRDELIMITER; pointer++, count++) if(*pointer == _COTM_OPTIONS) { pointer++; _temp[count] = *pointer; } else { _temp[count] = *pointer; } _temp[count] = 0; pointer++; if(ifcon == FALSE){ strselected->data = _temp; strselected = NULL; } break; } else if(*pointer == _COTM_PAREN_OPEN) { if (strselected == NULL) return _CTOM_ERROR_STRINGPTR_BEFOR_LVALUE; pointer++; _temp = _costume_get_string(strvariables, variables, target, pointer); pointer = ++_costume_ict; if(ifcon == FALSE){ strselected->data = _temp; } break; } else { if (selected == NULL) return _CTOM_ERROR_INTEGERPTR_BEFOR_LVALUE; _temp = (char *)malloc(sizeof(char) * 20); for (count = 0; _isdigit(*pointer); pointer++, count++) _temp[count] = *pointer; _temp[count] = 0; if(ifcon == FALSE){ selected->data = _atoi(_temp); selected = NULL; } break; } } else return _CTOM_ERROR_NOT_FOUND_OPTION; } } while (*pointer); return _CTOM_SUCCESS; }
char *_costume_get_string(const pcostumestrx cxstrlist, const pcostumex cxlist, const CHAR *target, const CHAR *format) { char *ret = (char *) malloc (sizeof(char) * 1024); char *ptr = ret, *tmpptr, *tarptr; char tmp; char _temp[20] = {0,}; // find temp u32 inttmp; int count; pcostumex costmp; pcostumestrx cosstrtmp; BOOL not; #define CONDITION(x) ((x) && not) || (!(x) && !not) tarptr = target; _costume_ict = format; zeroset(ret, sizeof(char) * 1024); do { switch(*_costume_ict++) { case '+': // add variable to ret switch(*_costume_ict++) { case _COTM_VARIABLE: for (count = 0; _isalnumub((int)(*_costume_ict)); _costume_ict++, count++) _temp[count] = *_costume_ict; _temp[count] = 0; if (NULL == (costmp = _costume_find_variable(cxlist, _temp))) return -1; // error inttmp = costmp->data; tmpptr = __itoa(inttmp); for (; *tmpptr; tmpptr++) *ptr++ = *tmpptr; break; case _COTM_STRVARIABLE: for (count = 0; _isalnumub((int)(*_costume_ict)); _costume_ict++, count++) _temp[count] = *_costume_ict; _temp[count] = 0; if (NULL == (cosstrtmp = _costume_find_strvariable(cxstrlist, _temp))) return -1; // error tmpptr = cosstrtmp->data; for (; *tmpptr; tmpptr++) *ptr++ = *tmpptr; break; case '*': // *x, *@int, *$str, *!x RE1: switch(*_costume_ict++) { case '!': switch(*_costume_ict++) { case 's': while (CONDITION(_isspace(*tarptr))) *ptr++ = *tarptr++; break; case 'S': while (CONDITION(!_isspace(*tarptr))) *ptr++ = *tarptr++; break; case 'd': while (CONDITION(_isnumeric(*tarptr))) *ptr++ = *tarptr++; break; case 'D': while (CONDITION(!_isnumeric(*tarptr))) *ptr++ = *tarptr++; break; case 'w': while (CONDITION(_isalnumub(*tarptr))) *ptr++ = *tarptr++; break; case 'W': while (CONDITION(!_isalnumub(*tarptr))) *ptr++ = *tarptr++; break; case '\\': switch(*_costume_ict++) { case 'n': while (CONDITION(*tarptr == '\n')) *ptr++ = *tarptr++; break; case 'r': while (CONDITION(*tarptr == '\r')) *ptr++ = *tarptr++; break; case 't': while (CONDITION(*tarptr == '\t')) *ptr++ = *tarptr++; break; case 'f': while (CONDITION(*tarptr == '\f')) *ptr++ = *tarptr++; break; default: while(CONDITION(*tarptr == *(_costume_ict-1))) *ptr++ = *tarptr++; break; } break; } not = TRUE; break; case '\\': switch(*_costume_ict++) { case 'n': if(CONDITION(*tarptr == '\n')) *ptr++ = *tarptr++; break; case 'r': if(CONDITION(*tarptr == '\r')) *ptr++ = *tarptr++; break; case 't': if(CONDITION(*tarptr == '\t')) *ptr++ = *tarptr++; break; case 'f': if(CONDITION(*tarptr == '\f')) *ptr++ = *tarptr++; break; default: if(CONDITION(*tarptr == *(_costume_ict-1))) *ptr++ = *tarptr++; break; } not = TRUE; break; case '^': // not not = FALSE; goto RE1; break; default: if(_isalnumub((int)(*_costume_ict))) { if(CONDITION(*tarptr == *_costume_ict)) *ptr++ = *tarptr++; not = TRUE; } break; } break; } break; case '*': // *x, *@int, *$str, *!x RE2: switch(*_costume_ict++) { case '!': switch(*_costume_ict++) { case 's': while (CONDITION(_isspace(*tarptr))) tarptr++; break; case 'S': while (CONDITION(!_isspace(*tarptr))) tarptr++; break; case 'd': while (CONDITION(_isnumeric(*tarptr))) tarptr++; break; case 'D': while (CONDITION(!_isnumeric(*tarptr))) tarptr++; break; case 'w': while (CONDITION(_isalnumub(*tarptr))) tarptr++; break; case 'W': while (CONDITION(!_isalnumub(*tarptr))) tarptr++; break; case '\\': switch(*_costume_ict++) { case 'n': while (CONDITION(*tarptr == '\n')) tarptr++; break; case 'r': while (CONDITION(*tarptr == '\r')) tarptr++; break; case 't': while (CONDITION(*tarptr == '\t')) tarptr++; break; case 'f': while (CONDITION(*tarptr == '\f')) tarptr++; break; default: while(CONDITION(*tarptr == *(_costume_ict-1))) tarptr++; break; } break; } not = TRUE; break; case '\\': switch(*_costume_ict++) { case 'n': if(CONDITION(*tarptr == '\n')) tarptr++; break; case 'r': if(CONDITION(*tarptr == '\r')) tarptr++; break; case 't': if(CONDITION(*tarptr == '\t')) tarptr++; break; case 'f': if(CONDITION(*tarptr == '\f')) tarptr++; break; default: if(CONDITION(*tarptr == *(_costume_ict-1))) tarptr++; break; } not = TRUE; break; case '^': // not not = FALSE; goto RE2; break; default: if(_isalnumub((int)(*_costume_ict))) { if(CONDITION(*tarptr == *_costume_ict)) *tarptr++; not = TRUE; } break; } break; case '/': // Delimiter break; case '\\': switch(*_costume_ict++) { case 'n': *ptr++ = '\n'; break; case 'r': *ptr++ = '\r'; break; case 't': *ptr++ = '\t'; break; case 'f': *ptr++ = '\f'; break; default: *ptr++ = *(_costume_ict-1); break; } break; default: if (_isalnum((int)(tmp = *(_costume_ict - 1)))) { *ptr++ = tmp; for (; _isalnum((int)*_costume_ict); _costume_ict++) *ptr++ = *_costume_ict; } break; } } while (*_costume_ict && *_costume_ict != ']'); return ret; }
SDB_API int sdb_json_seti (Sdb *s, const char *k, const char *p, int v, ut32 cas) { char str[64]; __itoa (v, str); return sdb_json_set (s, k, p, str, cas); }