-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
patched str.c in libr/util
- --
Stop talking and start compiling.
Linux user #557897
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.20 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
iQEcBAEBAgAGBQJSFOtgAAoJEK64IL1uI2hanFsIAJDejQLOxHKgISYdbWb6Km85
9FAyVVNNFijzmzHKDCpCd2QBYWRBWCJpo8lFzZZi8R8HwCVB2b7B6nFbr/Jm0dnu
pzn2jcxgTHXQWdU2LnPuYNLpo3C0bE6Y5hY0ZMz3XP3BzIL4knZTPFS9jPZFDYb+
x85R4a65SfcZvPM8t1nMzQI78yMbWRoEWqX3Q12TwPWcAmiy1ZMSYqVLlJ2BauDD
qMMj7tQl6S+GLLepMjkWFg2oT5AS4s1ncTbZ4OUpYRmy5W/HhtxN4KVH647fiKn4
7BY9Jx5vG+bcEVB3O9vJTO8lKq+p4aQ2gYuAq8hBboYMjRckzrFY1rkKUazt6Qg=
=2QLS
-----END PGP SIGNATURE-----
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#define ut8 uint8_t
#define ut16 uint16_t
#define ut32 uint32_t
// Must be merged inside strlen
int r_str_len_utf8 (const char *s) {
int i = 0, j = 0;
while (s[i]) {
if ((s[i] & 0xc0) != 0x80) j++;
i++;
}
return j;
}
//R_DOC r_mem_mem: Finds the needle of nlen size into the haystack of hlen size
//R_UNIT printf("%s\n", r_mem_mem("food is pure lame", 20, "is", 2));
const ut8 *r_mem_mem(const ut8 *haystack, int hlen, const ut8 *needle, int nlen) {
int i, until = hlen-nlen+1;
for (i=0; i<until; i++) {
if (!memcmp (haystack+i, needle, nlen))
return haystack+i;
}
return NULL;
}
/*
char* r_str_replace(char *str, const char *key, const char *val, int g) {
int off, i;
int klen = r_str_len_utf8 (key);
int vlen0 = r_str_len_utf8 (val); // Counting symbols
int vlen1 = strlen(val); // Counting bytes
int slen = r_str_len_utf8 (str);
char *new, *old, *p2, *p = str;
for (i = 0; i < slen; ) {
p = (char *)r_mem_mem (
(const ut8*)str + i, slen - i,
(const ut8*)key, klen);
if (!p) break; // || !p[klen]) break;
old = strdup (p+klen);
slen += (vlen1-klen) + vlen1;
off = (int)(size_t)(p-str);
new = realloc (str, slen);
if (!new) {
printf ("realloc fail\n");
free (str);
free (old);
str = NULL;
break;
}
str = new;
p = str+off;
p2 = strdup(p + klen);
memcpy (p + vlen1, p2, strlen(p2));
memcpy (p, val, vlen1);
memcpy (p+vlen1, old, r_str_len_utf8 (old)+1);
i += off+vlen1;
free (old);
if (!g) break;
}
return str;
}
*/
char* r_str_replace(char *str, const char *key, const char *val, int g) {
int off, i;
int klen = strlen (key);
int vlen = strlen (val);
int slen = strlen (str);
char *new, *old, *p = str;
for (i=0; i<slen; ) {
p = (char *)r_mem_mem (
(const ut8*)str + i, slen - i,
(const ut8*)key, klen);
if (!p) break; // || !p[klen]) break;
old = strdup (p+klen);
slen += (vlen-klen) + 1;
off = (int)(size_t)(p-str);
//printf("%s\n", str);
//printf("offset = %i\n", off);
new = realloc (str, slen);
if (!new) {
printf ("realloc fail\n");
free (str);
free (old);
str = NULL;
break;
}
str = new;
p = str+off;
memcpy (p, val, vlen);
memcpy (p+vlen, old, strlen (old)+1);
i = off+vlen;
//printf("%i:\t%s\n", i, str);
free (old);
if (!g) break;
}
return str;
}
int main(int argc, char **argv) {
char *tst0 = "sdâââgs = = #$% sdfg";
char *tst1 = "|sf|fdfh|||dfg|";
printf ( "%s\n", tst0);
printf ( "%s\n", tst1);
tst0 = r_str_replace (strdup (tst0), "=", "âââ", 1);
tst1 = r_str_replace (strdup (tst1), "|", "âââ", 1);
printf ( "%s\n", tst0);
printf ( "%s\n", tst1);
return EXIT_SUCCESS;
}
_______________________________________________
radare mailing list
[email protected]
http://lists.nopcode.org/listinfo.cgi/radare-nopcode.org