(linenum→info "unix/slp.c:2238")

glibc/2.7/posix/globtest.c

    1: /* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
    2:    This file is part of the GNU C Library.
    3: 
    4:    The GNU C Library is free software; you can redistribute it and/or
    5:    modify it under the terms of the GNU Lesser General Public
    6:    License as published by the Free Software Foundation; either
    7:    version 2.1 of the License, or (at your option) any later version.
    8: 
    9:    The GNU C Library is distributed in the hope that it will be useful,
   10:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   11:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   12:    Lesser General Public License for more details.
   13: 
   14:    You should have received a copy of the GNU Lesser General Public
   15:    License along with the GNU C Library; if not, write to the Free
   16:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   17:    02111-1307 USA.  */
   18: 
   19: #include <getopt.h>
   20: #include <stdio.h>
   21: #include <stdlib.h>
   22: #include <unistd.h>
   23: #include <glob.h>
   24: 
   25: int
   26: main (int argc, char *argv[])
   27: {
   28:   int i, j;
   29:   int glob_flags = 0;
   30:   glob_t g;
   31:   int quotes = 1;
   32: 
   33:   g.gl_offs = 0;
   34: 
   35:   while ((i = getopt (argc, argv, "bcdeEgmopqstT")) != -1)
   36:     switch(i)
   37:       {
   38:       case 'b':
   39:         glob_flags |= GLOB_BRACE;
   40:         break;
   41:       case 'c':
   42:         glob_flags |= GLOB_NOCHECK;
   43:         break;
   44:       case 'd':
   45:         glob_flags |= GLOB_ONLYDIR;
   46:         break;
   47:       case 'e':
   48:         glob_flags |= GLOB_NOESCAPE;
   49:         break;
   50:       case 'E':
   51:         glob_flags |= GLOB_ERR;
   52:         break;
   53:       case 'g':
   54:         glob_flags |= GLOB_NOMAGIC;
   55:         break;
   56:       case 'm':
   57:         glob_flags |= GLOB_MARK;
   58:         break;
   59:       case 'o':
   60:         glob_flags |= GLOB_DOOFFS;
   61:         g.gl_offs = 1;
   62:         break;
   63:       case 'p':
   64:         glob_flags |= GLOB_PERIOD;
   65:         break;
   66:       case 'q':
   67:         quotes = 0;
   68:         break;
   69:       case 's':
   70:         glob_flags |= GLOB_NOSORT;
   71:         break;
   72:       case 't':
   73:         glob_flags |= GLOB_TILDE;
   74:         break;
   75:       case 'T':
   76:         glob_flags |= GLOB_TILDE_CHECK;
   77:         break;
   78:       default:
   79:         exit (-1);
   80:       }
   81: 
   82:   if (optind >= argc || chdir (argv[optind]))
   83:     exit(1);
   84: 
   85:   j = optind + 1;
   86:   if (optind + 1 >= argc)
   87:     exit (1);
   88: 
   89:   /* Do a glob on each remaining argument.  */
   90:   for (j = optind + 1; j < argc; j++) {
   91:     i = glob (argv[j], glob_flags, NULL, &g);
   92:     if (i != 0)
   93:       break;
   94:     glob_flags |= GLOB_APPEND;
   95:   }
   96: 
   97:   /* Was there an error? */
   98:   if (i == GLOB_NOSPACE)
   99:     puts ("GLOB_NOSPACE");
  100:   else if (i == GLOB_ABORTED)
  101:     puts ("GLOB_ABORTED");
  102:   else if (i == GLOB_NOMATCH)
  103:     puts ("GLOB_NOMATCH");
  104: 
  105:   /* If we set an offset, fill in the first field.
  106:      (Unless glob() has filled it in already - which is an error) */
  107:   if ((glob_flags & GLOB_DOOFFS) && g.gl_pathv[0] == NULL)
  108:     g.gl_pathv[0] = (char *) "abc";
  109: 
  110:   /* Print out the names.  Unless otherwise specified, qoute them.  */
  111:   if (g.gl_pathv)
  112:     {
  113:       for (i = 0; i < g.gl_offs + g.gl_pathc; ++i)
  114:         printf ("%s%s%s\n", quotes ? "`" : "",
  115:                 g.gl_pathv[i] ? g.gl_pathv[i] : "(null)",
  116:                 quotes ? "'" : "");
  117:     }
  118:   return 0;
  119: }
Syntax (Markdown)