int grep_rl_main(int argc, char **argv) { regex_t RE; char flagstdin = 0, string[256]; int retval, files; extern int optind; #ifdef debug printf("Regular expression: %s\n\n", argv[optind]); #endif retval = regcomp(&RE, argv[optind], optcasi ? REG_ICASE : 0); if (retval) { regerror(retval, &RE, string, 255); printf("Error in regular expression: %s\n\n", string); return 2; } optind++; if (argc == optind) flagstdin = 1; optind -= flagstdin; files = argc - optind; #ifdef debug printf("souboru:%d, parametru:%d, optind: %d, stdin:%d\n", files, argc, optind, flagstdin); #endif for (; optind < argc; optind++) { retval = rec(argv[optind], &RE, flagstdin, string, files); if (retval) { if (retval < 0) break; if (retval == 2) { if (optcnt) puts("0"); break; } if (findinfile(argv[optind], &RE, flagstdin, string, files)) break; } } regfree(&RE); /* print_matched_list(); */ return 0; }
static char rec(char *name, regex_t * RE, char flagstdin, char *string, int files) { struct dirent *entry; struct stat sstat; DIR *dir; char *str; if (flagstdin || !(dir = opendir(name))) return 1; else if (!optrec) return 2; while ((entry = readdir(dir))) { if (name[strlen(name) - 1] == '/') name[strlen(name) - 1] = 0; str = malloc(strlen(name) + strlen(entry->d_name) + 2); if (str == NULL) { perror("cannot alloc memory"); return -1; } sprintf(str, "%s/%s", name, entry->d_name); if (stat(str, &sstat)) { perror("stat failed"); return -1; } if (S_ISREG(sstat.st_mode) && findinfile(str, RE, flagstdin, string, files)) return -1; #ifdef debug printf("%s - %s (%d)\n", str, S_ISREG(sstat.st_mode) ? "file" : "dir", sstat.st_mode); #endif if (strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..")) rec(str, RE, flagstdin, string, files); free(str); } closedir(dir); return 0; }
void search::gotdata() { if(stop||ui->lineEdit->text().isEmpty()) { qDebug()<<"reply stop!"; reply->deleteLater(); manager->deleteLater(); reply = NULL; stop=false; return; } //能到这里证明stop=false ui->listWidget->clear();//清空 //搜索服务器有问题时使用下面的本地搜索 if(reply->error()!=QNetworkReply::NoError) { qDebug()<<"搜索服务器出错,使用本地搜索"; findinfile(); return; } //findinfile();return;//测试 qDebug()<<"gotdata!"; QString html=reply->readAll(); qDebug()<<html; reply->deleteLater(); reply=NULL; manager->deleteLater(); if(html.indexOf("([{")!=-1) { reg.setPattern("(?<=ref\":\").+?(?=\")"); matchs=reg.globalMatch(html); QListWidgetItem *item; while(matchs.hasNext()) { item=new QListWidgetItem; QStringList list=matchs.next().captured(0).split("~"); QString text=list.at(2)+"-"+list.last(); item->setText(text); item->setToolTip(list.at(0)); ui->listWidget->addItem(item); } } qDebug()<<"data showed!"; }