| 1 |
|
|---|
| 2 | /*
|
|---|
| 3 | * Copyright © 2001 Novell, Inc. All Rights Reserved.
|
|---|
| 4 | *
|
|---|
| 5 | * You may distribute under the terms of either the GNU General Public
|
|---|
| 6 | * License or the Artistic License, as specified in the README file.
|
|---|
| 7 | *
|
|---|
| 8 | */
|
|---|
| 9 |
|
|---|
| 10 | /*
|
|---|
| 11 | * FILENAME : nwplglob.c
|
|---|
| 12 | * DESCRIPTION : Perl globbing support for NetWare. Other platforms have usually lauched
|
|---|
| 13 | * a separate executable for this in order to take advantage of their
|
|---|
| 14 | * shell's capability for generating a list of files from a given
|
|---|
| 15 | * wildcard file spec. On NetWare, we don't have that luxury.
|
|---|
| 16 | * So we just hack the support into pipe open support (which we also had to hack).
|
|---|
| 17 | * Author : HYAK
|
|---|
| 18 | * Date : January 2001.
|
|---|
| 19 | *
|
|---|
| 20 | */
|
|---|
| 21 |
|
|---|
| 22 |
|
|---|
| 23 |
|
|---|
| 24 | #include <nwtypes.h>
|
|---|
| 25 | #include "stdio.h"
|
|---|
| 26 | #include <dirent.h>
|
|---|
| 27 |
|
|---|
| 28 | #include "win32ish.h"
|
|---|
| 29 | #include "nwplglob.h"
|
|---|
| 30 |
|
|---|
| 31 |
|
|---|
| 32 |
|
|---|
| 33 | /*============================================================================================
|
|---|
| 34 |
|
|---|
| 35 | Function : fnDoPerlGlob
|
|---|
| 36 |
|
|---|
| 37 | Description : Perl globbing support: Takes an array of wildcard descriptors
|
|---|
| 38 | and produces from it a list of files that the wildcards expand into.
|
|---|
| 39 | The list of files is written to the temporary file named by fileName.
|
|---|
| 40 |
|
|---|
| 41 | Parameters : argv (IN) - Input argument vector.
|
|---|
| 42 | fileName (IN) - Input file name for storing globed file names.
|
|---|
| 43 |
|
|---|
| 44 | Returns : Nothing.
|
|---|
| 45 |
|
|---|
| 46 | ==============================================================================================*/
|
|---|
| 47 |
|
|---|
| 48 | void fnDoPerlGlob(char** argv, char* fileName)
|
|---|
| 49 | {
|
|---|
| 50 | FILE * redirOut = NULL;
|
|---|
| 51 |
|
|---|
| 52 | if (*argv)
|
|---|
| 53 | argv++;
|
|---|
| 54 | if (*argv == NULL)
|
|---|
| 55 | return;
|
|---|
| 56 |
|
|---|
| 57 | redirOut = fopen((const char *)fileName, (const char *)"w");
|
|---|
| 58 | if (!redirOut)
|
|---|
| 59 | return;
|
|---|
| 60 |
|
|---|
| 61 | do
|
|---|
| 62 | {
|
|---|
| 63 | DIR* dir = NULL;
|
|---|
| 64 | DIR* fil = NULL;
|
|---|
| 65 | char* pattern = NULL;
|
|---|
| 66 |
|
|---|
| 67 | pattern = *argv++;
|
|---|
| 68 |
|
|---|
| 69 | dir = opendir((const char *)pattern);
|
|---|
| 70 | if (!dir)
|
|---|
| 71 | continue;
|
|---|
| 72 |
|
|---|
| 73 | /* find the last separator in pattern, NetWare has three: /\: */
|
|---|
| 74 | while (fil = readdir(dir))
|
|---|
| 75 | {
|
|---|
| 76 | // The below displays the files separated by tab character.
|
|---|
| 77 | // Also, it displays only the file names and not directories.
|
|---|
| 78 | // If any other format is desired, it needs to be done here.
|
|---|
| 79 | fprintf(redirOut, "%s\t", fil->d_name);
|
|---|
| 80 | }
|
|---|
| 81 |
|
|---|
| 82 | closedir(dir);
|
|---|
| 83 |
|
|---|
| 84 | } while (*argv);
|
|---|
| 85 |
|
|---|
| 86 | fclose(redirOut);
|
|---|
| 87 |
|
|---|
| 88 | return;
|
|---|
| 89 | }
|
|---|
| 90 |
|
|---|