diff options
author | Nicholas Clark <nick@ccl4.org> | 2012-08-30 18:25:53 +0200 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2012-08-31 14:13:01 +0200 |
commit | 043fec90e88a2e23823af40a5c0b59539fc58069 (patch) | |
tree | 217d8ca6d7f6e18200a6b3f9c3d96199422d4243 /vmesa | |
parent | 63d7ac5fa5ef436afa9865a56b7c84e54a112722 (diff) | |
download | perl-043fec90e88a2e23823af40a5c0b59539fc58069.tar.gz |
Remove the VM/ESA port.
VM/ESA was a mainframe OS. IBM ended service on it in June 2003. It was
superseded by Z/VM.
Diffstat (limited to 'vmesa')
-rw-r--r-- | vmesa/Makefile | 15 | ||||
-rw-r--r-- | vmesa/vmesa.c | 592 | ||||
-rw-r--r-- | vmesa/vmesaish.h | 10 |
3 files changed, 0 insertions, 617 deletions
diff --git a/vmesa/Makefile b/vmesa/Makefile deleted file mode 100644 index d06a2da078..0000000000 --- a/vmesa/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -CCCMD=`sh $(shellflags) ../cflags $@` - -all : vm perl - -depend : - cd .. && $(MAKE) depend - -vm : vmesa.o - cp vmesa.o ../vmesa.o - -perl : - cd .. && $(MAKE) - -vmesa.o : vmesa.c - $(CCCMD) vmesa.c diff --git a/vmesa/vmesa.c b/vmesa/vmesa.c deleted file mode 100644 index 59dd19b6c1..0000000000 --- a/vmesa/vmesa.c +++ /dev/null @@ -1,592 +0,0 @@ -/************************************************************/ -/* */ -/* Module ID - vmesa.c */ -/* */ -/* Function - Provide operating system dependent process- */ -/* ing for perl under VM/ESA. */ -/* */ -/* Parameters - See individual entry points. */ -/* */ -/* Called By - N/A - see individual entry points. */ -/* */ -/* Calling To - N/A - see individual entry points. */ -/* */ -/* Notes - (1) ....................................... */ -/* */ -/* (2) ....................................... */ -/* */ -/* Name - Neale Ferguson. */ -/* */ -/* Date - August, 1998. */ -/* */ -/* */ -/* Associated - (1) Refer To ........................... */ -/* Documentation */ -/* (2) Refer To ........................... */ -/* */ -/************************************************************/ -/************************************************************/ -/* */ -/* MODULE MAINTENANCE HISTORY */ -/* -------------------------- */ -/* */ -static char REQ_REL_WHO [13] = -/*-------------- -------------------------------------*/ - "9999_99 NAF "; /* Original module */ -/* */ -/*============ End of Module Maintenance History ===========*/ - -/************************************************************/ -/* */ -/* DEFINES */ -/* ------- */ -/* */ -/************************************************************/ - -#define FAIL 65280 - -/*=============== END OF DEFINES ===========================*/ - -/************************************************************/ -/* */ -/* INCLUDE STATEMENTS */ -/* ------------------ */ -/* */ -/************************************************************/ - -#include <stdio.h> -#include <stdlib.h> -#include <spawn.h> -#include <fcntl.h> -#include <unistd.h> -#include <pthread.h> -#include <dll.h> -#include "EXTERN.h" -#include "perl.h" -#pragma map(truncate, "@@TRUNC") - -/*================== End of Include Statements =============*/ - -/************************************************************/ -/* */ -/* Global Variables */ -/* ---------------- */ -/* */ -/************************************************************/ - -static int Perl_stdin_fd = STDIN_FILENO, - Perl_stdout_fd = STDOUT_FILENO; - -static long dl_retcode = 0; - -/*================== End of Global Variables ===============*/ - -/************************************************************/ -/* */ -/* FUNCTION PROTOTYPES */ -/* ------------------- */ -/* */ -/************************************************************/ - -int do_aspawn(SV *, SV **, SV **); -int do_spawn(char *, int); -static int spawnit(char *); -static pid_t spawn_cmd(char *, int, int); -struct perl_thread * getTHR(void); - -/*================== End of Prototypes =====================*/ - -/************************************************************/ -/* */ -/* D O _ A S P A W N */ -/* ----------------- */ -/* */ -/************************************************************/ - -int -do_aspawn(SV* really, SV **mark, SV **sp) -{ - char **a, - *tmps; - struct inheritance inherit; - pid_t pid; - int status, - fd, - nFd, - fdMap[3]; - SV *sv, - **p_sv; - STRLEN n_a; - - status = FAIL; - if (sp > mark) - { - Newx(PL_Argv, sp - mark + 1, char*); - a = PL_Argv; - while (++mark <= sp) - { - if (*mark) - *a++ = SvPVx(*mark, n_a); - else - *a++ = ""; - } - inherit.flags = SPAWN_SETGROUP; - inherit.pgroup = SPAWN_NEWPGROUP; - fdMap[STDIN_FILENO] = Perl_stdin_fd; - fdMap[STDOUT_FILENO] = Perl_stdout_fd; - fdMap[STDERR_FILENO] = STDERR_FILENO; - nFd = 3; - *a = NULL; - /*-----------------------------------------------------*/ - /* Will execvp() use PATH? */ - /*-----------------------------------------------------*/ - if (*PL_Argv[0] != '/') - TAINT_ENV(); - if (really && *(tmps = SvPV(really, n_a))) - pid = spawnp(tmps, nFd, fdMap, &inherit, - (const char **) PL_Argv, - (const char **) environ); - else - pid = spawnp(PL_Argv[0], nFd, fdMap, &inherit, - (const char **) PL_Argv, - (const char **) environ); - if (pid < 0) - { - status = FAIL; - if (ckWARN(WARN_EXEC)) - warner(WARN_EXEC,"Can't exec \"%s\": %s", - PL_Argv[0], - Strerror(errno)); - } - else - { - /*------------------------------------------------*/ - /* If the file descriptors have been remapped then*/ - /* we've been called following a my_popen request */ - /* therefore we don't want to wait for spawnned */ - /* program to complete. We need to set the fdpid */ - /* value to the value of the spawnned process' pid*/ - /*------------------------------------------------*/ - fd = 0; - if (Perl_stdin_fd != STDIN_FILENO) - fd = Perl_stdin_fd; - else - if (Perl_stdout_fd != STDOUT_FILENO) - fd = Perl_stdout_fd; - if (fd != 0) - { - /*---------------------------------------------*/ - /* Get the fd of the other end of the pipe, */ - /* use this to reference the fdpid which will */ - /* be used by my_pclose */ - /*---------------------------------------------*/ - close(fd); - MUTEX_LOCK(&PL_fdpid_mutex); - p_sv = av_fetch(PL_fdpid,fd,TRUE); - fd = (int) SvIVX(*p_sv); - SvREFCNT_dec(*p_sv); - *p_sv = &PL_sv_undef; - sv = *av_fetch(PL_fdpid,fd,TRUE); - MUTEX_UNLOCK(&PL_fdpid_mutex); - (void) SvUPGRADE(sv, SVt_IV); - SvIVX(sv) = pid; - status = 0; - } - else - wait4pid(pid, &status, 0); - } - do_execfree(); - } - return (status); -} - -/*===================== End of do_aspawn ===================*/ - -/************************************************************/ -/* */ -/* D O _ S P A W N */ -/* --------------- */ -/* */ -/************************************************************/ - -int -do_spawn(char *cmd, int execf) -{ - char **a, - *s, - flags[10]; - int status, - nFd, - fdMap[3]; - struct inheritance inherit; - pid_t pid; - - while (*cmd && isSPACE(*cmd)) - cmd++; - - /*------------------------------------------------------*/ - /* See if there are shell metacharacters in it */ - /*------------------------------------------------------*/ - - if (*cmd == '.' && isSPACE(cmd[1])) - return (spawnit(cmd)); - else - { - if (strnEQ(cmd,"exec",4) && isSPACE(cmd[4])) - return (spawnit(cmd)); - else - { - /*------------------------------------------------*/ - /* Catch VAR=val gizmo */ - /*------------------------------------------------*/ - for (s = cmd; *s && isALPHA(*s); s++); - if (*s != '=') - { - for (s = cmd; *s; s++) - { - if (*s != ' ' && - !isALPHA(*s) && - strchr("$&*(){}[]'\";\\|?<>~`\n",*s)) - { - if (*s == '\n' && !s[1]) - { - *s = '\0'; - break; - } - return(spawnit(cmd)); - } - } - } - } - } - - Newx(PL_Argv, (s - cmd) / 2 + 2, char*); - PL_Cmd = savepvn(cmd, s-cmd); - a = PL_Argv; - for (s = PL_Cmd; *s;) - { - while (*s && isSPACE(*s)) s++; - if (*s) - *(a++) = s; - while (*s && !isSPACE(*s)) s++; - if (*s) - *s++ = '\0'; - } - *a = NULL; - fdMap[STDIN_FILENO] = Perl_stdin_fd; - fdMap[STDOUT_FILENO] = Perl_stdout_fd; - fdMap[STDERR_FILENO] = STDERR_FILENO; - nFd = 3; - inherit.flags = 0; - if (PL_Argv[0]) - { - pid = spawnp(PL_Argv[0], nFd, fdMap, &inherit, - (const char **) PL_Argv, - (const char **) environ); - if (pid < 0) - { - status = FAIL; - if (ckWARN(WARN_EXEC)) - warner(WARN_EXEC,"Can't exec \"%s\": %s", - PL_Argv[0], - Strerror(errno)); - } - else - wait4pid(pid, &status, 0); - } - do_execfree(); - return (status); -} - -/*===================== End of do_spawn ====================*/ - -/************************************************************/ -/* */ -/* Name - spawnit. */ -/* */ -/* Function - Spawn command and return status. */ -/* */ -/* On Entry - cmd - command to be spawned. */ -/* */ -/* On Exit - status returned. */ -/* */ -/************************************************************/ - -int -spawnit(char *cmd) -{ - pid_t pid; - int status; - - pid = spawn_cmd(cmd, STDIN_FILENO, STDOUT_FILENO); - if (pid < 0) - status = FAIL; - else - wait4pid(pid, &status, 0); - - return (status); -} - -/*===================== End of spawnit =====================*/ - -/************************************************************/ -/* */ -/* Name - spawn_cmd. */ -/* */ -/* Function - Spawn command and return pid. */ -/* */ -/* On Entry - cmd - command to be spawned. */ -/* */ -/* On Exit - pid returned. */ -/* */ -/************************************************************/ - -pid_t -spawn_cmd(char *cmd, int inFd, int outFd) -{ - struct inheritance inherit; - pid_t pid; - const char *argV[4] = {"/bin/sh","-c",NULL,NULL}; - int nFd, - fdMap[3]; - - argV[2] = cmd; - fdMap[STDIN_FILENO] = inFd; - fdMap[STDOUT_FILENO] = outFd; - fdMap[STDERR_FILENO] = STDERR_FILENO; - nFd = 3; - inherit.flags = SPAWN_SETGROUP; - inherit.pgroup = SPAWN_NEWPGROUP; - pid = spawn(argV[0], nFd, fdMap, &inherit, - argV, (const char **) environ); - return (pid); -} - -/*===================== End of spawnit =====================*/ - -/************************************************************/ -/* */ -/* Name - my_popen. */ -/* */ -/* Function - Use popen to execute a command return a */ -/* file descriptor. */ -/* */ -/* On Entry - cmd - command to be executed. */ -/* */ -/* On Exit - FILE * returned. */ -/* */ -/************************************************************/ - -#include <ctest.h> -PerlIO * -my_popen(char *cmd, char *mode) -{ - FILE *fd; - int pFd[2], - this, - that, - pid; - SV *sv; - - if (PerlProc_pipe(pFd) >= 0) - { - this = (*mode == 'w'); - that = !this; - /*-------------------------------------------------*/ - /* If this is a read mode pipe */ - /* - map the write end of the pipe to STDOUT */ - /* - return the *FILE for the read end of the pipe */ - /*-------------------------------------------------*/ - if (!this) - Perl_stdout_fd = pFd[that]; - /*-------------------------------------------------*/ - /* Else */ - /* - map the read end of the pipe to STDIN */ - /* - return the *FILE for the write end of the pipe*/ - /*-------------------------------------------------*/ - else - Perl_stdin_fd = pFd[that]; - if (strNE(cmd,"-")) - { - PERL_FLUSHALL_FOR_CHILD; - pid = spawn_cmd(cmd, Perl_stdin_fd, Perl_stdout_fd); - if (pid >= 0) - { - MUTEX_LOCK(&PL_fdpid_mutex); - sv = *av_fetch(PL_fdpid,pFd[this],TRUE); - MUTEX_UNLOCK(&PL_fdpid_mutex); - (void) SvUPGRADE(sv, SVt_IV); - SvIVX(sv) = pid; - fd = PerlIO_fdopen(pFd[this], mode); - close(pFd[that]); - } - else - fd = NULL; - } - else - { - MUTEX_LOCK(&PL_fdpid_mutex); - sv = *av_fetch(PL_fdpid,pFd[that],TRUE); - MUTEX_UNLOCK(&PL_fdpid_mutex); - (void) SvUPGRADE(sv, SVt_IV); - SvIVX(sv) = pFd[this]; - fd = PerlIO_fdopen(pFd[this], mode); - } - } - else - fd = NULL; - return (fd); -} - -/*===================== End of my_popen ====================*/ - -/************************************************************/ -/* */ -/* Name - my_pclose. */ -/* */ -/* Function - Use pclose to terminate a piped command */ -/* file stream. */ -/* */ -/* On Entry - fd - FILE pointer. */ -/* */ -/* On Exit - Status returned. */ -/* */ -/************************************************************/ - -long -my_pclose(FILE *fp) -{ - int pid, - saveErrno, - status; - long rc, - wRc; - SV **sv; - FILE *other; - - MUTEX_LOCK(&PL_fdpid_mutex); - sv = av_fetch(PL_fdpid,PerlIO_fileno(fp),TRUE); - MUTEX_UNLOCK(&PL_fdpid_mutex); - pid = (int) SvIVX(*sv); - SvREFCNT_dec(*sv); - *sv = &PL_sv_undef; - rc = PerlIO_close(fp); - saveErrno = errno; - do - { - wRc = waitpid(pid, &status, 0); - } while ((wRc == -1) && (errno == EINTR)); - Perl_stdin_fd = STDIN_FILENO; - Perl_stdout_fd = STDOUT_FILENO; - errno = saveErrno; - if (rc != 0) - SETERRNO(errno, garbage); - return (rc); - -} - -/************************************************************/ -/* */ -/* Name - dlopen. */ -/* */ -/* Function - Load a DLL. */ -/* */ -/* On Exit - */ -/* */ -/************************************************************/ - -void * -dlopen(const char *path) -{ - dllhandle *handle; - -fprintf(stderr,"Loading %s\n",path); - handle = dllload(path); - dl_retcode = errno; -fprintf(stderr,"Handle %08X %s\n",handle,strerror(errno)); - return ((void *) handle); -} - -/*===================== End of dlopen ======================*/ - -/************************************************************/ -/* */ -/* Name - dlsym. */ -/* */ -/* Function - Locate a DLL symbol. */ -/* */ -/* On Exit - */ -/* */ -/************************************************************/ - -void * -dlsym(void *handle, const char *symbol) -{ - void *symLoc; - -fprintf(stderr,"Finding %s\n",symbol); - symLoc = dllqueryvar((dllhandle *) handle, (char *) symbol); - if (symLoc == NULL) - symLoc = (void *) dllqueryfn((dllhandle *) handle, - (char *) symbol); - dl_retcode = errno; - return(symLoc); -} - -/*===================== End of dlsym =======================*/ - -/************************************************************/ -/* */ -/* Name - dlerror. */ -/* */ -/* Function - Return the last errno pertaining to a DLL */ -/* operation. */ -/* */ -/* On Exit - */ -/* */ -/************************************************************/ - -void * -dlerror(void) -{ - char * dlEmsg; - - dlEmsg = strerror(dl_retcode); - dl_retcode = 0; - return(dlEmsg); -} - -/*===================== End of dlerror =====================*/ - -/************************************************************/ -/* */ -/* Name - TRUNCATE. */ -/* */ -/* Function - Truncate a file identified by 'path' to */ -/* a given length. */ -/* */ -/* On Entry - path - Path of file to be truncated. */ -/* length - length of truncated file. */ -/* */ -/* On Exit - retC - return code. */ -/* */ -/************************************************************/ - -int -truncate(const unsigned char *path, off_t length) -{ - int fd, - retC; - - fd = open((const char *) path, O_RDWR); - if (fd > 0) - { - retC = ftruncate(fd, length); - close(fd); - } - else - retC = fd; - return(retC); -} - -/*===================== End of trunc =======================*/ diff --git a/vmesa/vmesaish.h b/vmesa/vmesaish.h deleted file mode 100644 index a6bd901cdb..0000000000 --- a/vmesa/vmesaish.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _VMESA_INCLUDED -# define _VMESA_INCLUDED 1 -# include <string.h> -# include <ctype.h> -# include <vmsock.h> - void * dlopen(const char *); - void * dlsym(void *, const char *); - void * dlerror(void); -# define OLD_PTHREADS_API -#endif |