R_API RSearchKeyword* r_search_keyword_new_hex(const char *kwstr, const char *bmstr, const char *data) { RSearchKeyword *ks = NULL; ut8 *kw, *bm; int bmlen, kwlen; if (kwstr != NULL) { kw = malloc (strlen (kwstr)+1); bm = malloc (strlen (bmstr)+1); if (kw != NULL && bm != NULL) { bmlen = r_hex_str2bin (bmstr, (ut8*)bm); kwlen = r_hex_str2bin (kwstr, (ut8*)kw); if (bmlen>=0 && kwlen>0) ks = r_search_keyword_new (kw, kwlen, bm, bmlen, data); } free (kw); free (bm); } return ks; }
R_API RSearchKeyword* r_search_keyword_new_hexmask(const char *kwstr, const char *data) { RSearchKeyword *ks = NULL; ut8 *kw, *bm; if (kwstr != NULL) { int len = strlen (kwstr); kw = malloc (len+4); bm = malloc (len+4); if (kw != NULL && bm != NULL) { len = r_hex_str2binmask (kwstr, (ut8*)kw, (ut8*)bm); if (len<0) len = -len+1; if (len>0) ks = r_search_keyword_new (kw, R_ABS (len), bm, len, data); } free (kw); free (bm); } return ks; }
R_API RSearchKeyword* r_search_keyword_new_hex(const char *kwstr, const char *bmstr, const char *data) { RSearchKeyword *kw; ut8 *kwbuf, *bmbuf; int kwlen, bmlen = 0; if (!kwstr) return NULL; kwbuf = malloc (strlen (kwstr)+1); if (!kwbuf) return NULL; kwlen = r_hex_str2bin (kwstr, kwbuf); if (kwlen < 1) { free (kwbuf); return NULL; } bmbuf = NULL; if (bmstr) { bmbuf = malloc (strlen (bmstr)+1); if (!bmbuf) { free (kwbuf); return NULL; } bmlen = r_hex_str2bin (bmstr, bmbuf); if (bmlen < 1) { bmlen = -bmlen; free (bmbuf); free (kwbuf); return NULL; } } kw = r_search_keyword_new (kwbuf, kwlen, bmbuf, bmlen, data); free (kwbuf); free (bmbuf); return kw; }
R_API RSearchKeyword* r_search_keyword_new_str(const char *kwbuf, const char *bmstr, const char *data, int ignore_case) { RSearchKeyword *kw; ut8 *bmbuf = NULL; int bmlen = 0; if (bmstr) { bmbuf = malloc (strlen (bmstr)+1); if (!bmbuf) return NULL; bmlen = r_hex_str2bin (bmstr, bmbuf); if (bmlen < 1) { free (bmbuf); bmbuf = NULL; } } kw = r_search_keyword_new ((ut8 *)kwbuf, strlen (kwbuf), bmbuf, bmlen, data); if (kw) { kw->icase = ignore_case; kw->type = R_SEARCH_KEYWORD_TYPE_STRING; } free (bmbuf); return kw; }
R_API RSearchKeyword* r_search_keyword_new_str(const char *kw, const char *bmhex, const char *data, int icase) { RSearchKeyword *ks = NULL; int bmlen = 0; ut8 *bm = NULL; if (!kw) return NULL; if (bmhex != NULL) { bm = malloc (strlen (bmhex)+1); if (bm != NULL) { bmlen = r_hex_str2bin (bmhex, (ut8*)bm); if (bmlen<1) { free (bm); bm = NULL; } } } ks = r_search_keyword_new ((ut8 *)kw, strlen (kw), bm, bmlen, data); if (ks) { ks->icase = icase; ks->type = R_SEARCH_KEYWORD_TYPE_STRING; } free (bm); return ks; }
R_API RSearchKeyword* r_search_keyword_new_wide(const char *kwbuf, const char *bmstr, const char *data, int ignore_case) { RSearchKeyword *kw; int len; const char *p2; char *p, *str; ut8 *bmbuf = NULL; int bmlen = 0; if (bmstr) { bmbuf = malloc (strlen (bmstr)+1); if (!bmbuf) return NULL; bmlen = r_hex_str2bin (bmstr, bmbuf); if (bmlen < 1) { free(bmbuf); bmbuf = NULL; } } len = strlen(kwbuf); str = malloc((len+1)*2); for (p2=kwbuf, p=str; *p2; p+=2, p2++) { if (ignore_case) p[0] = tolower((const unsigned char)*p2); else p[0] = *p2; p[1] = 0; } kw = r_search_keyword_new ((ut8 *)str, len*2, bmbuf, bmlen, data); free(str); if (kw) { kw->icase = ignore_case; } free(bmbuf); return kw; }