static void check_fi (CamelFolderInfo *fi, CamelFolderInfo *list, gint len) { GPtrArray *folders = g_ptr_array_new (); gint i; add_fi (folders, fi); check_msg (folders->len == len, "unexpected number of folders returned from folderinfo"); qsort (folders->pdata, folders->len, sizeof (folders->pdata[0]), cmp_fi); for (i = 0; i < len; i++) { CamelFolderInfo *f = folders->pdata[i]; camel_test_push ("checking folder '%s'", list[i].display_name); check (!strcmp (f->full_name, list[i].full_name)); /* this might be translated, but we can't know */ camel_test_nonfatal ("Inbox not english"); check (!strcmp (f->display_name, list[i].display_name)); camel_test_fatal (); camel_test_nonfatal ("Flags mismatch"); check (f->flags == list[i].flags); camel_test_fatal (); camel_test_pull (); } g_ptr_array_free (folders, TRUE); }
R_API int r_search_pattern(RSearch *s, ut64 from, ut64 to) { ut8 block[BSIZE+MAX_PATLEN], sblk[MAX_PATLEN+1]; int nr,i, moar=0, pcnt, cnt=0, k=0; int patlen = s->pattern_size; fnditem* root; ut64 addr, bact, bytes, intaddr, rb, bproc = 0; if (patlen < 1 || patlen > MAX_PATLEN) { eprintf ("Invalid pattern length (must be > 1 and < %d)\n", MAX_PATLEN); return R_FALSE; } bact = from; bytes = to; bytes += bact; root = init_fi (); pcnt = -1; while (bact < bytes) { addr = bact; bproc = bact + patlen ; // read ( fd, sblk, patlen ); //XXX bytepattern should be used with a read callback //XXX radare_read_at(bact, sblk, patlen); sblk[patlen]=0; intaddr = bact; cnt = 0; while (bproc < bytes) { nr = ((bytes-bproc) < BSIZE)?(bytes-bproc):BSIZE; nr += (patlen - (nr % patlen)); // tamany de bloc llegit multiple superior de tamany busqueda //rb = nr; rb = s->iob.read_at (s->iob.io, addr, block, nr); addr += nr; moar = 0; for (i=0; i<nr; i++) { if (!memcmp (&block[i], sblk, patlen) && !is_fi_present (root, sblk, patlen)){ if (cnt == 0) { add_fi (root, sblk, patlen); pcnt++; eprintf ("\nbytes: %d: ", pcnt); for (k = 0; k<patlen; k++) eprintf ("%02x", sblk[k]); eprintf ("\nfound: %d: 0x%08"PFMT64x" ", pcnt, intaddr); } moar++; cnt++; eprintf ("0x%08"PFMT64x" ", bproc+i); } } if (moar>0) eprintf ("\ncount: %d: %d\n", pcnt, moar+1); bproc += rb; } bact += (moar>0)?patlen:1; } eprintf ("\n"); fini_fi (root); return 0; }
static void add_fi (GPtrArray *folders, CamelFolderInfo *fi) { while (fi) { g_ptr_array_add (folders, fi); if (fi->child) add_fi (folders, fi->child); fi = fi->next; } }