- Timestamp:
- Jul 8, 2005, 2:42:50 AM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/emx/src/emximp/emximp.c
-
Property cvs2svn:cvs-rev
changed from
1.14
to1.15
r2232 r2233 1250 1250 * Reads a LX nametable. 1251 1251 */ 1252 static void dll_read_names(FILE *phFile, off_t off, int fResident, int fOrdinal0Only, const char *pszFilename)1252 static void dll_read_names(FILE *phFile, off_t off, int cb, int fResident, int fOrdinal0Only, const char *pszFilename) 1253 1253 { 1254 1254 char szName[256]; … … 1259 1259 error("`%s': Bad LX format\n", pszFilename); 1260 1260 1261 1262 /* first name is module name / description. */1263 cchName = (unsigned)fgetc(phFile);1264 if (!cchName)1265 error("`%s': Bad LX format\n", pszFilename);1266 iOrd = 0;1267 if ( fread(szName, 1, cchName, phFile) != cchName1268 || fread(&iOrd, 1, 2, phFile) != 2)1269 error("`%s': Bad LX format\n", pszFilename);1270 if (iOrd != 0)1271 error("`%s': Bad LX format - expect 0 as first ordinal, found %d\n", pszFilename, iOrd);1272 1273 szName[cchName] = '\0';1274 1261 if (fResident) 1275 module_name = xstrdup(szName);1262 module_name = NULL; 1276 1263 else 1277 description = xstrdup(szName); 1278 1279 if (fOrdinal0Only) 1280 return; 1281 1282 /* The rest of the names are export names. */ 1283 for (;;) 1264 description = NULL; 1265 1266 /* The names doesn't have to be in order, so we'll have to read 1267 * until we find the 0 ordinal if that's what we require. */ 1268 while (cb > 0) 1284 1269 { 1285 1270 cchName = (unsigned)fgetc(phFile); 1286 if (!cchName )1271 if (!cchName || cb < cchName + 2) 1287 1272 break; 1288 1273 iOrd = 0; … … 1291 1276 error("`%s': Bad LX format\n", pszFilename); 1292 1277 szName[cchName] = '\0'; 1293 1294 switch (mode) 1278 cb -= 1 + cchName + 2; 1279 1280 if (iOrd == 0) 1295 1281 { 1296 case M_DLL_TO_IMP: 1297 if (!fResident) 1298 fprintf(out_file, "%-23s %-8s %3u ?\n", szName, module_name, iOrd); 1299 else 1300 fprintf(out_file, "%-23s %-8s %-23s ?\n", szName, module_name, szName); 1301 if (ferror(out_file)) 1302 write_error(out_fname); 1303 break; 1304 case M_DLL_TO_A: 1305 if (!fResident) 1306 write_a_import(szName, module_name, iOrd, NULL); 1307 else 1308 write_a_import(szName, module_name, 0, szName); 1309 break; 1310 case M_DLL_TO_LIB: 1311 if (!fResident) 1312 write_lib_import(szName, module_name, iOrd, NULL); 1313 else 1314 write_lib_import(szName, module_name, 0, szName); 1315 break; 1316 case M_DLL_TO_DEF: 1317 if (!fResident) 1318 fprintf(out_file, " \"%s\" @%d\n", szName, iOrd); 1319 else 1320 fprintf(out_file, " \"%s\"\n", szName); 1321 if (ferror(out_file)) 1322 write_error(out_fname); 1323 break; 1324 default: 1325 abort (); 1282 if (fResident) 1283 module_name = xstrdup(szName); 1284 else 1285 description = xstrdup(szName); 1286 if (fOrdinal0Only) 1287 return; 1288 } 1289 else if (!fOrdinal0Only) 1290 { 1291 switch (mode) 1292 { 1293 case M_DLL_TO_IMP: 1294 if (!fResident) 1295 fprintf(out_file, "%-23s %-8s %3u ?\n", szName, module_name, iOrd); 1296 else 1297 fprintf(out_file, "%-23s %-8s %-23s ?\n", szName, module_name, szName); 1298 if (ferror(out_file)) 1299 write_error(out_fname); 1300 break; 1301 case M_DLL_TO_A: 1302 if (!fResident) 1303 write_a_import(szName, module_name, iOrd, NULL); 1304 else 1305 write_a_import(szName, module_name, 0, szName); 1306 break; 1307 case M_DLL_TO_LIB: 1308 if (!fResident) 1309 write_lib_import(szName, module_name, iOrd, NULL); 1310 else 1311 write_lib_import(szName, module_name, 0, szName); 1312 break; 1313 case M_DLL_TO_DEF: 1314 if (!fResident) 1315 fprintf(out_file, " \"%s\" @%d\n", szName, iOrd); 1316 else 1317 fprintf(out_file, " \"%s\"\n", szName); 1318 if (ferror(out_file)) 1319 write_error(out_fname); 1320 break; 1321 default: 1322 abort (); 1323 } 1326 1324 } 1327 1325 } /* read restable loop */ … … 1443 1441 if (mode == M_DLL_TO_DEF && !first_module) 1444 1442 { 1445 dll_read_names(phFile, os2hdr.e32_restab + offLX, 1, 1, pszFilename);1446 dll_read_names(phFile, os2hdr.e32_nrestab, 0, 1, pszFilename);1443 dll_read_names(phFile, os2hdr.e32_restab + offLX, 0x7ffffff, 1, 1, pszFilename); 1444 dll_read_names(phFile, os2hdr.e32_nrestab, os2hdr.e32_cbnrestab, 0, 1, pszFilename); 1447 1445 1448 1446 first_module = xstrdup(module_name); … … 1457 1455 write_error(out_fname); 1458 1456 } 1459 dll_read_names(phFile, os2hdr.e32_restab + offLX, 1, 0, pszFilename);1457 dll_read_names(phFile, os2hdr.e32_restab + offLX, 0x7ffffff, 1, 0, pszFilename); 1460 1458 if (os2hdr.e32_nrestab) 1461 dll_read_names(phFile, os2hdr.e32_nrestab, 0, 0, pszFilename);1459 dll_read_names(phFile, os2hdr.e32_nrestab, os2hdr.e32_cbnrestab, 0, 0, pszFilename); 1462 1460 1463 1461 fclose(phFile); -
Property cvs2svn:cvs-rev
changed from
Note:
See TracChangeset
for help on using the changeset viewer.