1515#include < signal.h>
1616#include < wchar.h>
1717#include " iperlsys.h"
18+
19+ #include " vmem.h"
20+
21+ #define CRT_ALLOC_BASE
1822#include " vmem.h"
23+ #undef CRT_ALLOC_BASE
24+
1925#include " vdir.h"
2026
2127#ifndef WC_NO_BEST_FIT_CHARS
@@ -38,6 +44,7 @@ class CPerlHost
3844 const struct IPerlProc ** ppProc);
3945 CPerlHost (CPerlHost& host);
4046 ~CPerlHost (void );
47+ VMEM_H_NEW_OP;
4148
4249 static CPerlHost* IPerlMem2Host (const struct IPerlMem ** piPerl);
4350 static CPerlHost* IPerlMemShared2Host (const struct IPerlMem ** piPerl);
@@ -56,20 +63,20 @@ class CPerlHost
5663
5764/* IPerlMem */
5865 /* Locks provided but should be unnecessary as this is private pool */
59- inline void * Malloc (size_t size) { return m_pVMem-> Malloc (size); };
60- inline void * Realloc (void * ptr, size_t size) { return m_pVMem-> Realloc (ptr, size); };
61- inline void Free (void * ptr) { m_pVMem-> Free (ptr); };
66+ inline void * Malloc (size_t size) { return m_VMem. Malloc (size); };
67+ inline void * Realloc (void * ptr, size_t size) { return m_VMem. Realloc (ptr, size); };
68+ inline void Free (void * ptr) { m_VMem. Free (ptr); };
6269 inline void * Calloc (size_t num, size_t size)
6370 {
6471 size_t count = num*size;
6572 void * lpVoid = Malloc (count);
6673 if (lpVoid)
67- ZeroMemory (lpVoid, count);
74+ lpVoid = memset (lpVoid, 0 , count);
6875 return lpVoid;
6976 };
70- inline void GetLock (void ) { m_pVMem-> GetLock (); };
71- inline void FreeLock (void ) { m_pVMem-> FreeLock (); };
72- inline int IsLocked (void ) { return m_pVMem-> IsLocked (); };
77+ inline void GetLock (void ) { m_VMem. GetLock (); };
78+ inline void FreeLock (void ) { m_VMem. FreeLock (); };
79+ inline int IsLocked (void ) { return m_VMem. IsLocked (); };
7380
7481/* IPerlMemShared */
7582 /* Locks used to serialize access to the pool */
@@ -103,7 +110,7 @@ class CPerlHost
103110 size_t count = num*size;
104111 void * lpVoid = MallocShared (count);
105112 if (lpVoid)
106- ZeroMemory (lpVoid, count);
113+ lpVoid = memset (lpVoid, 0 , count);
107114 return lpVoid;
108115 };
109116
@@ -122,7 +129,7 @@ class CPerlHost
122129 size_t count = num*size;
123130 void * lpVoid = MallocParse (count);
124131 if (lpVoid)
125- ZeroMemory (lpVoid, count);
132+ lpVoid = memset (lpVoid, 0 , count);
126133 return lpVoid;
127134 };
128135
@@ -137,7 +144,7 @@ class CPerlHost
137144 *len = strlen (e);
138145 return e;
139146 }
140- void * CreateChildEnv (void ) { return CreateLocalEnvironmentStrings (*m_pvDir ); };
147+ void * CreateChildEnv (void ) { return CreateLocalEnvironmentStrings (m_vDir ); };
141148 void FreeChildEnv (void * pStr) { FreeLocalEnvironmentStrings ((char *)pStr); };
142149 char * GetChildDir (void );
143150 void FreeChildDir (char * pStr);
@@ -166,7 +173,7 @@ class CPerlHost
166173public:
167174
168175/* IPerlDIR */
169- virtual int Chdir (const char *dirname);
176+ int Chdir (const char *dirname);
170177
171178/* IPerllProc */
172179 void Abort (void );
@@ -176,9 +183,10 @@ class CPerlHost
176183 int Execv (const char *cmdname, const char *const *argv);
177184 int Execvp (const char *cmdname, const char *const *argv);
178185
186+ inline VMem* GetMem (void ) { return (VMem* )&m_VMem; };
179187 inline VMem* GetMemShared (void ) { m_pVMemShared->AddRef (); return m_pVMemShared; };
180188 inline VMem* GetMemParse (void ) { m_pVMemParse->AddRef (); return m_pVMemParse; };
181- inline VDir* GetDir (void ) { return m_pvDir ; };
189+ inline VDir* GetDir (void ) { return &m_vDir ; };
182190
183191public:
184192
@@ -192,22 +200,23 @@ class CPerlHost
192200 const struct IPerlSock * m_pHostperlSock;
193201 const struct IPerlProc * m_pHostperlProc;
194202
195- inline char * MapPathA (const char *pInName) { return m_pvDir->MapPathA (pInName); };
196- inline WCHAR* MapPathW (const WCHAR *pInName) { return m_pvDir->MapPathW (pInName); };
203+ inline char * MapPathA (const char *pInName) { return m_vDir.MapPathA (pInName); };
204+ inline WCHAR* MapPathW (const WCHAR *pInName) { return m_vDir.MapPathW (pInName); };
205+ inline operator VDir* () { return GetDir (); };
197206protected:
198-
199- VDir* m_pvDir;
200- VMem* m_pVMem;
207+ VMemNL m_VMem;
201208 VMem* m_pVMemShared;
202209 VMem* m_pVMemParse;
203210
204- DWORD m_dwEnvCount;
205211 LPSTR* m_lppEnvList;
212+ DWORD m_dwEnvCount;
206213 BOOL m_bTopLevel; // is this a toplevel host?
207214 static long num_hosts;
208215public:
209216 inline int LastHost (void ) { return num_hosts == 1L ; };
210217 struct interpreter *host_perl;
218+ protected:
219+ VDir m_vDir;
211220};
212221
213222long CPerlHost::num_hosts = 0L ;
@@ -2110,12 +2119,11 @@ CPerlHost::CPerlHost(void)
21102119{
21112120 /* Construct a host from scratch */
21122121 InterlockedIncrement (&num_hosts);
2113- m_pvDir = new VDir ();
2114- m_pVMem = new VMem ();
2122+
21152123 m_pVMemShared = new VMem ();
21162124 m_pVMemParse = new VMem ();
21172125
2118- m_pvDir-> Init (NULL , m_pVMem );
2126+ m_vDir. Init (NULL );
21192127
21202128 m_dwEnvCount = 0 ;
21212129 m_lppEnvList = NULL ;
@@ -2150,12 +2158,11 @@ CPerlHost::CPerlHost(const struct IPerlMem** ppMem, const struct IPerlMem** ppMe
21502158 const struct IPerlProc ** ppProc)
21512159{
21522160 InterlockedIncrement (&num_hosts);
2153- m_pvDir = new VDir (0 );
2154- m_pVMem = new VMem ();
2161+
21552162 m_pVMemShared = new VMem ();
21562163 m_pVMemParse = new VMem ();
21572164
2158- m_pvDir-> Init (NULL , m_pVMem );
2165+ m_vDir. Init (NULL , 0 );
21592166
21602167 m_dwEnvCount = 0 ;
21612168 m_lppEnvList = NULL ;
@@ -2177,13 +2184,12 @@ CPerlHost::CPerlHost(CPerlHost& host)
21772184{
21782185 /* Construct a host from another host */
21792186 InterlockedIncrement (&num_hosts);
2180- m_pVMem = new VMem ();
2187+
21812188 m_pVMemShared = host.GetMemShared ();
21822189 m_pVMemParse = host.GetMemParse ();
21832190
21842191 /* duplicate directory info */
2185- m_pvDir = new VDir (0 );
2186- m_pvDir->Init (host.GetDir (), m_pVMem);
2192+ m_vDir.Init (host.GetDir (), 0 );
21872193
21882194 m_pHostperlMem = &perlMem;
21892195 m_pHostperlMemShared = &perlMemShared;
@@ -2210,10 +2216,10 @@ CPerlHost::~CPerlHost(void)
22102216{
22112217 Reset ();
22122218 InterlockedDecrement (&num_hosts);
2213- delete m_pvDir ;
2219+ // delete m_vDir ;
22142220 m_pVMemParse->Release ();
22152221 m_pVMemShared->Release ();
2216- m_pVMem-> Release ();
2222+ // m_VMem. Release();
22172223}
22182224
22192225LPSTR
@@ -2360,7 +2366,7 @@ CPerlHost::GetChildDir(void)
23602366 size_t length;
23612367
23622368 Newx (ptr, MAX_PATH+1 , char );
2363- m_pvDir-> GetCurrentDirectoryA (MAX_PATH+1 , ptr);
2369+ m_vDir. GetCurrentDirectoryA (MAX_PATH+1 , ptr);
23642370 length = strlen (ptr);
23652371 if (length > 3 ) {
23662372 if ((ptr[length-1 ] == ' \\ ' ) || (ptr[length-1 ] == ' /' ))
@@ -2546,11 +2552,19 @@ CPerlHost::Chdir(const char *dirname)
25462552 errno = ENOENT;
25472553 return -1 ;
25482554 }
2549- ret = m_pvDir-> SetCurrentDirectoryA ((char *)dirname);
2555+ ret = m_vDir. SetCurrentDirectoryA ((char *)dirname);
25502556 if (ret < 0 ) {
25512557 errno = ENOENT;
25522558 }
25532559 return ret;
25542560}
25552561
2562+ static inline VMemNL * VDToVM (VDir * pvd) {
2563+ VDir * vd = (VDir *)pvd;
2564+ size_t p_szt = ((size_t )vd)-((size_t )((CPerlHost*)NULL )->GetDir ());
2565+ CPerlHost * cph = (CPerlHost*)p_szt;
2566+ VMemNL * vm = cph->GetMem ();
2567+ return vm;
2568+ }
2569+
25562570#endif /* ___PerlHost_H___ */
0 commit comments