Changeset 725
- Timestamp:
- Jul 6, 2007, 12:15:59 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/eas.c
r574 r725 15 15 17 Jul 06 SHL Use Runtime_Error 16 16 22 Mar 07 GKY Use QWL_USER 17 05 Jul 07 SHL GetFileEAs: avoid heap corruption 17 18 18 19 ***********************************************************************/ … … 171 172 172 173 ealen = sizeof(FEA2LIST) + strlen(s) + 64; 173 rc = DosAllocMem((PPVOID) & pfealist, ealen + 1 L,174 rc = DosAllocMem((PPVOID) & pfealist, ealen + 1, 174 175 OBJ_TILE | PAG_COMMIT | PAG_READ | PAG_WRITE); 175 176 if (rc) … … 179 180 memset(pfealist, 0, ealen + 1); 180 181 pfealist->cbList = ealen; 181 pfealist->list[0].oNextEntryOffset = 0 L;182 pfealist->list[0].oNextEntryOffset = 0; 182 183 pfealist->list[0].fEA = 0; 183 184 pfealist->list[0].cbName = strlen(s); … … 202 203 eaop.fpGEA2List = (PGEA2LIST) 0; 203 204 eaop.fpFEA2List = pfealist; 204 eaop.oError = 0 L;205 eaop.oError = 0; 205 206 DosSetPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & eaop, 206 207 (ULONG) sizeof(EAOP2), DSPI_WRTTHRU); … … 483 484 const CHAR *linefeed = "\n"; 484 485 BOOL alltext; 485 IPT pos = 0 L;486 IPT pos = 0; 486 487 487 488 info = eap->head; … … 902 903 eaop.fpGEA2List = &gealist; 903 904 eaop.fpFEA2List = pfealist; 904 eaop.oError = 0 L;905 eaop.oError = 0; 905 906 rc = DosSetPathInfo(eap->filename, FIL_QUERYEASIZE, (PVOID) & eaop, 906 907 (ULONG) sizeof(EAOP2), DSPI_WRTTHRU); … … 1005 1006 return (PVOID) pfealist; 1006 1007 len = strlen(newdata); 1007 ealen = sizeof(FEA2LIST) + 24 L + (ULONG) current->cbName + 1L+1008 (ULONG) len + 4L;1008 ealen = sizeof(FEA2LIST) + 24 + (ULONG) current->cbName + 1 + 1009 (ULONG)len + 4; 1009 1010 switch (*(USHORT *) current->value) { 1010 1011 case EAT_EA: … … 1044 1045 else { 1045 1046 memset(pfealist, 0, ealen); 1046 pfealist->list[0].oNextEntryOffset = 0 L;1047 pfealist->list[0].oNextEntryOffset = 0; 1047 1048 pfealist->list[0].fEA = 0; //current->fEA; 1048 1049 … … 1145 1146 eaop.fpGEA2List = (PGEA2LIST) 0; 1146 1147 eaop.fpFEA2List = pfealist; 1147 eaop.oError = 0 L;1148 pfealist->cbList = 13 L+ (ULONG) pfealist->list[0].cbName +1149 (ULONG)pfealist->list[0].cbValue;1148 eaop.oError = 0; 1149 pfealist->cbList = 13 + (ULONG) pfealist->list[0].cbName + 1150 (ULONG)pfealist->list[0].cbValue; 1150 1151 1151 1152 rc = DosSetPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & eaop, … … 1188 1189 if (!filename) 1189 1190 return head; 1190 if (ishandle || !DosOpen(filename, &handle, &action, 0 L, 0,1191 if (ishandle || !DosOpen(filename, &handle, &action, 0, 0, 1191 1192 OPEN_ACTION_FAIL_IF_NEW | 1192 1193 OPEN_ACTION_OPEN_IF_EXISTS, 1193 1194 OPEN_FLAGS_NOINHERIT | 1194 1195 OPEN_SHARE_DENYREADWRITE | 1195 OPEN_ACCESS_READWRITE, (PEAOP2) 1196 OPEN_ACCESS_READWRITE, (PEAOP2)0)) { 1196 1197 if (ishandle) 1197 1198 handle = *(HFILE *) filename; 1198 if (!DosQueryFileInfo(handle, FIL_QUERYEASIZE, (PVOID) & fsa4, 1199 (ULONG) sizeof(fsa4)) && fsa4.cbList > 4L) { 1200 1199 if (!DosQueryFileInfo(handle, FIL_QUERYEASIZE, (PVOID)&fsa4, 1200 (ULONG) sizeof(fsa4)) && 1201 fsa4.cbList > 4) 1202 { 1201 1203 PDENA2 pdena; 1202 1204 EAOP2 eaop; … … 1204 1206 PFEA2LIST pfealist; 1205 1207 PGEA2 pgea; 1206 ULONG x = 1L, ecnt = 1L; 1208 ULONG ulEntry = 1; // Ordinal of EA to return 1209 ULONG ulCount = 1; // # of EAs to return 1207 1210 1208 1211 pdena = xmalloc(65536 + 1024, pszSrcFile, __LINE__); 1209 1212 if (pdena) { 1210 while (!DosEnumAttribute 1211 (ENUMEA_REFTYPE_FHANDLE, &handle, x, (PVOID) pdena, 1212 (ULONG) 65536L, &ecnt, ENUMEA_LEVEL_NO_VALUE) && ecnt) { 1213 while (!DosEnumAttribute(ENUMEA_REFTYPE_FHANDLE, 1214 &handle, 1215 ulEntry, 1216 (PVOID)pdena, 1217 (ULONG)65536L, 1218 &ulCount, 1219 ENUMEA_LEVEL_NO_VALUE) && 1220 ulCount) 1221 { 1222 // 64 is for header and spare - fixme to allocate smarter 1213 1223 pgealist = xmalloc(64 + pdena->cbName, pszSrcFile, __LINE__); 1214 1224 if (pgealist) { 1215 1225 pgealist->cbList = 64 + pdena->cbName; 1216 1226 pgea = pgealist->list; 1217 pgea->oNextEntryOffset = 0 L;1227 pgea->oNextEntryOffset = 0; 1218 1228 pgea->cbName = pdena->cbName; 1219 1229 memcpy(pgea->szName, pdena->szName, pdena->cbName + 1); 1220 pfealist = 1221 xmallocz(64 + pdena->cbName + pdena->cbValue, pszSrcFile, 1222 __LINE__); 1230 pfealist = xmallocz(64 + pdena->cbName + pdena->cbValue, 1231 pszSrcFile, __LINE__); 1223 1232 if (pfealist) { 1224 1233 pfealist->cbList = 64 + pdena->cbName + pdena->cbValue; 1225 1234 eaop.fpGEA2List = pgealist; 1226 1235 eaop.fpFEA2List = pfealist; 1227 eaop.oError = 0 L;1228 // saymsg(MB_ENTER,HWND_DESKTOP,"Debug1","\"%s\" %ld",pdena->szName, x);1236 eaop.oError = 0; 1237 // saymsg(MB_ENTER,HWND_DESKTOP,"Debug1","\"%s\" %ld",pdena->szName,ulEntry); 1229 1238 rc = 1230 1239 DosQueryFileInfo(handle, FIL_QUERYEASFROMLIST, (PVOID) & eaop, … … 1243 1252 info = xmalloc(sizeof(HOLDFEA), pszSrcFile, __LINE__); 1244 1253 if (info) { 1245 info->pfea =1246 xmalloc(eaop.fpFEA2List->cbList - sizeof(ULONG),1247 pszSrcFile, __LINE__);1254 // 05 Jul 07 SHL was one short 1255 info->pfea = xmalloc(eaop.fpFEA2List->cbList - sizeof(ULONG) + 1, 1256 pszSrcFile, __LINE__); 1248 1257 memcpy(info->pfea, eaop.fpFEA2List->list, 1249 1258 eaop.fpFEA2List->cbList - sizeof(ULONG)); … … 1265 1274 free(pgealist); 1266 1275 } 1267 x += ecnt;1268 } 1276 ulEntry += ulCount; 1277 } // while 1269 1278 free(pdena); 1270 1279 DosPostEventSem(CompactSem); … … 1275 1284 } 1276 1285 else { 1286 Runtime_Error(pszSrcFile, __LINE__, "why here", filename); 1277 1287 /* try it without opening it */ 1278 1288 if (!DosQueryPathInfo(filename, FIL_QUERYEASIZE, (PVOID) & fsa4, 1279 (ULONG) sizeof(fsa4)) && fsa4.cbList > 4L) { 1280 1289 (ULONG) sizeof(fsa4)) && 1290 fsa4.cbList > 4) 1291 { 1281 1292 PDENA2 pdena; 1282 1293 EAOP2 eaop; … … 1284 1295 PFEA2LIST pfealist; 1285 1296 PGEA2 pgea; 1286 ULONG x = 1L, ecnt = 1L;1297 ULONG ulEntry = 1, ulCount = 1; 1287 1298 1288 1299 pdena = xmalloc(65536 + 1024, pszSrcFile, __LINE__); 1289 1300 if (pdena) { 1290 1301 while (!DosEnumAttribute 1291 (ENUMEA_REFTYPE_PATH, filename, x, (PVOID) pdena, 1292 (ULONG) 65536L, &ecnt, ENUMEA_LEVEL_NO_VALUE) && ecnt) { 1302 (ENUMEA_REFTYPE_PATH, filename, ulEntry, (PVOID) pdena, 1303 (ULONG) 65536L, &ulCount, ENUMEA_LEVEL_NO_VALUE) && ulCount) 1304 { 1293 1305 pgealist = xmalloc(64 + pdena->cbName, pszSrcFile, __LINE__); 1294 1306 if (pgealist) { 1295 1307 pgealist->cbList = 64 + pdena->cbName; 1296 1308 pgea = pgealist->list; 1297 pgea->oNextEntryOffset = 0 L;1309 pgea->oNextEntryOffset = 0; 1298 1310 pgea->cbName = pdena->cbName; 1299 1311 memcpy(pgea->szName, pdena->szName, pdena->cbName + 1); … … 1305 1317 eaop.fpGEA2List = pgealist; 1306 1318 eaop.fpFEA2List = pfealist; 1307 eaop.oError = 0 L;1308 // saymsg(MB_ENTER,HWND_DESKTOP,"Debug2","\"%s\" %ld",pdena->szName,x);1319 eaop.oError = 0; 1320 // saymsg(MB_ENTER,HWND_DESKTOP,"Debug2","\"%s\" %ld",pdena->szName,ulEntry); 1309 1321 rc = DosQueryPathInfo(filename, FIL_QUERYEASFROMLIST, 1310 1322 (PVOID) & eaop, (ULONG) sizeof(EAOP2)); … … 1360 1372 free(pgealist); 1361 1373 } 1362 x += ecnt;1363 } 1374 ulEntry += ulCount; 1375 } // while 1364 1376 free(pdena); 1365 1377 DosPostEventSem(CompactSem);
Note:
See TracChangeset
for help on using the changeset viewer.