X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=NetWare%2Fnw5.c;h=5dd8927649b29920ec23464b093cebb2924fdf23;hb=87330c3c58848154e8fd5ba40c628ac130564419;hp=e32fdb6b2faf9a519fe1a0e6fb1bac0720407838;hpb=2986a63f7e513cf37f46db9f211b77071260031f;p=p5sagit%2Fp5-mst-13.2.git diff --git a/NetWare/nw5.c b/NetWare/nw5.c index e32fdb6..5dd8927 100644 --- a/NetWare/nw5.c +++ b/NetWare/nw5.c @@ -17,7 +17,7 @@ -#include // For dTHXo, etc. +#include // For dTHX, etc. #include "nwpipe.h" @@ -211,7 +211,7 @@ nw_stdout() long nw_telldir(DIR *dirp) { - dTHXo; + dTHX; Perl_croak(aTHX_ "telldir function is not implemented"); return 0l; } @@ -292,7 +292,7 @@ nw_write(int fd, const void *buf, unsigned int cnt) char * nw_crypt(const char *txt, const char *salt) { - dTHXo; + dTHX; #ifdef HAVE_DES_FCRYPT dTHR; @@ -752,7 +752,7 @@ nw_rename(const char *oname, const char *newname) void nw_rewinddir(DIR *dirp) { - dTHXo; + dTHX; Perl_croak(aTHX_ "rewinddir function is not implemented"); } @@ -766,7 +766,7 @@ nw_rewind(FILE *pf) void nw_seekdir(DIR *dirp, long loc) { - dTHXo; + dTHX; Perl_croak(aTHX_ "seekdir function is not implemented"); } @@ -838,6 +838,15 @@ Perl_nw5_init(int *argcp, char ***argvp) MALLOC_INIT; } +#ifdef USE_ITHREADS +PerlInterpreter * +perl_clone_host(PerlInterpreter* proto_perl, UV flags) +{ + // Perl Clone is not implemented on NetWare. + return NULL; +} +#endif + // Some more functions: char * @@ -870,7 +879,70 @@ do_aspawn(void *vreally, void **vmark, void **vsp) // This feature needs to be implemented. // _asm is commented out since it goes into the internal debugger. // _asm {int 3}; - return(0); +//// return(0); + + + // This below code is required for system() call. + // Otherwise system() does not work on NetWare. + // Ananth, 3 Sept 2001 + + dTHX; + SV *really = (SV*)vreally; + SV **mark = (SV**)vmark; + SV **sp = (SV**)vsp; + char **argv; + char *str; + int status; + int flag = P_WAIT; + int index = 0; + + + if (sp <= mark) + return -1; + + nw_perlshell_items = 0; // No Shell + New(1306, argv, (sp - mark) + nw_perlshell_items + 3, char*); + + if (SvNIOKp(*(mark+1)) && !SvPOKp(*(mark+1))) { + ++mark; + flag = SvIVx(*mark); + } + + while (++mark <= sp) { + if (*mark && (str = (char *)SvPV_nolen(*mark))) + { + argv[index] = str; + index++; + } + else + { + argv[index] = ""; +// argv[index] = '\0'; + index++; + } + } + argv[index] = '\0'; + index++; + + status = nw_spawnvp(flag, + (char*)(really ? SvPV_nolen(really) : argv[0]), + (char**)argv); + + + if (flag != P_NOWAIT) { + if (status < 0) { + dTHR; + if (ckWARN(WARN_EXEC)) + Perl_warner(aTHX_ WARN_EXEC, "Can't spawn \"%s\": %s", argv[0], strerror(errno)); + status = 255 * 256; + } + else + status *= 256; + PL_statusvalue = status; + } + + Safefree(argv); + return (status); } int