Changeset 2463 for trunk/ash/var.c
- Timestamp:
- Nov 19, 2005, 4:58:38 PM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ash/var.c
r2462 r2463 47 47 #include <paths.h> 48 48 49 #ifdef PC_OS2_LIBPATHS 50 #define INCL_BASE 51 #include <os2.h> 52 53 #ifndef LIBPATHSTRICT 54 #define LIBPATHSTRICT 3 55 #endif 56 57 extern APIRET 58 #ifdef APIENTRY 59 APIENTRY 60 #endif 61 DosQueryHeaderInfo(HMODULE hmod, ULONG ulIndex, PVOID pvBuffer, ULONG cbBuffer, ULONG ulSubFunction); 62 #define QHINF_EXEINFO 1 /* NE exeinfo. */ 63 #define QHINF_READRSRCTBL 2 /* Reads from the resource table. */ 64 #define QHINF_READFILE 3 /* Reads from the executable file. */ 65 #define QHINF_LIBPATHLENGTH 4 /* Gets the libpath length. */ 66 #define QHINF_LIBPATH 5 /* Gets the entire libpath. */ 67 #define QHINF_FIXENTRY 6 /* NE only */ 68 #define QHINF_STE 7 /* NE only */ 69 #define QHINF_MAPSEL 8 /* NE only */ 70 71 #endif 72 73 49 74 /* 50 75 * Shell variables. … … 101 126 struct var vvers; 102 127 struct var voptind; 128 129 #ifdef PC_OS2_LIBPATHS 130 static struct var libpath_vars[4]; 131 static const char *libpath_envs[4] = {"LIBPATH=", "BEGINLIBPATH=", "ENDLIBPATH=", "LIBPATHSTRICT="}; 132 #endif 103 133 104 134 const struct varinit varinit[] = { … … 173 203 struct var **vpp; 174 204 205 #ifdef PC_OS2_LIBPATHS 206 char *psz = ckmalloc(2048); 207 int rc; 208 int i; 209 for (i = 0; i < 4; i++) 210 { 211 libpath_vars[i].flags = VSTRFIXED | VOS2LIBPATH; 212 libpath_vars[i].func = NULL; 213 214 if (i > 0) 215 rc = DosQueryExtLIBPATH(psz, i); 216 else 217 { 218 rc = DosQueryHeaderInfo(NULLHANDLE, 0, psz, 2048, QHINF_LIBPATH); 219 libpath_vars[i].flags |= VREADONLY; 220 } 221 if (!rc && *psz) 222 { 223 int cch1 = strlen(libpath_envs[i]); 224 int cch2 = strlen(psz) + 1; 225 libpath_vars[i].text = ckmalloc(cch1 + cch2); 226 memcpy(libpath_vars[i].text, libpath_envs[i], cch1); 227 memcpy(libpath_vars[i].text + cch1, psz, cch2); 228 } 229 else 230 { 231 libpath_vars[i].flags |= VUNSET | VTEXTFIXED; 232 libpath_vars[i].text = (char*)libpath_envs[i]; 233 } 234 if (find_var(libpath_vars[i].text, &vpp, &libpath_vars[i].name_len) != NULL) 235 continue; 236 libpath_vars[i].next = *vpp; 237 *vpp = &libpath_vars[i]; 238 } 239 free(psz); 240 #endif 241 175 242 for (ip = varinit ; (vp = ip->var) != NULL ; ip++) { 176 243 if (find_var(ip->text, &vpp, &vp->name_len) != NULL) … … 300 367 vp->flags |= flags & ~VNOFUNC; 301 368 vp->text = s; 369 #ifdef PC_OS2_LIBPATHS 370 if ((vp->flags & VOS2LIBPATH) && (vp->flags & VEXPORT)) 371 vp->flags &= ~VEXPORT; 372 #endif 302 373 303 374 /* … … 420 491 } 421 492 *ep = NULL; 493 494 #ifdef PC_OS2_LIBPATHS 495 /* 496 * Set the libpaths now as this is exec() time. 497 */ 498 for (nenv = 0; nenv < 3; nenv++) 499 DosSetExtLIBPATH(strchr(libpath_vars[nenv].text, '=') + 1, nenv); 500 #endif 501 422 502 return env; 423 503 }
Note:
See TracChangeset
for help on using the changeset viewer.