/* getArgFromString: get argument from string using separators */ static int getArgFromString(const char *str, int *index, char *buff, char separator) { int i, j = 0, len; const char *c; unsigned char size; if (str == NULL) { buff[0] = '\0'; return 0; } len = MMDAgent_strlen(str); if (len <= 0) { buff[0] = '\0'; return 0; } c = str + (*index); for (i = 0; i < len && (*c == '\0' || *c == ' ' || *c == '\t' || *c == '\n' || *c == '\r'); i += size) { if (*c == '\0') { buff[0] = '\0'; return 0; } size = MMDAgent_getcharsize(c); (*index) += size; c += size; } for (i = 0; i < len && *c != '\0' && *c != ' ' && *c != '\t' && *c != '\n' && *c != '\r' && *c != separator; i += size) { size = MMDAgent_getcharsize(c); memcpy(&buff[j], c, sizeof(char) * size); j += size; (*index) += size; c += size; } if (*c == separator) (*index)++; buff[j] = '\0'; return j; }
/* countArgs: count arguments */ static int countArgs(const char *str, char separator) { int i, len, num; const char *c; unsigned char size; len = MMDAgent_strlen(str); if(len <= 0) return 0; num = 1; c = str; for(i = 0; i < len; i += size) { size = MMDAgent_getcharsize(c); if(*c == separator) num++; c += size; } return num; }
/* MMDAgent_strtok: strtok */ char *MMDAgent_strtok(char *str, const char *pat, char **save) { char *s = NULL, *e = NULL, *p; const char *q; char mbc1[MMDAGENTUTILS_MAXCHARBYTE]; char mbc2[MMDAGENTUTILS_MAXCHARBYTE]; int find; int step = 0; unsigned char i, size; if(str != NULL) p = str; else if(save != NULL) p = *save; else return NULL; while(*p != '\0') { if(step == 0) s = p; if(step == 1) e = p; size = MMDAgent_getcharsize(p); for(i = 0; i < size; i++) { mbc1[i] = *p; if(*p == '\0') { i = 0; break; } p++; } mbc1[i] = '\0'; /* search */ find = 0; q = pat; while(*q != '\0') { size = MMDAgent_getcharsize(q); for(i = 0; i < size; i++) { mbc2[i] = *q; if(*q == '\0') { i = 0; break; } q++; } mbc2[i] = '\0'; if(strcmp(mbc1, mbc2) == 0) { find = 1; break; } } /* check */ if(step == 0) { if(find == 0) step = 1; } else { if(find == 1) { *e = '\0'; *save = p; return s; } } } if(step == 1) { *save = p; return s; } *save = p; return NULL; }