示例#1
0
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;
}
示例#2
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;
}
示例#3
0
文件: search.cpp 项目: noahsai/tianqi
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!";

}