diff options
author | Anantha Kesari H Y <hyanantha@php.net> | 2005-06-29 08:59:30 +0000 |
---|---|---|
committer | Anantha Kesari H Y <hyanantha@php.net> | 2005-06-29 08:59:30 +0000 |
commit | f5aeda297119d3538abf7ca8dcb79f45e7aedc5d (patch) | |
tree | bd3caffdceb46381e1655fba7ee558cc96d51fff /netware | |
parent | fb0c96d07b68b06c327b1805e13ed22d72d28bba (diff) | |
download | php-git-f5aeda297119d3538abf7ca8dcb79f45e7aedc5d.tar.gz |
NetWare LibC has pipe/popen support
Diffstat (limited to 'netware')
-rw-r--r-- | netware/pipe.c | 329 |
1 files changed, 0 insertions, 329 deletions
diff --git a/netware/pipe.c b/netware/pipe.c deleted file mode 100644 index c302fdf3e0..0000000000 --- a/netware/pipe.c +++ /dev/null @@ -1,329 +0,0 @@ -/* - * FILENAME : pipe.c - * DESCRIPTION : Functions to implement pipes on NetWare. - * Author : Anantha Kesari H Y, Venkat Raghavan S, Srivathsa M - * - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "netware/pipe.h" -#include "netware/mktemp.h" - - -/* Following definitions unavailable in LibC, hence borrowed from CLib */ -#define P_WAIT 0 -#define P_NOWAIT 1 - -#define WHITESPACE " \t" -#define MAX_ARGS 10 - - -FILE* popen(const char* commandline, const char* mode) -{ - int err, count; - char pszPipestr[32] = {'\0'}; - char *command = NULL, *argv[MAX_ARGS] = {'\0'}; - int fd = -1; - fd_set myfds; - wiring_t wiring; - pid_t pid=0; - FILE *fp=NULL; - char *ptr = NULL; - int ptrLen = 0, argc = 0, i = 0; - - - /* Get a temporary name */ - (void) tmpnam(strecpy(pszPipestr, "PHP/php$pipe/")); - - wiring.infd=FD_UNUSED; - wiring.outfd=FD_UNUSED; - wiring.errfd=FD_UNUSED; - - /* Open a pipe */ - if ( *mode=='r') { - fd = pipe_open (pszPipestr, O_RDONLY); - if (fd == -1) - return NULL; - - wiring.outfd=fd; - } else if (*mode=='w') { - fd = pipe_open (pszPipestr, O_WRONLY); - if (fd == -1) - return NULL; - - wiring.infd=fd; - } else { - consoleprintf ("Unsupported pipe open mode \n"); - return NULL; - } - - /* Get the file pointer */ - fp = fdopen(fd, mode); - if (fp == NULL) { - consoleprintf ("Failure in fdopen \n"); - close (fd); - return NULL; - } - - /* Separate commandline string into words */ - ptr = strtok((char*)commandline, WHITESPACE); - ptrLen = strlen(ptr); - - /* Get the command */ - command = (char*)malloc(ptrLen + 1); - if(command == NULL) { - consoleprintf ("Failure in memory allocation \n"); - close (fd); - fclose (fp); - return NULL; - } - strcpy (command, ptr); - - /* Command as the first argument into prcessve */ - argv[argc] = (char*)malloc(ptrLen + 1); - if(argv[argc] == NULL) { - consoleprintf ("Failure in memory allocation \n"); - close (fd); - fclose (fp); - if(command) { - free(command); - command = NULL; - } - return NULL; - } - strcpy (argv[argc], ptr); - argc++; - - /* Get more arguments if any to be passed to prcessve */ - ptr = strtok(NULL, WHITESPACE); - while (ptr && (argc < MAX_ARGS)) - { - ptrLen = strlen(ptr); - - argv[argc] = (char*)malloc(ptrLen + 1); - if(argv[argc] == NULL) { - consoleprintf ("Failure in memory allocation \n"); - close (fd); - fclose (fp); - if(command) { - free(command); - command = NULL; - } - return NULL; - } - strcpy (argv[argc], ptr); - argc++; - - ptr = strtok(NULL, WHITESPACE); - } - argv[argc] = NULL; - - FD_ZERO(&myfds); - FD_SET(fd, &myfds); - - pid = processve(command, PROC_CURRENT_SPACE, NULL, &wiring, - &myfds, NULL, (const char **)argv ); - if (pid == -1) { - consoleprintf ("Failure in processve call \n"); - close (fd); - fclose(fp); - if(command) { - free(command); - command = NULL; - } - for(i=0; i<argc; i++) { - if(argv[i]) { - free(argv[i]); - argv[i] = NULL; - } - } - return NULL; - } - - close (fd); - if(command) { - free(command); - command = NULL; - } - for(i=0; i<argc; i++) { - if(argv[i]) { - free(argv[i]); - argv[i] = NULL; - } - } - - return fp; -} - - -int pclose(FILE* stream) -{ - fclose(stream); - return 0; -} - - - -#if 0 - -FILE* popen2(const char* commandline, const char* mode) -{ - int err, count, var, replaced; - char **env, pszPipestr[32]; - NXVmId_t newVM; - NXExecEnvSpec_t envSpec; - char *command = NULL, *argv[MAX_ARGS] = {"\0"}; - NXHandle_t fd; - - fd = (NXHandle_t) -1; - - count = NXGetEnvCount() + 1; // (add one for NULL) - env = (char **) NXMemAlloc(sizeof(char *) * count, 0); - - if (!env) - return 0; - - err = NXCopyEnv(env, count); // ensure NULL added at end - if ( *mode='r'){ - (void) tmpnam(strecpy(pszPipestr, "PHPPIPE/stdin/")); - err = NXFifoOpen(0, pszPipestr, NX_O_RDONLY, 0, &fd); - if (err) - return 0; - - envSpec.esStdin.ssType = NX_OBJ_CONSOLE; - envSpec.esStdout.ssType = NX_OBJ_FIFO; - envSpec.esStdout.ssPath = pszPipestr; - } - else if (*mode='w') then{ - (void) tmpnam(strecpy(pszPipestr, "PHPPIPE/stdout/")); - err = NXFifoOpen(0, instr, NX_O_WRONLY, 0, &fd); - if (err) - return 0; - envSpec.esStdin.ssType = NX_OBJ_FIFO; - envSpec.esStdout.ssType = NX_OBJ_CONSOLE; - envSpec.esStdin.ssPath = pszPipestr; - } - else - consoleprintf ("Unsupported pipe open mode \n"); - - - /* Separate commandline string into words */ - - ptr = strtok((char*)commandline, WHITESPACE); - ptrLen = strlen(ptr); - - command = (char*)malloc(ptrLen + 1); - strcpy (command, ptr); - - ptr = strtok(NULL, WHITESPACE); - while (ptr && (argc < MAX_ARGS)) - { - ptrLen = strlen(ptr); - - argv[argc] = (char*)malloc(ptrLen + 1); - strcpy (argv[argc], ptr); - - argc++; - - ptr = strtok(NULL, WHITESPACE); - } -/* consoleprintf ("PHP | popen: command = %s\n", command); */ - - // - - envSpec.esArgc = argc; - envSpec.esArgv = argv; - envSpec.esEnv = env; - - envSpec.esStderr.ssType = NX_OBJ_CONSOLE; - - envSpec.esStdin.ssHandle = - envSpec.esStdout.ssHandle = - envSpec.esStderr.ssHandle = -1; - - envSpec.esStdin.ssPathCtx = - envSpec.esStdout.ssPathCtx = - envSpec.esStderr.ssPathCtx = NULL; - - envSpec.esStderr.ssPath = NULL; - - err = NXVmSpawn(NULL, command, &envSpec, NX_VM_CREATE_DETACHED, &newVM); - return fd; - -} - -int pclose2(FILE* stream) -{ - NXClose(*(NXHandle_t *)stream); - return 0; -} - -FILE* popen1(const char* commandline, const char* mode) -{ - char *command = NULL, *argv[MAX_ARGS] = {"\0"}; - char *tempName = "phpXXXXXX.tmp"; - char *filePath = NULL; - FILE *fp = NULL; - char *ptr = NULL; - int ptrLen = 0, argc = 0, i = 0; - - /* Check for validity of input parameters */ - if (!commandline || !mode) - return NULL; - - /* Get temporary file name */ - filePath = mktemp(tempName); - if (!filePath) - return NULL; - - /* Separate commandline string into words */ - - ptr = strtok((char*)commandline, WHITESPACE); - ptrLen = strlen(ptr); - - command = (char*)malloc(ptrLen + 1); - strcpy (command, ptr); - - ptr = strtok(NULL, WHITESPACE); - while (ptr && (argc < MAX_ARGS)) - { - ptrLen = strlen(ptr); - - argv[argc] = (char*)malloc(ptrLen + 1); - strcpy (argv[argc], ptr); - - argc++; - - ptr = strtok(NULL, WHITESPACE); - } -/*consoleprintf ("PHP | popen: command = %s\n", command);*/ - if(strchr(mode,'r') != 0) - { - /*spawnvp(P_WAIT, command, argv);*/ - - fp = fopen(filePath, "r"); /* Get the file handle of the pipe */ - } - else if(strchr(mode,'w') != 0) - fp = fopen(filePath, "w"); /* Get the file handle of the pipe */ - - /* Free resources */ - free (command); - for (i = 0; i < argc; i++) - { -/*consoleprintf ("%s\t", argv[i]);*/ - free (argv[i]); - } -/*consoleprintf ("\n");*/ - - return fp; /* Return the file handle.*/ -} - -int pclose1(FILE* stream) -{ - return (fclose(stream)); -} - -# endif |