Annotation of coherent/g/usr/lib/uucp/tay104/unix/wldcrd.c, revision 1.1

1.1     ! root        1: /* wldcrd.c
        !             2:    Expand wildcards.
        !             3: 
        !             4:    Copyright (C) 1991, 1992 Ian Lance Taylor
        !             5: 
        !             6:    This file is part of the Taylor UUCP package.
        !             7: 
        !             8:    This program is free software; you can redistribute it and/or
        !             9:    modify it under the terms of the GNU General Public License as
        !            10:    published by the Free Software Foundation; either version 2 of the
        !            11:    License, or (at your option) any later version.
        !            12: 
        !            13:    This program is distributed in the hope that it will be useful, but
        !            14:    WITHOUT ANY WARRANTY; without even the implied warranty of
        !            15:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
        !            16:    General Public License for more details.
        !            17: 
        !            18:    You should have received a copy of the GNU General Public License
        !            19:    along with this program; if not, write to the Free Software
        !            20:    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
        !            21: 
        !            22:    The author of the program may be contacted at [email protected] or
        !            23:    c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
        !            24:    */
        !            25: 
        !            26: #include "uucp.h"
        !            27: 
        !            28: #include "uudefs.h"
        !            29: #include "sysdep.h"
        !            30: #include "system.h"
        !            31: 
        !            32: #include <ctype.h>
        !            33: #include <errno.h>
        !            34: 
        !            35: #if HAVE_GLOB && ! HAVE_GLOB_H
        !            36: #undef HAVE_GLOB
        !            37: #define HAVE_GLOB 0
        !            38: #endif
        !            39: 
        !            40: #if HAVE_GLOB
        !            41: #include <glob.h>
        !            42: #endif
        !            43: 
        !            44: /* Local variables to hold the wildcard in progress.  */
        !            45: 
        !            46: #if HAVE_GLOB
        !            47: static glob_t sSglob;
        !            48: static int iSglob;
        !            49: #else
        !            50: static char *zSwildcard_alloc;
        !            51: static char *zSwildcard;
        !            52: #endif
        !            53: 
        !            54: /* Start getting a wildcarded file spec.  Use the glob function if it
        !            55:    is available, and otherwise use the shell.  */
        !            56: 
        !            57: boolean
        !            58: fsysdep_wildcard_start (zfile)
        !            59:      const char *zfile;
        !            60: {
        !            61: #if HAVE_GLOB
        !            62: 
        !            63: #if DEBUG > 0
        !            64:   if (*zfile != '/')
        !            65:     ulog (LOG_FATAL, "fsysdep_wildcard: %s: Can't happen", zfile);
        !            66: #endif
        !            67: 
        !            68:   if (glob (zfile, 0, (int (*) ()) NULL, &sSglob) != 0)
        !            69:     sSglob.gl_pathc = 0;
        !            70:   iSglob = 0;
        !            71:   return TRUE;
        !            72: 
        !            73: #else /* ! HAVE_GLOB */
        !            74: 
        !            75:   char *zcmd, *zto;
        !            76:   const char *zfrom;
        !            77:   size_t c;
        !            78:   const char *azargs[4];
        !            79:   FILE *e;
        !            80:   pid_t ipid;
        !            81: 
        !            82: #if DEBUG > 0
        !            83:   if (*zfile != '/')
        !            84:     ulog (LOG_FATAL, "fsysdep_wildcard: %s: Can't happen", zfile);
        !            85: #endif
        !            86: 
        !            87:   zSwildcard_alloc = NULL;
        !            88:   zSwildcard = NULL;
        !            89: 
        !            90:   zcmd = zbufalc (sizeof ECHO_PROGRAM + sizeof " " + 2 * strlen (zfile));
        !            91:   memcpy (zcmd, ECHO_PROGRAM, sizeof ECHO_PROGRAM - 1);
        !            92:   zto = zcmd + sizeof ECHO_PROGRAM - 1;
        !            93:   *zto++ = ' ';
        !            94:   zfrom = zfile;
        !            95:   while (*zfrom != '\0')
        !            96:     {
        !            97:       /* To avoid shell trickery, we quote all characters except
        !            98:         letters, digits, and wildcard specifiers.  We don't quote '/'
        !            99:         to avoid an Ultrix sh bug.  */
        !           100:       if (! isalnum (*zfrom)
        !           101:          && *zfrom != '*'
        !           102:          && *zfrom != '?'
        !           103:          && *zfrom != '['
        !           104:          && *zfrom != ']'
        !           105:          && *zfrom != '/')
        !           106:        *zto++ = '\\';
        !           107:       *zto++ = *zfrom++;
        !           108:     }
        !           109:   *zto = '\0';
        !           110: 
        !           111:   azargs[0] = "/bin/sh";
        !           112:   azargs[1] = "-c";
        !           113:   azargs[2] = zcmd;
        !           114:   azargs[3] = NULL;
        !           115: 
        !           116:   ubuffree (zcmd);
        !           117: 
        !           118:   e = espopen (azargs, TRUE, &ipid);
        !           119:   if (e == NULL)
        !           120:     {
        !           121:       ulog (LOG_ERROR, "espopen: %s", strerror (errno));
        !           122:       return FALSE;
        !           123:     }
        !           124: 
        !           125:   zSwildcard_alloc = NULL;
        !           126:   c = 0;
        !           127:   if (getline (&zSwildcard_alloc, &c, e) <= 0)
        !           128:     {
        !           129:       xfree ((pointer) zSwildcard_alloc);
        !           130:       zSwildcard_alloc = NULL;
        !           131:     }
        !           132: 
        !           133:   if (ixswait ((unsigned long) ipid, ECHO_PROGRAM) != 0)
        !           134:     {
        !           135:       xfree ((pointer) zSwildcard_alloc);
        !           136:       return FALSE;
        !           137:     }
        !           138: 
        !           139:   if (zSwildcard_alloc == NULL)
        !           140:     return FALSE;
        !           141: 
        !           142:   DEBUG_MESSAGE1 (DEBUG_EXECUTE,
        !           143:                  "fsysdep_wildcard_start: got \"%s\"",
        !           144:                  zSwildcard_alloc);
        !           145: 
        !           146:   zSwildcard = zSwildcard_alloc;
        !           147: 
        !           148:   return TRUE;
        !           149: 
        !           150: #endif /* ! HAVE_GLOB */
        !           151: }
        !           152: 
        !           153: /* Get the next wildcard spec.  */
        !           154: 
        !           155: /*ARGSUSED*/
        !           156: char *
        !           157: zsysdep_wildcard (zfile)
        !           158:      const char *zfile;
        !           159: {
        !           160: #if HAVE_GLOB
        !           161: 
        !           162:   char *zret;
        !           163: 
        !           164:   if (iSglob >= sSglob.gl_pathc)
        !           165:     return NULL;
        !           166:   zret = zbufcpy (sSglob.gl_pathv[iSglob]);
        !           167:   ++iSglob;
        !           168:   return zret;
        !           169:   
        !           170: #else /* ! HAVE_GLOB */
        !           171: 
        !           172:   char *zret;
        !           173: 
        !           174:   if (zSwildcard_alloc == NULL || zSwildcard == NULL)
        !           175:     return NULL;
        !           176: 
        !           177:   zret = zSwildcard;
        !           178: 
        !           179:   while (*zSwildcard != '\0' && ! isspace (BUCHAR (*zSwildcard)))
        !           180:     ++zSwildcard;
        !           181: 
        !           182:   if (*zSwildcard != '\0')
        !           183:     {
        !           184:       *zSwildcard = '\0';
        !           185:       ++zSwildcard;
        !           186:       while (*zSwildcard != '\0' && isspace (BUCHAR (*zSwildcard)))
        !           187:        ++zSwildcard;
        !           188:     }
        !           189: 
        !           190:   if (*zSwildcard == '\0')
        !           191:     zSwildcard = NULL;
        !           192: 
        !           193:   return zbufcpy (zret);
        !           194: 
        !           195: #endif /* ! HAVE_GLOB */
        !           196: }
        !           197: 
        !           198: /* Finish up getting wildcard specs.  */
        !           199: 
        !           200: boolean
        !           201: fsysdep_wildcard_end ()
        !           202: {
        !           203: #if HAVE_GLOB
        !           204:   globfree (&sSglob);
        !           205:   return TRUE;
        !           206: #else /* ! HAVE_GLOB */
        !           207:   xfree ((pointer) zSwildcard_alloc);
        !           208:   zSwildcard_alloc = NULL;
        !           209:   zSwildcard = NULL;
        !           210:   return TRUE;
        !           211: #endif /* ! HAVE_GLOB */
        !           212: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.