예제 #1
0
파일: optfunc.c 프로젝트: gdamore/less-fork
/*
 * Handler for -T option.
 */
void
opt__T(int type, char *s)
{
	PARG parg;

	switch (type) {
	case INIT:
		tags = s;
		break;
	case TOGGLE:
		s = skipsp(s);
		tags = lglob(s);
		break;
	case QUERY:
		parg.p_string = tags;
		error("Tags file \"%s\"", &parg);
		break;
	}
}
예제 #2
0
파일: optfunc.c 프로젝트: gdamore/less-fork
/*
 * Handler for -o option.
 */
void
opt_o(int type, char *s)
{
	PARG parg;

	if (secure) {
		error("log file support is not available", NULL_PARG);
		return;
	}
	switch (type) {
	case INIT:
		namelogfile = s;
		break;
	case TOGGLE:
		if (ch_getflags() & CH_CANSEEK) {
			error("Input is not a pipe", NULL_PARG);
			return;
		}
		if (logfile >= 0) {
			error("Log file is already in use", NULL_PARG);
			return;
		}
		s = skipsp(s);
		namelogfile = lglob(s);
		use_logfile(namelogfile);
		sync_logfile();
		break;
	case QUERY:
		if (logfile < 0) {
			error("No log file", NULL_PARG);
		} else {
			parg.p_string = namelogfile;
			error("Log file \"%s\"", &parg);
		}
		break;
	}
}
예제 #3
0
파일: glob.c 프로젝트: muennich/rc3
static List *doglob(char *w, char *m) {
    static char *dir = NULL, *pattern = NULL, *metadir = NULL, *metapattern = NULL;
    static size_t dsize = 0;
    char *d, *p, *md, *mp;
    size_t psize;
    char *s = w;
    List firstdir;
    List *matched;
    if ((psize = strlen(w) + 1) > dsize || dir == NULL) {
        efree(dir);
        efree(pattern);
        efree(metadir);
        efree(metapattern);
        dir = ealloc(psize);
        pattern = ealloc(psize);
        metadir = ealloc(psize);
        metapattern = ealloc(psize);
        dsize = psize;
    }
    d = dir;
    p = pattern;
    md = metadir;
    mp = metapattern;
    while (*s != '/' && *s != '\0') {
        *d++ = *s++; /* get first directory component */
        *md++ = *m++;
    }
    *d = '\0';
    /*
       Special case: no slashes in the pattern, i.e., open the current directory.
       Remember that w cannot consist of slashes alone (the other way *s could be
       zero) since doglob gets called iff there's a metacharacter to be matched
    */
    if (*s == '\0') {
        matched = dmatch(".", dir, metadir);
        goto end;
    }
    if (*w == '/') {
        firstdir.w = dir;
        firstdir.m = metadir;
        firstdir.n = NULL;
        matched = &firstdir;
    } else {
        /*
           we must glob against current directory,
           since the first character is not a slash.
        */
        matched = dmatch(".", dir, metadir);
    }
    do {
        size_t slashcount;
        sigchk();
        for (slashcount = 0; *s == '/'; s++, m++)
            slashcount++; /* skip slashes */
        while (*s != '/' && *s != '\0')
            *p++ = *s++, *mp++ = *m++; /* get pattern */
        *p = '\0';
        matched = lglob(matched, pattern, metapattern, slashcount);
        p = pattern, mp = metapattern;
    } while (*s != '\0');
end:
    if (matched == NULL) {
        matched = nnew(List);
        matched->w = w;
        matched->m = NULL;
        matched->n = NULL;
    }
    return matched;
}