/* * Copyright © 2001 Novell, Inc. All Rights Reserved. * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. * */ /* * FILENAME : nwplglob.c * DESCRIPTION : Perl globbing support for NetWare. Other platforms have usually lauched * a separate executable for this in order to take advantage of their * shell's capability for generating a list of files from a given * wildcard file spec. On NetWare, we don't have that luxury. * So we just hack the support into pipe open support (which we also had to hack). * Author : HYAK * Date : January 2001. * */ #include #include "stdio.h" #include #include "win32ish.h" #include "nwplglob.h" /*============================================================================================ Function : fnDoPerlGlob Description : Perl globbing support: Takes an array of wildcard descriptors and produces from it a list of files that the wildcards expand into. The list of files is written to the temporary file named by fileName. Parameters : argv (IN) - Input argument vector. fileName (IN) - Input file name for storing globed file names. Returns : Nothing. ==============================================================================================*/ void fnDoPerlGlob(char** argv, char* fileName) { FILE * redirOut = NULL; if (*argv) argv++; if (*argv == NULL) return; redirOut = fopen((const char *)fileName, (const char *)"w"); if (!redirOut) return; do { DIR* dir = NULL; DIR* fil = NULL; char* pattern = NULL; pattern = *argv++; dir = opendir((const char *)pattern); if (!dir) continue; /* find the last separator in pattern, NetWare has three: /\: */ while (fil = readdir(dir)) { // The below displays the files separated by tab character. // Also, it displays only the file names and not directories. // If any other format is desired, it needs to be done here. fprintf(redirOut, "%s\t", fil->d_name); } closedir(dir); } while (*argv); fclose(redirOut); return; }