home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl502b.zip / OS2 / patches < prev    next >
Text File  |  1996-02-26  |  12KB  |  480 lines

  1. *** e:/perl5.002b3/doio.c    Sat Feb 03 01:49:30 1996
  2. --- perl5/doio.c    Tue Feb 20 15:49:36 1996
  3. ***************
  4. *** 942,947 ****
  5. --- 942,949 ----
  6.       }
  7.   }
  8.   
  9. + #ifndef OS2
  10.   bool
  11.   do_exec(cmd)
  12.   char *cmd;
  13. ***************
  14. *** 1030,1035 ****
  15. --- 1032,1039 ----
  16.       do_execfree();
  17.       return FALSE;
  18.   }
  19. + #endif
  20.   
  21.   I32
  22.   apply(type,mark,sp)
  23. *** e:/perl5.002b3/ext/DynaLoader/dl_os2.xs    Tue Nov 14 04:58:42 1995
  24. --- perl5/ext/DynaLoader/dl_os2.xs    Tue Feb 20 17:58:38 1996
  25. ***************
  26. *** 28,34 ****
  27.           return (void *)handle;
  28.   
  29.       /* Not found. Check for non-FAT name and try truncated name. */
  30. -     /* Don't know if this helps though... */
  31.       for (beg = dot = path + strlen(path);
  32.            beg > path && !strchr(":/\\", *(beg-1));
  33.            beg--)
  34. --- 28,33 ----
  35. ***************
  36. *** 162,167 ****
  37. --- 161,167 ----
  38.   char *
  39.   mod2fname(sv)
  40.        SV   *sv;
  41.   
  42.   
  43.   # These functions should not need changing on any platform:
  44. *** e:/perl5.002b3/ext/DynaLoader/DynaLoader.pm    Thu Feb 01 19:00:30 1996
  45. --- perl5/ext/DynaLoader/DynaLoader.pm    Tue Feb 20 18:48:00 1996
  46. ***************
  47. *** 468,473 ****
  48. --- 468,474 ----
  49.       Linux: dld_create_reference(@dl_require_symbols); dld_link($filename)
  50.       NeXT:  rld_load($filename, @dl_resolve_using)
  51.       VMS:   lib$find_image_symbol($filename,$dl_require_symbols[0])
  52. +     OS/2:  DosLoadModule(,,$filename,)
  53.   
  54.   
  55.   =item dl_find_symbol()
  56. ***************
  57. *** 490,495 ****
  58. --- 491,497 ----
  59.       Linux: dld_get_func($symbol) and/or dld_get_symbol($symbol)
  60.       NeXT:  rld_lookup("_$symbol")
  61.       VMS:   lib$find_image_symbol($libref,$symbol)
  62. +     OS/2:  DosQueryProcAddr($libref,0,$symbol,)
  63.   
  64.   
  65.   =item dl_undef_symbols()
  66. *** e:/perl5.002b3/os2/os2.c    Sun Dec 24 19:43:02 1995
  67. --- perl5/os2/os2.c    Mon Feb 26 02:46:30 1996
  68. ***************
  69. *** 40,59 ****
  70.       int r, status;
  71.       Signal_t (*ihand)();     /* place to save signal during system() */
  72.       Signal_t (*qhand)();     /* place to save signal during system() */
  73.   
  74. !     if (pid < 0 || flag != 0)
  75.           return pid;
  76.   
  77.       ihand = signal(SIGINT, SIG_IGN);
  78.       qhand = signal(SIGQUIT, SIG_IGN);
  79.       r = waitpid(pid, &status, 0);
  80.       signal(SIGINT, ihand);
  81.       signal(SIGQUIT, qhand);
  82.       statusvalue = (U16)status;
  83.       if (r < 0)
  84.           return -1;
  85.       return status & 0xFFFF;
  86.   }
  87.   
  88.   int
  89. --- 40,72 ----
  90.       int r, status;
  91.       Signal_t (*ihand)();     /* place to save signal during system() */
  92.       Signal_t (*qhand)();     /* place to save signal during system() */
  93. + #ifndef __EMX__
  94. +     RESULTCODES res;
  95. +     int rpid;
  96. + #endif
  97.   
  98. !     if (pid <= 0 || (flag & 0xFF) != P_WAIT)
  99.           return pid;
  100.   
  101. + #ifdef __EMX__
  102.       ihand = signal(SIGINT, SIG_IGN);
  103.       qhand = signal(SIGQUIT, SIG_IGN);
  104.       r = waitpid(pid, &status, 0);
  105.       signal(SIGINT, ihand);
  106.       signal(SIGQUIT, qhand);
  107.       statusvalue = (U16)status;
  108.       if (r < 0)
  109.           return -1;
  110.       return status & 0xFFFF;
  111. + #else
  112. +     ihand = signal(SIGINT, SIG_IGN);
  113. +     r = DosWaitChild(DCWA_PROCESS, DCWW_WAIT, &res, &rpid, pid);
  114. +     signal(SIGINT, ihand);
  115. +     statusvalue = res.codeResult << 8 | res.codeTerminate;
  116. +     if (r)
  117. +         return -1;
  118. +     return statusvalue;
  119. + #endif
  120.   }
  121.   
  122.   int
  123. ***************
  124. *** 68,81 ****
  125.       int flag = P_WAIT, trueflag;
  126.   
  127.       if (sp > mark) {
  128. !     New(401,Argv, sp - mark + 1, char*);
  129. !     a = Argv;
  130. !     if (mark < sp && SvIOKp(*(mark+1))) {
  131.           ++mark;
  132.           flag = SvIVx(*mark);
  133.       }
  134.   
  135.       while (++mark <= sp) {
  136.           if (*mark)
  137.           *a++ = SvPVx(*mark, na);
  138. --- 81,94 ----
  139.       int flag = P_WAIT, trueflag;
  140.   
  141.       if (sp > mark) {
  142. !     if (mark < sp && SvNOKp(*(mark+1))) {
  143.           ++mark;
  144.           flag = SvIVx(*mark);
  145.       }
  146.   
  147. +     New(401,Argv, sp - mark + 1, char*);
  148. +     a = Argv;
  149.       while (++mark <= sp) {
  150.           if (*mark)
  151.           *a++ = SvPVx(*mark, na);
  152. ***************
  153. *** 102,108 ****
  154.   }
  155.   
  156.   int
  157. ! do_spawn(cmd)
  158.   char *cmd;
  159.   {
  160.       register char **a;
  161. --- 115,121 ----
  162.   }
  163.   
  164.   int
  165. ! do_spawn2(cmd, execf)
  166.   char *cmd;
  167.   {
  168.       register char **a;
  169. ***************
  170. *** 132,138 ****
  171.           *s = '\0';
  172.           break;
  173.           }
  174. ! shell_cmd:  return result(P_WAIT, spawnl(P_NOWAIT,shell,shell,copt,cmd,(char*)0));
  175.       }
  176.       }
  177.       New(402,Argv, (s - cmd) / 2 + 2, char*);
  178. --- 145,153 ----
  179.           *s = '\0';
  180.           break;
  181.           }
  182. ! shell_cmd:  if (execf)
  183. !                 return spawnl(P_OVERLAY,shell,shell,copt,cmd,(char*)0);
  184. !         return result(P_WAIT, spawnl(P_WAIT,shell,shell,copt,cmd,(char*)0));
  185.       }
  186.       }
  187.       New(402,Argv, (s - cmd) / 2 + 2, char*);
  188. ***************
  189. *** 148,154 ****
  190.       }
  191.       *a = Nullch;
  192.       if (Argv[0]) {
  193. !     rc = result(P_WAIT, spawnvp(P_NOWAIT,Argv[0],Argv));
  194.       if (rc < 0 && dowarn)
  195.           warn("Can't spawn \"%s\": %s", Argv[0], Strerror(errno));
  196.       } else
  197. --- 163,172 ----
  198.       }
  199.       *a = Nullch;
  200.       if (Argv[0]) {
  201. !     if (execf)
  202. !         rc = spawnvp(P_OVERLAY,Argv[0],Argv);
  203. !         else
  204. !         rc = result(P_WAIT, spawnvp(P_NOWAIT,Argv[0],Argv));
  205.       if (rc < 0 && dowarn)
  206.           warn("Can't spawn \"%s\": %s", Argv[0], Strerror(errno));
  207.       } else
  208. ***************
  209. *** 157,162 ****
  210. --- 175,194 ----
  211.       return rc;
  212.   }
  213.   
  214. + int
  215. + do_spawn(cmd)
  216. + char *cmd;
  217. + {
  218. +     return do_spawn2(cmd, 0);
  219. + }
  220. + bool
  221. + do_exec(cmd)
  222. + char *cmd;
  223. + {
  224. +     return do_spawn2(cmd, 1);
  225. + }
  226.   /*****************************************************************************/
  227.   
  228.   #ifndef HAS_FORK
  229. ***************
  230. *** 170,195 ****
  231.   #endif
  232.   
  233.   /*****************************************************************************/
  234. ! /* not implemented in EMX 0.9a */
  235.   
  236.   void *    ctermid(x)    { return 0; }
  237.   
  238. ! #ifdef MYTTYNAME /* was not in emx0.9a */
  239. ! void *    ttyname(x)    { return 0; }
  240. ! #endif
  241.   
  242. ! void *    gethostent()    { return 0; }
  243. ! void *    getnetent()    { return 0; }
  244. ! void *    getprotoent()    { return 0; }
  245. ! void *    getservent()    { return 0; }
  246. ! void    sethostent(x)    {}
  247. ! void    setnetent(x)    {}
  248. ! void    setprotoent(x)    {}
  249. ! void    setservent(x)    {}
  250. ! void    endhostent(x)    {}
  251. ! void    endnetent(x)    {}
  252. ! void    endprotoent(x)    {}
  253. ! void    endservent(x)    {}
  254.   
  255.   /*****************************************************************************/
  256.   /* stat() hack for char/block device */
  257. --- 202,274 ----
  258.   #endif
  259.   
  260.   /*****************************************************************************/
  261. ! /* missing in malloc.c */
  262. ! void *
  263. ! calloc(size_t n, size_t s)
  264. ! {
  265. !     void *p;
  266. !     n *= s;
  267. !     p = malloc(n);
  268. !     if (p)
  269. !     memset(p, 0, n);
  270. !     return p;
  271. ! }
  272. ! /*****************************************************************************/
  273. ! /* not implemented in EMX 0.9b */
  274.   
  275.   void *    ctermid(x)    { return 0; }
  276.   
  277. ! /*****************************************************************************/
  278. ! /* my socket forwarders - EMX lib only provides static forwarders */
  279. ! static HMODULE htcp = 0;
  280.   
  281. ! static void *
  282. ! tcp0(char *name)
  283. ! {
  284. !     static BYTE buf[20];
  285. !     PFN fcn;
  286. !     if (!htcp)
  287. !     DosLoadModule(buf, sizeof buf, "tcp32dll", &htcp);
  288. !     if (htcp && DosQueryProcAddr(htcp, 0, name, &fcn) == 0)
  289. !     return (void *) ((void * (*)(void)) fcn) ();
  290. !     return 0;
  291. ! }
  292. ! static void
  293. ! tcp1(char *name, int arg)
  294. ! {
  295. !     static BYTE buf[20];
  296. !     PFN fcn;
  297. !     if (!htcp)
  298. !     DosLoadModule(buf, sizeof buf, "tcp32dll", &htcp);
  299. !     if (htcp && DosQueryProcAddr(htcp, 0, name, &fcn) == 0)
  300. !     ((void (*)(int)) fcn) (arg);
  301. ! }
  302. ! void *    gethostent()    { return tcp0("GETHOSTENT");  }
  303. ! void *    getnetent()    { return tcp0("GETNETENT");   }
  304. ! void *    getprotoent()    { return tcp0("GETPROTOENT"); }
  305. ! void *    getservent()    { return tcp0("GETSERVENT");  }
  306. ! void    sethostent(x)    { tcp1("SETHOSTENT",  x); }
  307. ! void    setnetent(x)    { tcp1("SETNETENT",   x); }
  308. ! void    setprotoent(x)    { tcp1("SETPROTOENT", x); }
  309. ! void    setservent(x)    { tcp1("SETSERVENT",  x); }
  310. ! void    endhostent()    { tcp0("ENDHOSTENT");  }
  311. ! void    endnetent()    { tcp0("ENDNETENT");   }
  312. ! void    endprotoent()    { tcp0("ENDPROTOENT"); }
  313. ! void    endservent()    { tcp0("ENDSERVENT");  }
  314. ! /*****************************************************************************/
  315. ! /* not implemented in C Set++ */
  316. ! #ifndef __EMX__
  317. ! int    setuid(x)    { errno = EINVAL; return -1; }
  318. ! int    setgid(x)    { errno = EINVAL; return -1; }
  319. ! #endif
  320.   
  321.   /*****************************************************************************/
  322.   /* stat() hack for char/block device */
  323. *** e:/perl5.002b3/os2/os2ish.h    Tue Feb 20 13:52:32 1996
  324. --- perl5/os2/os2ish.h    Tue Feb 20 14:20:58 1996
  325. ***************
  326. *** 4,10 ****
  327. --- 4,12 ----
  328.    *    This symbol, if defined, indicates that the ioctl() routine is
  329.    *    available to set I/O characteristics
  330.    */
  331. + #ifdef __EMX__
  332.   #define    HAS_IOCTL        /**/
  333. + #endif
  334.    
  335.   /* HAS_UTIME:
  336.    *    This symbol, if defined, indicates that the routine utime() is
  337. ***************
  338. *** 12,18 ****
  339. --- 14,22 ----
  340.    */
  341.   #define HAS_UTIME        /**/
  342.   
  343. + #ifndef __IBMC__
  344.   #define HAS_KILL
  345. + #endif
  346.   #define HAS_WAIT
  347.   
  348.   #ifndef SIGABRT
  349. ***************
  350. *** 21,27 ****
  351. --- 25,36 ----
  352.   #ifndef SIGILL
  353.   #    define SIGILL 6         /* blech */
  354.   #endif
  355. + #ifdef __IBMC__
  356. + #define ABORT() abort();
  357. + #else
  358.   #define ABORT() kill(getpid(),SIGABRT);
  359. + #endif
  360.   
  361.   #define BIT_BUCKET "/dev/null"  /* Will this work? */
  362.   
  363. ***************
  364. *** 29,40 ****
  365.       _response(argcp, argvp);            \
  366.       _wildcard(argcp, argvp); } while (0)
  367.   
  368. - #define PERL_SYS_INIT(argcp, argvp) do {    \
  369. -     _response(argcp, argvp);            \
  370. -     _wildcard(argcp, argvp); } while (0)
  371.   /*
  372.    * fwrite1() should be a routine with the same calling sequence as fwrite(),
  373.    * but which outputs all of the bytes requested as a single stream (unlike
  374. --- 38,43 ----
  375. ***************
  376. *** 47,60 ****
  377.   
  378.   /*****************************************************************************/
  379.   
  380.   #include <stdlib.h>    /* before the following definitions */
  381.   #include <unistd.h>    /* before the following definitions */
  382.   
  383.   #define chdir    _chdir2
  384.   #define getcwd    _getcwd2
  385.   
  386. ! /* This guy is needed for quick stdstd  */
  387.   
  388.   #if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE)
  389.   #  define _filbuf _fill
  390.       /* Perl uses ungetc only with successful return */
  391. --- 50,81 ----
  392.   
  393.   /*****************************************************************************/
  394.   
  395. + #ifdef __EMX__
  396.   #include <stdlib.h>    /* before the following definitions */
  397.   #include <unistd.h>    /* before the following definitions */
  398.   
  399.   #define chdir    _chdir2
  400.   #define getcwd    _getcwd2
  401.   
  402. ! #define OS2_STAT_HACK 1
  403. ! #else /* __IBMC__ */
  404. ! #define __EXTENDED__
  405. ! #include <fcntl.h>
  406. ! #include <io.h>
  407. ! #include <direct.h>
  408. ! #include <process.h>
  409. ! #define mkdir(x,y) _mkdir(x)
  410.   
  411. + #define OS2_STAT_HACK 0
  412. + #endif /* __IBMC__ */
  413. + /* This guy is needed for quick stdstd  */
  414.   #if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE)
  415.   #  define _filbuf _fill
  416.       /* Perl uses ungetc only with successful return */
  417. ***************
  418. *** 65,71 ****
  419.   
  420.   #define OP_BINARY O_BINARY
  421.   
  422. ! #define OS2_STAT_HACK 1
  423.   #if OS2_STAT_HACK
  424.   
  425.   #define Stat(fname,bufptr) os2_stat((fname),(bufptr))
  426. --- 86,92 ----
  427.   
  428.   #define OP_BINARY O_BINARY
  429.   
  430.   #if OS2_STAT_HACK
  431.   
  432.   #define Stat(fname,bufptr) os2_stat((fname),(bufptr))
  433. *** e:/perl5.002b3/perl.c    Thu Feb 01 18:40:14 1996
  434. --- perl5/perl.c    Mon Feb 26 01:16:04 1996
  435. ***************
  436. *** 1174,1180 ****
  437.   #endif
  438.   #ifdef OS2
  439.       fputs("OS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n"
  440. !         "Version 5 port Copyright (c) 1994-1995, Andreas Kaiser\n", stdout);
  441.   #endif
  442.   #ifdef atarist
  443.       fputs("atariST series port, ++jrb  bammi@cadence.com\n", stdout);
  444. --- 1174,1180 ----
  445.   #endif
  446.   #ifdef OS2
  447.       fputs("OS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n"
  448. !         "Version 5 port Copyright (c) 1994-1996, Andreas Kaiser\n", stdout);
  449.   #endif
  450.   #ifdef atarist
  451.       fputs("atariST series port, ++jrb  bammi@cadence.com\n", stdout);
  452.