3 * Copyright © 2001 Novell, Inc. All Rights Reserved.
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.
11 * FILENAME : nwperlhost.h
12 * DESCRIPTION : This is modelled on the perlhost.h module of Win32 port.
13 * This is the host that include all the functions for running Perl within a class.
15 * Date : January 2001.
21 #ifndef ___NWPerlHost_H___
22 #define ___NWPerlHost_H___
31 #define LPBYTE unsigned char *
33 #if !defined(PERL_OBJECT)
35 #endif /* PERL_OBJECT */
37 extern int do_spawn2(char *cmd, int exectype);
38 extern int do_aspawn(void *vreally, void **vmark, void **vsp);
39 extern void Perl_init_os_extras(void);
41 #if !defined(PERL_OBJECT)
43 #endif /* PERL_OBJECT */
46 extern int g_do_aspawn(void *vreally, void **vmark, void **vsp);
47 #define do_aspawn g_do_aspawn
48 #endif /* PERL_OBJECT */
54 CPerlHost(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared,
55 struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv,
56 struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO,
57 struct IPerlDir** ppDir, struct IPerlSock** ppSock,
58 struct IPerlProc** ppProc);
59 CPerlHost(const CPerlHost& host);
60 virtual ~CPerlHost(void);
62 static CPerlHost* IPerlMem2Host(struct IPerlMem* piPerl);
63 static CPerlHost* IPerlMemShared2Host(struct IPerlMem* piPerl);
64 static CPerlHost* IPerlMemParse2Host(struct IPerlMem* piPerl);
65 static CPerlHost* IPerlEnv2Host(struct IPerlEnv* piPerl);
66 static CPerlHost* IPerlStdIO2Host(struct IPerlStdIO* piPerl);
67 static CPerlHost* IPerlLIO2Host(struct IPerlLIO* piPerl);
68 static CPerlHost* IPerlDir2Host(struct IPerlDir* piPerl);
69 static CPerlHost* IPerlSock2Host(struct IPerlSock* piPerl);
70 static CPerlHost* IPerlProc2Host(struct IPerlProc* piPerl);
73 inline void* Malloc(size_t size) { return m_pVMem->Malloc(size); };
74 inline void* Realloc(void* ptr, size_t size) { return m_pVMem->Realloc(ptr, size); };
75 inline void Free(void* ptr) { m_pVMem->Free(ptr); };
76 inline void* Calloc(size_t num, size_t size){ return m_pVMem->Calloc(num, size); };
79 inline void* MallocShared(size_t size)
81 return m_pVMemShared->Malloc(size);
83 inline void* ReallocShared(void* ptr, size_t size) { return m_pVMemShared->Realloc(ptr, size); };
84 inline void FreeShared(void* ptr) { m_pVMemShared->Free(ptr); };
85 inline void* CallocShared(size_t num, size_t size)
87 size_t count = num*size;
88 void* lpVoid = MallocShared(count);
94 inline void* MallocParse(size_t size) { return m_pVMemParse->Malloc(size); };
95 inline void* ReallocParse(void* ptr, size_t size) { return m_pVMemParse->Realloc(ptr, size); };
96 inline void FreeParse(void* ptr) { m_pVMemParse->Free(ptr); };
97 inline void* CallocParse(size_t num, size_t size)
99 size_t count = num*size;
100 void* lpVoid = MallocParse(count);
106 char *Getenv(const char *varname);
107 int Putenv(const char *envstring);
108 inline char *Getenv(const char *varname, unsigned long *len)
111 char *e = Getenv(varname);
125 void Exit(int status);
126 void _Exit(int status);
127 int Execl(const char *cmdname, const char *arg0, const char *arg1, const char *arg2, const char *arg3);
128 int Execv(const char *cmdname, const char *const *argv);
129 int Execvp(const char *cmdname, const char *const *argv);
133 struct IPerlMem m_hostperlMem;
134 struct IPerlMem m_hostperlMemShared;
135 struct IPerlMem m_hostperlMemParse;
136 struct IPerlEnv m_hostperlEnv;
137 struct IPerlStdIO m_hostperlStdIO;
138 struct IPerlLIO m_hostperlLIO;
139 struct IPerlDir m_hostperlDir;
140 struct IPerlSock m_hostperlSock;
141 struct IPerlProc m_hostperlProc;
143 struct IPerlMem* m_pHostperlMem;
144 struct IPerlMem* m_pHostperlMemShared;
145 struct IPerlMem* m_pHostperlMemParse;
146 struct IPerlEnv* m_pHostperlEnv;
147 struct IPerlStdIO* m_pHostperlStdIO;
148 struct IPerlLIO* m_pHostperlLIO;
149 struct IPerlDir* m_pHostperlDir;
150 struct IPerlSock* m_pHostperlSock;
151 struct IPerlProc* m_pHostperlProc;
161 #define STRUCT2PTR(x, y) (CPerlHost*)(((LPBYTE)x)-offsetof(CPerlHost, y))
163 inline CPerlHost* IPerlMem2Host(struct IPerlMem* piPerl)
165 return STRUCT2PTR(piPerl, m_hostperlMem);
168 inline CPerlHost* IPerlMemShared2Host(struct IPerlMem* piPerl)
170 return STRUCT2PTR(piPerl, m_hostperlMemShared);
173 inline CPerlHost* IPerlMemParse2Host(struct IPerlMem* piPerl)
175 return STRUCT2PTR(piPerl, m_hostperlMemParse);
178 inline CPerlHost* IPerlEnv2Host(struct IPerlEnv* piPerl)
180 return STRUCT2PTR(piPerl, m_hostperlEnv);
183 inline CPerlHost* IPerlStdIO2Host(struct IPerlStdIO* piPerl)
185 return STRUCT2PTR(piPerl, m_hostperlStdIO);
188 inline CPerlHost* IPerlLIO2Host(struct IPerlLIO* piPerl)
190 return STRUCT2PTR(piPerl, m_hostperlLIO);
193 inline CPerlHost* IPerlDir2Host(struct IPerlDir* piPerl)
195 return STRUCT2PTR(piPerl, m_hostperlDir);
198 inline CPerlHost* IPerlSock2Host(struct IPerlSock* piPerl)
200 return STRUCT2PTR(piPerl, m_hostperlSock);
203 inline CPerlHost* IPerlProc2Host(struct IPerlProc* piPerl)
205 return STRUCT2PTR(piPerl, m_hostperlProc);
210 #define IPERL2HOST(x) IPerlMem2Host(x)
215 PerlMemMalloc(struct IPerlMem* piPerl, size_t size)
217 return IPERL2HOST(piPerl)->Malloc(size);
220 PerlMemRealloc(struct IPerlMem* piPerl, void* ptr, size_t size)
222 return IPERL2HOST(piPerl)->Realloc(ptr, size);
225 PerlMemFree(struct IPerlMem* piPerl, void* ptr)
227 IPERL2HOST(piPerl)->Free(ptr);
230 PerlMemCalloc(struct IPerlMem* piPerl, size_t num, size_t size)
232 return IPERL2HOST(piPerl)->Calloc(num, size);
236 struct IPerlMem perlMem =
245 #define IPERL2HOST(x) IPerlMemShared2Host(x)
249 PerlMemSharedMalloc(struct IPerlMem* piPerl, size_t size)
251 return IPERL2HOST(piPerl)->MallocShared(size);
254 PerlMemSharedRealloc(struct IPerlMem* piPerl, void* ptr, size_t size)
256 return IPERL2HOST(piPerl)->ReallocShared(ptr, size);
259 PerlMemSharedFree(struct IPerlMem* piPerl, void* ptr)
261 IPERL2HOST(piPerl)->FreeShared(ptr);
264 PerlMemSharedCalloc(struct IPerlMem* piPerl, size_t num, size_t size)
266 return IPERL2HOST(piPerl)->CallocShared(num, size);
270 struct IPerlMem perlMemShared =
273 PerlMemSharedRealloc,
279 #define IPERL2HOST(x) IPerlMemParse2Host(x)
283 PerlMemParseMalloc(struct IPerlMem* piPerl, size_t size)
285 return IPERL2HOST(piPerl)->MallocParse(size);
288 PerlMemParseRealloc(struct IPerlMem* piPerl, void* ptr, size_t size)
290 return IPERL2HOST(piPerl)->ReallocParse(ptr, size);
293 PerlMemParseFree(struct IPerlMem* piPerl, void* ptr)
295 IPERL2HOST(piPerl)->FreeParse(ptr);
298 PerlMemParseCalloc(struct IPerlMem* piPerl, size_t num, size_t size)
300 return IPERL2HOST(piPerl)->CallocParse(num, size);
304 struct IPerlMem perlMemParse =
314 #define IPERL2HOST(x) IPerlEnv2Host(x)
318 PerlEnvGetenv(struct IPerlEnv* piPerl, const char *varname)
320 return IPERL2HOST(piPerl)->Getenv(varname);
324 PerlEnvPutenv(struct IPerlEnv* piPerl, const char *envstring)
326 return IPERL2HOST(piPerl)->Putenv(envstring);
330 PerlEnvGetenv_len(struct IPerlEnv* piPerl, const char* varname, unsigned long* len)
332 return IPERL2HOST(piPerl)->Getenv(varname, len);
336 PerlEnvUname(struct IPerlEnv* piPerl, struct utsname *name)
338 return nw_uname(name);
342 PerlEnvClearenv(struct IPerlEnv* piPerl)
344 // If removed, compilation fails while compiling CGI2Perl.
348 PerlEnvGetChildenv(struct IPerlEnv* piPerl)
350 // If removed, compilation fails while compiling CGI2Perl.
355 PerlEnvFreeChildenv(struct IPerlEnv* piPerl, void* childEnv)
357 // If removed, compilation fails while compiling CGI2Perl.
361 PerlEnvGetChilddir(struct IPerlEnv* piPerl)
363 // If removed, compilation fails while compiling CGI2Perl.
368 PerlEnvFreeChilddir(struct IPerlEnv* piPerl, char* childDir)
370 // If removed, compilation fails while compiling CGI2Perl.
373 struct IPerlEnv perlEnv =
387 #define IPERL2HOST(x) IPerlStdIO2Host(x)
391 PerlStdIOStdin(struct IPerlStdIO* piPerl)
393 return (PerlIO*)nw_stdin();
397 PerlStdIOStdout(struct IPerlStdIO* piPerl)
399 return (PerlIO*)nw_stdout();
403 PerlStdIOStderr(struct IPerlStdIO* piPerl)
405 return (PerlIO*)nw_stderr();
409 PerlStdIOOpen(struct IPerlStdIO* piPerl, const char *path, const char *mode)
411 return (PerlIO*)nw_fopen(path, mode);
415 PerlStdIOClose(struct IPerlStdIO* piPerl, PerlIO* pf)
417 return nw_fclose(((FILE*)pf));
421 PerlStdIOEof(struct IPerlStdIO* piPerl, PerlIO* pf)
423 return nw_feof((FILE*)pf);
427 PerlStdIOError(struct IPerlStdIO* piPerl, PerlIO* pf)
429 return nw_ferror((FILE*)pf);
433 PerlStdIOClearerr(struct IPerlStdIO* piPerl, PerlIO* pf)
435 nw_clearerr((FILE*)pf);
439 PerlStdIOGetc(struct IPerlStdIO* piPerl, PerlIO* pf)
441 return nw_getc((FILE*)pf);
445 PerlStdIOGetBase(struct IPerlStdIO* piPerl, PerlIO* pf)
456 PerlStdIOGetBufsiz(struct IPerlStdIO* piPerl, PerlIO* pf)
460 return FILE_bufsiz(f);
467 PerlStdIOGetCnt(struct IPerlStdIO* piPerl, PerlIO* pf)
478 PerlStdIOGetPtr(struct IPerlStdIO* piPerl, PerlIO* pf)
489 PerlStdIOGets(struct IPerlStdIO* piPerl, PerlIO* pf, char* s, int n)
491 return nw_fgets(s, n, (FILE*)pf);
495 PerlStdIOPutc(struct IPerlStdIO* piPerl, PerlIO* pf, int c)
497 return nw_fputc(c, (FILE*)pf);
501 PerlStdIOPuts(struct IPerlStdIO* piPerl, PerlIO* pf, const char *s)
503 return nw_fputs(s, (FILE*)pf);
507 PerlStdIOFlush(struct IPerlStdIO* piPerl, PerlIO* pf)
509 return nw_fflush((FILE*)pf);
513 PerlStdIOUngetc(struct IPerlStdIO* piPerl, int c, PerlIO* pf) //(J)
515 return nw_ungetc(c, (FILE*)pf);
519 PerlStdIOFileno(struct IPerlStdIO* piPerl, PerlIO* pf)
521 return nw_fileno((FILE*)pf);
525 PerlStdIOFdopen(struct IPerlStdIO* piPerl, int fd, const char *mode)
527 return (PerlIO*)nw_fdopen(fd, mode);
531 PerlStdIOReopen(struct IPerlStdIO* piPerl, const char*path, const char*mode, PerlIO* pf)
533 return (PerlIO*)nw_freopen(path, mode, (FILE*)pf);
537 PerlStdIORead(struct IPerlStdIO* piPerl, void *buffer, Size_t size, Size_t dummy, PerlIO* pf)
539 return nw_fread(buffer, 1, size, (FILE*)pf);
543 PerlStdIOWrite(struct IPerlStdIO* piPerl, const void *buffer, Size_t size, Size_t dummy, PerlIO* pf)
544 //PerlStdIOWrite(struct IPerlStdIO* piPerl, PerlIO* pf, const void *buffer, Size_t size)
546 return nw_fwrite(buffer, 1, size, (FILE*)pf);
550 PerlStdIOSetBuf(struct IPerlStdIO* piPerl, PerlIO* pf, char* buffer)
552 nw_setbuf((FILE*)pf, buffer);
556 PerlStdIOSetVBuf(struct IPerlStdIO* piPerl, PerlIO* pf, char* buffer, int type, Size_t size)
558 return nw_setvbuf((FILE*)pf, buffer, type, size);
562 PerlStdIOSetCnt(struct IPerlStdIO* piPerl, PerlIO* pf, int n)
564 #ifdef STDIO_CNT_LVALUE
571 PerlStdIOSetPtrCnt(struct IPerlStdIO* piPerl, PerlIO* pf, char * ptr, int n)
573 #ifdef STDIO_PTR_LVALUE
581 PerlStdIOSetlinebuf(struct IPerlStdIO* piPerl, PerlIO* pf)
583 nw_setvbuf((FILE*)pf, NULL, _IOLBF, 0);
587 PerlStdIOPrintf(struct IPerlStdIO* piPerl, PerlIO* pf, const char *format,...)
590 va_start(arglist, format);
591 return nw_vfprintf((FILE*)pf, format, arglist);
595 PerlStdIOVprintf(struct IPerlStdIO* piPerl, PerlIO* pf, const char *format, va_list arglist)
597 return nw_vfprintf((FILE*)pf, format, arglist);
601 PerlStdIOTell(struct IPerlStdIO* piPerl, PerlIO* pf)
603 return nw_ftell((FILE*)pf);
607 PerlStdIOSeek(struct IPerlStdIO* piPerl, PerlIO* pf, off_t offset, int origin)
609 return nw_fseek((FILE*)pf, offset, origin);
613 PerlStdIORewind(struct IPerlStdIO* piPerl, PerlIO* pf)
615 nw_rewind((FILE*)pf);
619 PerlStdIOTmpfile(struct IPerlStdIO* piPerl)
621 return (PerlIO*)nw_tmpfile();
625 PerlStdIOGetpos(struct IPerlStdIO* piPerl, PerlIO* pf, Fpos_t *p)
627 return nw_fgetpos((FILE*)pf, p);
631 PerlStdIOSetpos(struct IPerlStdIO* piPerl, PerlIO* pf, const Fpos_t *p)
633 return nw_fsetpos((FILE*)pf, p);
637 PerlStdIOInit(struct IPerlStdIO* piPerl)
639 // If removed, compilation error occurs.
643 PerlStdIOInitOSExtras(struct IPerlStdIO* piPerl)
645 Perl_init_os_extras();
650 PerlStdIOOpenOSfhandle(struct IPerlStdIO* piPerl, long osfhandle, int flags)
652 return nw_open_osfhandle(osfhandle, flags);
656 PerlStdIOGetOSfhandle(struct IPerlStdIO* piPerl, int filenum)
658 return nw_get_osfhandle(filenum);
662 PerlStdIOFdupopen(struct IPerlStdIO* piPerl, PerlIO* pf)
667 int fileno = nw_dup(nw_fileno((FILE*)pf));
669 /* open the file in the same mode */
670 if(((FILE*)pf)->_flag & _IOREAD) {
674 else if(((FILE*)pf)->_flag & _IOWRT) {
678 else if(((FILE*)pf)->_flag & _IORW) {
684 /* it appears that the binmode is attached to the
685 * file descriptor so binmode files will be handled
688 pfdup = (PerlIO*)nw_fdopen(fileno, mode);
690 /* move the file pointer to the same position */
691 if (!fgetpos((FILE*)pf, &pos)) {
692 fsetpos((FILE*)pfdup, &pos);
697 struct IPerlStdIO perlStdIO =
736 PerlStdIOInitOSExtras,
742 #define IPERL2HOST(x) IPerlLIO2Host(x)
746 PerlLIOAccess(struct IPerlLIO* piPerl, const char *path, int mode)
748 return nw_access(path, mode);
752 PerlLIOChmod(struct IPerlLIO* piPerl, const char *filename, int pmode)
754 return nw_chmod(filename, pmode);
758 PerlLIOChown(struct IPerlLIO* piPerl, const char *filename, uid_t owner, gid_t group)
760 // If removed, compilation error occurs.
765 PerlLIOChsize(struct IPerlLIO* piPerl, int handle, long size)
767 return (nw_chsize(handle,size));
771 PerlLIOClose(struct IPerlLIO* piPerl, int handle)
773 return nw_close(handle);
777 PerlLIODup(struct IPerlLIO* piPerl, int handle)
779 return nw_dup(handle);
783 PerlLIODup2(struct IPerlLIO* piPerl, int handle1, int handle2)
785 return nw_dup2(handle1, handle2);
789 PerlLIOFlock(struct IPerlLIO* piPerl, int fd, int oper)
791 //On NetWare simulate flock by locking a range on the file
792 return nw_flock(fd, oper);
796 PerlLIOFileStat(struct IPerlLIO* piPerl, int handle, struct stat *buffer)
798 return fstat(handle, buffer);
802 PerlLIOIOCtl(struct IPerlLIO* piPerl, int i, unsigned int u, char *data)
804 // If removed, compilation error occurs.
809 PerlLIOIsatty(struct IPerlLIO* piPerl, int fd)
811 return nw_isatty(fd);
815 PerlLIOLink(struct IPerlLIO* piPerl, const char*oldname, const char *newname)
817 return nw_link(oldname, newname);
821 PerlLIOLseek(struct IPerlLIO* piPerl, int handle, long offset, int origin)
823 return nw_lseek(handle, offset, origin);
827 PerlLIOLstat(struct IPerlLIO* piPerl, const char *path, struct stat *buffer)
829 return nw_stat(path, buffer);
833 PerlLIOMktemp(struct IPerlLIO* piPerl, char *Template)
835 return(nw_mktemp(Template));
839 PerlLIOOpen(struct IPerlLIO* piPerl, const char *filename, int oflag)
841 return nw_open(filename, oflag);
845 PerlLIOOpen3(struct IPerlLIO* piPerl, const char *filename, int oflag, int pmode)
847 return nw_open(filename, oflag, pmode);
851 PerlLIORead(struct IPerlLIO* piPerl, int handle, void *buffer, unsigned int count)
853 return nw_read(handle, buffer, count);
857 PerlLIORename(struct IPerlLIO* piPerl, const char *OldFileName, const char *newname)
859 return nw_rename(OldFileName, newname);
863 PerlLIOSetmode(struct IPerlLIO* piPerl, FILE *fp, int mode)
865 return nw_setmode(fp, mode);
869 PerlLIONameStat(struct IPerlLIO* piPerl, const char *path, struct stat *buffer)
871 return nw_stat(path, buffer);
875 PerlLIOTmpnam(struct IPerlLIO* piPerl, char *string)
877 return tmpnam(string);
881 PerlLIOUmask(struct IPerlLIO* piPerl, int pmode)
887 PerlLIOUnlink(struct IPerlLIO* piPerl, const char *filename)
889 return nw_unlink(filename);
893 PerlLIOUtime(struct IPerlLIO* piPerl, const char *filename, struct utimbuf *times)
895 return nw_utime(filename, times);
899 PerlLIOWrite(struct IPerlLIO* piPerl, int handle, const void *buffer, unsigned int count)
901 return nw_write(handle, buffer, count);
904 struct IPerlLIO perlLIO =
936 #define IPERL2HOST(x) IPerlDir2Host(x)
940 PerlDirMakedir(struct IPerlDir* piPerl, const char *dirname, int mode)
942 return mkdir(dirname);
946 PerlDirChdir(struct IPerlDir* piPerl, const char *dirname)
948 return nw_chdir(dirname);
952 PerlDirRmdir(struct IPerlDir* piPerl, const char *dirname)
954 return nw_rmdir(dirname);
958 PerlDirClose(struct IPerlDir* piPerl, DIR *dirp)
960 return nw_closedir(dirp);
964 PerlDirOpen(struct IPerlDir* piPerl, const char *filename)
966 return nw_opendir(filename);
970 PerlDirRead(struct IPerlDir* piPerl, DIR *dirp)
972 return nw_readdir(dirp);
976 PerlDirRewind(struct IPerlDir* piPerl, DIR *dirp)
982 PerlDirSeek(struct IPerlDir* piPerl, DIR *dirp, long loc)
984 nw_seekdir(dirp, loc);
988 PerlDirTell(struct IPerlDir* piPerl, DIR *dirp)
990 return nw_telldir(dirp);
993 struct IPerlDir perlDir =
1009 PerlSockHtonl(struct IPerlSock* piPerl, u_long hostlong)
1011 return(nw_htonl(hostlong));
1015 PerlSockHtons(struct IPerlSock* piPerl, u_short hostshort)
1017 return(nw_htons(hostshort));
1021 PerlSockNtohl(struct IPerlSock* piPerl, u_long netlong)
1023 return nw_ntohl(netlong);
1027 PerlSockNtohs(struct IPerlSock* piPerl, u_short netshort)
1029 return nw_ntohs(netshort);
1032 SOCKET PerlSockAccept(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* addr, int* addrlen)
1034 return nw_accept(s, addr, addrlen);
1038 PerlSockBind(struct IPerlSock* piPerl, SOCKET s, const struct sockaddr* name, int namelen)
1040 return nw_bind(s, name, namelen);
1044 PerlSockConnect(struct IPerlSock* piPerl, SOCKET s, const struct sockaddr* name, int namelen)
1046 return nw_connect(s, name, namelen);
1050 PerlSockEndhostent(struct IPerlSock* piPerl)
1056 PerlSockEndnetent(struct IPerlSock* piPerl)
1062 PerlSockEndprotoent(struct IPerlSock* piPerl)
1068 PerlSockEndservent(struct IPerlSock* piPerl)
1074 PerlSockGethostbyaddr(struct IPerlSock* piPerl, const char* addr, int len, int type)
1076 return(nw_gethostbyaddr(addr,len,type));
1080 PerlSockGethostbyname(struct IPerlSock* piPerl, const char* name)
1082 return nw_gethostbyname(name);
1086 PerlSockGethostent(struct IPerlSock* piPerl)
1088 return(nw_gethostent());
1092 PerlSockGethostname(struct IPerlSock* piPerl, char* name, int namelen)
1094 return nw_gethostname(name,namelen);
1098 PerlSockGetnetbyaddr(struct IPerlSock* piPerl, long net, int type)
1100 return nw_getnetbyaddr(net, type);
1104 PerlSockGetnetbyname(struct IPerlSock* piPerl, const char *name)
1106 return nw_getnetbyname((char*)name);
1110 PerlSockGetnetent(struct IPerlSock* piPerl)
1112 return nw_getnetent();
1115 int PerlSockGetpeername(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* name, int* namelen)
1117 return nw_getpeername(s, name, namelen);
1121 PerlSockGetprotobyname(struct IPerlSock* piPerl, const char* name)
1123 return nw_getprotobyname(name);
1127 PerlSockGetprotobynumber(struct IPerlSock* piPerl, int number)
1129 return nw_getprotobynumber(number);
1133 PerlSockGetprotoent(struct IPerlSock* piPerl)
1135 return nw_getprotoent();
1139 PerlSockGetservbyname(struct IPerlSock* piPerl, const char* name, const char* proto)
1141 return nw_getservbyname((char*)name, (char*)proto);
1145 PerlSockGetservbyport(struct IPerlSock* piPerl, int port, const char* proto)
1147 return nw_getservbyport(port, proto);
1151 PerlSockGetservent(struct IPerlSock* piPerl)
1153 return nw_getservent();
1157 PerlSockGetsockname(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* name, int* namelen)
1159 return nw_getsockname(s, name, namelen);
1163 PerlSockGetsockopt(struct IPerlSock* piPerl, SOCKET s, int level, int optname, char* optval, int* optlen)
1165 return nw_getsockopt(s, level, optname, optval, optlen);
1169 PerlSockInetAddr(struct IPerlSock* piPerl, const char* cp)
1171 return(nw_inet_addr(cp));
1175 PerlSockInetNtoa(struct IPerlSock* piPerl, struct in_addr in)
1177 return nw_inet_ntoa(in);
1181 PerlSockListen(struct IPerlSock* piPerl, SOCKET s, int backlog)
1183 return (nw_listen(s, backlog));
1187 PerlSockRecv(struct IPerlSock* piPerl, SOCKET s, char* buffer, int len, int flags)
1189 return (nw_recv(s, buffer, len, flags));
1193 PerlSockRecvfrom(struct IPerlSock* piPerl, SOCKET s, char* buffer, int len, int flags, struct sockaddr* from, int* fromlen)
1195 return nw_recvfrom(s, buffer, len, flags, from, fromlen);
1199 PerlSockSelect(struct IPerlSock* piPerl, int nfds, char* readfds, char* writefds, char* exceptfds, const struct timeval* timeout)
1201 return nw_select(nfds, (fd_set*) readfds, (fd_set*) writefds, (fd_set*) exceptfds, timeout);
1205 PerlSockSend(struct IPerlSock* piPerl, SOCKET s, const char* buffer, int len, int flags)
1207 return (nw_send(s, buffer, len, flags));
1211 PerlSockSendto(struct IPerlSock* piPerl, SOCKET s, const char* buffer, int len, int flags, const struct sockaddr* to, int tolen)
1213 return(nw_sendto(s, buffer, len, flags, to, tolen));
1217 PerlSockSethostent(struct IPerlSock* piPerl, int stayopen)
1219 nw_sethostent(stayopen);
1223 PerlSockSetnetent(struct IPerlSock* piPerl, int stayopen)
1225 nw_setnetent(stayopen);
1229 PerlSockSetprotoent(struct IPerlSock* piPerl, int stayopen)
1231 nw_setprotoent(stayopen);
1235 PerlSockSetservent(struct IPerlSock* piPerl, int stayopen)
1237 nw_setservent(stayopen);
1241 PerlSockSetsockopt(struct IPerlSock* piPerl, SOCKET s, int level, int optname, const char* optval, int optlen)
1243 return nw_setsockopt(s, level, optname, optval, optlen);
1247 PerlSockShutdown(struct IPerlSock* piPerl, SOCKET s, int how)
1249 return nw_shutdown(s, how);
1253 PerlSockSocket(struct IPerlSock* piPerl, int af, int type, int protocol)
1255 return nw_socket(af, type, protocol);
1259 PerlSockSocketpair(struct IPerlSock* piPerl, int domain, int type, int protocol, int* fds)
1262 Perl_croak(aTHX_ "socketpair not implemented!\n");
1267 PerlSockIoctlsocket(struct IPerlSock* piPerl, SOCKET s, long cmd, u_long *argp)
1270 Perl_croak(aTHX_ "ioctlsocket not implemented!\n");
1274 struct IPerlSock perlSock =
1285 PerlSockEndprotoent,
1287 PerlSockGethostname,
1288 PerlSockGetpeername,
1289 PerlSockGethostbyaddr,
1290 PerlSockGethostbyname,
1292 PerlSockGetnetbyaddr,
1293 PerlSockGetnetbyname,
1295 PerlSockGetprotobyname,
1296 PerlSockGetprotobynumber,
1297 PerlSockGetprotoent,
1298 PerlSockGetservbyname,
1299 PerlSockGetservbyport,
1301 PerlSockGetsockname,
1313 PerlSockSetprotoent,
1319 //Following commented by sgp bcos of comiplation error too many initializers (E279)
1320 // PerlSockClosesocket,
1326 #define EXECF_EXEC 1
1327 #define EXECF_SPAWN 2
1330 PerlProcAbort(struct IPerlProc* piPerl)
1336 PerlProcCrypt(struct IPerlProc* piPerl, const char* clear, const char* salt)
1338 return nw_crypt(clear, salt);
1342 PerlProcExit(struct IPerlProc* piPerl, int status)
1351 PerlProc_Exit(struct IPerlProc* piPerl, int status)
1360 PerlProcExecl(struct IPerlProc* piPerl, const char *cmdname, const char *arg0, const char *arg1, const char *arg2, const char *arg3)
1362 // If removed, compilation error occurs.
1367 PerlProcExecv(struct IPerlProc* piPerl, const char *cmdname, const char *const *argv)
1369 return nw_execvp((char *)cmdname, (char **)argv);
1373 PerlProcExecvp(struct IPerlProc* piPerl, const char *cmdname, const char *const *argv)
1375 return nw_execvp((char *)cmdname, (char **)argv);
1379 PerlProcGetuid(struct IPerlProc* piPerl)
1381 // If removed, compilation error occurs.
1386 PerlProcGeteuid(struct IPerlProc* piPerl)
1388 // If removed, compilation error occurs.
1393 PerlProcGetgid(struct IPerlProc* piPerl)
1395 // If removed, compilation error occurs.
1400 PerlProcGetegid(struct IPerlProc* piPerl)
1402 // If removed, compilation error occurs.
1407 PerlProcGetlogin(struct IPerlProc* piPerl)
1409 // If removed, compilation error occurs.
1414 PerlProcKill(struct IPerlProc* piPerl, int pid, int sig)
1416 return nw_kill(pid, sig);
1420 PerlProcKillpg(struct IPerlProc* piPerl, int pid, int sig)
1423 Perl_croak(aTHX_ "killpg not implemented!\n");
1428 PerlProcPauseProc(struct IPerlProc* piPerl)
1430 return nw_sleep((32767L << 16) + 32767);
1434 PerlProcPopen(struct IPerlProc* piPerl, const char *command, const char *mode)
1437 PERL_FLUSHALL_FOR_CHILD;
1439 return (PerlIO*)nw_Popen((char *)command, (char *)mode, (int *)errno);
1443 PerlProcPclose(struct IPerlProc* piPerl, PerlIO *stream)
1445 return nw_Pclose((FILE*)stream, (int *)errno);
1449 PerlProcPipe(struct IPerlProc* piPerl, int *phandles)
1451 return nw_Pipe((int *)phandles, (int *)errno);
1455 PerlProcSetuid(struct IPerlProc* piPerl, uid_t u)
1457 // If removed, compilation error occurs.
1462 PerlProcSetgid(struct IPerlProc* piPerl, gid_t g)
1464 // If removed, compilation error occurs.
1469 PerlProcSleep(struct IPerlProc* piPerl, unsigned int s)
1475 PerlProcTimes(struct IPerlProc* piPerl, struct tms *timebuf)
1477 return nw_times(timebuf);
1481 PerlProcWait(struct IPerlProc* piPerl, int *status)
1483 return nw_wait(status);
1487 PerlProcWaitpid(struct IPerlProc* piPerl, int pid, int *status, int flags)
1489 return nw_waitpid(pid, status, flags);
1493 PerlProcSignal(struct IPerlProc* piPerl, int sig, Sighandler_t subcode)
1495 // If removed, compilation error occurs.
1500 PerlProcFork(struct IPerlProc* piPerl)
1502 // If removed, compilation error occurs.
1507 PerlProcGetpid(struct IPerlProc* piPerl)
1513 PerlProcDoCmd(struct IPerlProc* piPerl, char *cmd)
1515 do_spawn2(cmd, EXECF_EXEC);
1520 PerlProcSpawn(struct IPerlProc* piPerl, char* cmds)
1522 return do_spawn2(cmds, EXECF_SPAWN);
1526 PerlProcSpawnvp(struct IPerlProc* piPerl, int mode, const char *cmdname, const char *const *argv)
1528 return nw_spawnvp(mode, (char *)cmdname, (char **)argv);
1532 PerlProcASpawn(struct IPerlProc* piPerl, void *vreally, void **vmark, void **vsp)
1534 return do_aspawn(vreally, vmark, vsp);
1537 struct IPerlProc perlProc =
1566 /* PerlProcDynaLoader,
1579 CPerlHost::CPerlHost(void)
1581 m_pVMem = new VMem();
1582 m_pVMemShared = new VMem();
1583 m_pVMemParse = new VMem();
1585 memcpy(&m_hostperlMem, &perlMem, sizeof(perlMem));
1586 memcpy(&m_hostperlMemShared, &perlMemShared, sizeof(perlMemShared));
1587 memcpy(&m_hostperlMemParse, &perlMemParse, sizeof(perlMemParse));
1588 memcpy(&m_hostperlEnv, &perlEnv, sizeof(perlEnv));
1589 memcpy(&m_hostperlStdIO, &perlStdIO, sizeof(perlStdIO));
1590 memcpy(&m_hostperlLIO, &perlLIO, sizeof(perlLIO));
1591 memcpy(&m_hostperlDir, &perlDir, sizeof(perlDir));
1592 memcpy(&m_hostperlSock, &perlSock, sizeof(perlSock));
1593 memcpy(&m_hostperlProc, &perlProc, sizeof(perlProc));
1595 m_pHostperlMem = &m_hostperlMem;
1596 m_pHostperlMemShared = &m_hostperlMemShared;
1597 m_pHostperlMemParse = &m_hostperlMemParse;
1598 m_pHostperlEnv = &m_hostperlEnv;
1599 m_pHostperlStdIO = &m_hostperlStdIO;
1600 m_pHostperlLIO = &m_hostperlLIO;
1601 m_pHostperlDir = &m_hostperlDir;
1602 m_pHostperlSock = &m_hostperlSock;
1603 m_pHostperlProc = &m_hostperlProc;
1606 #define SETUPEXCHANGE(xptr, iptr, table) \
1617 CPerlHost::CPerlHost(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared,
1618 struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv,
1619 struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO,
1620 struct IPerlDir** ppDir, struct IPerlSock** ppSock,
1621 struct IPerlProc** ppProc)
1623 m_pVMem = new VMem();
1624 m_pVMemShared = new VMem();
1625 m_pVMemParse = new VMem();
1627 memcpy(&m_hostperlMem, &perlMem, sizeof(perlMem));
1628 memcpy(&m_hostperlMemShared, &perlMemShared, sizeof(perlMemShared));
1629 memcpy(&m_hostperlMemParse, &perlMemParse, sizeof(perlMemParse));
1630 memcpy(&m_hostperlEnv, &perlEnv, sizeof(perlEnv));
1631 memcpy(&m_hostperlStdIO, &perlStdIO, sizeof(perlStdIO));
1632 memcpy(&m_hostperlLIO, &perlLIO, sizeof(perlLIO));
1633 memcpy(&m_hostperlDir, &perlDir, sizeof(perlDir));
1634 memcpy(&m_hostperlSock, &perlSock, sizeof(perlSock));
1635 memcpy(&m_hostperlProc, &perlProc, sizeof(perlProc));
1637 SETUPEXCHANGE(ppMem, m_pHostperlMem, m_hostperlMem);
1638 SETUPEXCHANGE(ppMemShared, m_pHostperlMemShared, m_hostperlMemShared);
1639 SETUPEXCHANGE(ppMemParse, m_pHostperlMemParse, m_hostperlMemParse);
1640 SETUPEXCHANGE(ppEnv, m_pHostperlEnv, m_hostperlEnv);
1641 SETUPEXCHANGE(ppStdIO, m_pHostperlStdIO, m_hostperlStdIO);
1642 SETUPEXCHANGE(ppLIO, m_pHostperlLIO, m_hostperlLIO);
1643 SETUPEXCHANGE(ppDir, m_pHostperlDir, m_hostperlDir);
1644 SETUPEXCHANGE(ppSock, m_pHostperlSock, m_hostperlSock);
1645 SETUPEXCHANGE(ppProc, m_pHostperlProc, m_hostperlProc);
1647 #undef SETUPEXCHANGE
1649 CPerlHost::CPerlHost(const CPerlHost& host)
1651 memcpy(&m_hostperlMem, &perlMem, sizeof(perlMem));
1652 memcpy(&m_hostperlMemShared, &perlMemShared, sizeof(perlMemShared));
1653 memcpy(&m_hostperlMemParse, &perlMemParse, sizeof(perlMemParse));
1654 memcpy(&m_hostperlEnv, &perlEnv, sizeof(perlEnv));
1655 memcpy(&m_hostperlStdIO, &perlStdIO, sizeof(perlStdIO));
1656 memcpy(&m_hostperlLIO, &perlLIO, sizeof(perlLIO));
1657 memcpy(&m_hostperlDir, &perlDir, sizeof(perlDir));
1658 memcpy(&m_hostperlSock, &perlSock, sizeof(perlSock));
1659 memcpy(&m_hostperlProc, &perlProc, sizeof(perlProc));
1661 m_pHostperlMem = &m_hostperlMem;
1662 m_pHostperlMemShared = &m_hostperlMemShared;
1663 m_pHostperlMemParse = &m_hostperlMemParse;
1664 m_pHostperlEnv = &m_hostperlEnv;
1665 m_pHostperlStdIO = &m_hostperlStdIO;
1666 m_pHostperlLIO = &m_hostperlLIO;
1667 m_pHostperlDir = &m_hostperlDir;
1668 m_pHostperlSock = &m_hostperlSock;
1669 m_pHostperlProc = &m_hostperlProc;
1673 CPerlHost::~CPerlHost(void)
1675 if ( m_pVMemParse ) delete m_pVMemParse;
1676 if ( m_pVMemShared ) delete m_pVMemShared;
1677 if ( m_pVMem ) delete m_pVMem;
1681 CPerlHost::Getenv(const char *varname)
1683 // getenv is always present. In old CLIB, it is implemented
1684 // to always return NULL. With java loaded on NW411, it will
1685 // return values set by envset. Is correctly implemented by
1688 return getenv(varname);
1692 CPerlHost::Putenv(const char *envstring)
1694 return(putenv(envstring));
1698 #endif /* ___NWPerlHost_H___ */