Changeset 4372 for trunk/src/kernel32/oslibdos.cpp
- Timestamp:
- Oct 2, 2000, 3:39:18 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/oslibdos.cpp
r4324 r4372 1 /* $Id: oslibdos.cpp,v 1.4 6 2000-09-25 19:00:27sandervl Exp $ */1 /* $Id: oslibdos.cpp,v 1.47 2000-10-02 13:38:56 sandervl Exp $ */ 2 2 /* 3 3 * Wrappers for OS/2 Dos* API … … 45 45 46 46 if(DosQueryModuleHandle("DOSCALLS", &hDoscalls) != NO_ERROR) { 47 return;47 return; 48 48 } 49 49 if(DosQueryProcAddr(hDoscalls, 989, NULL, (PFN *)&DosSetFileSizeLProc) != NO_ERROR) { 50 return;50 return; 51 51 } 52 52 if(DosQueryProcAddr(hDoscalls, 988, NULL, (PFN *)&DosSetFilePtrLProc) != NO_ERROR) { 53 return;53 return; 54 54 } 55 55 if(DosQueryProcAddr(hDoscalls, 986, NULL, (PFN *)&DosSetFileLocksLProc) != NO_ERROR) { 56 return;56 return; 57 57 } 58 58 f64BitIO = TRUE; … … 167 167 168 168 case ERROR_DEVICE_IN_USE: //99 169 return ERROR_DEVICE_IN_USE_W;169 return ERROR_DEVICE_IN_USE_W; 170 170 171 171 case ERROR_DRIVE_LOCKED: //108 … … 176 176 177 177 case ERROR_OPEN_FAILED: //110 178 return ERROR_OPEN_FAILED_W;178 return ERROR_OPEN_FAILED_W; 179 179 180 180 case ERROR_BUFFER_OVERFLOW: //111 … … 182 182 183 183 case ERROR_DISK_FULL: //112 184 return ERROR_DISK_FULL_W;184 return ERROR_DISK_FULL_W; 185 185 186 186 case ERROR_NO_MORE_SEARCH_HANDLES: //113 … … 233 233 234 234 default: 235 dprintf(("WARNING: error2WinError: error %d not included!!!!", rc));235 dprintf(("WARNING: error2WinError: error %d not included!!!!", rc)); 236 236 return defaultCode; 237 237 } … … 764 764 //TODO: FILE_SHARE_DELETE 765 765 if((fuShare & (FILE_SHARE_READ_W | FILE_SHARE_WRITE_W)) == 0 ) 766 openMode |= OPEN_SHARE_DENYREADWRITE;766 openMode |= OPEN_SHARE_DENYREADWRITE; 767 767 else 768 768 if((fuShare & (FILE_SHARE_READ_W | FILE_SHARE_WRITE_W)) == (FILE_SHARE_READ_W | FILE_SHARE_WRITE_W)) … … 773 773 else 774 774 if(fuShare & FILE_SHARE_WRITE_W) 775 openMode |= OPEN_SHARE_DENYREAD;775 openMode |= OPEN_SHARE_DENYREAD; 776 776 777 777 if(fuAccess == (GENERIC_READ_W | GENERIC_WRITE_W)) 778 openMode |= OPEN_ACCESS_READWRITE;778 openMode |= OPEN_ACCESS_READWRITE; 779 779 else 780 780 if(fuAccess & GENERIC_READ_W) 781 openMode |= OPEN_ACCESS_READONLY;781 openMode |= OPEN_ACCESS_READONLY; 782 782 else 783 783 if(fuAccess & GENERIC_WRITE_W) … … 799 799 800 800 if(strlen(lpszFile) == 2 && lpszFile[1] == ':') { 801 //app tries to open physical disk802 openMode |= OPEN_FLAGS_DASD;801 //app tries to open physical disk 802 openMode |= OPEN_FLAGS_DASD; 803 803 } 804 804 int retry = 0; … … 815 815 NULL); 816 816 if(rc == ERROR_TOO_MANY_OPEN_FILES) 817 { 818 ULONG CurMaxFH; 819 LONG ReqCount = 32; 820 821 rc = DosSetRelMaxFH(&ReqCount, &CurMaxFH); 822 if(rc) { 823 dprintf(("DosSetRelMaxFH returned %d", rc)); 824 SetLastError(ERROR_TOO_MANY_OPEN_FILES_W); 825 return INVALID_HANDLE_VALUE_W; 817 { 818 ULONG CurMaxFH; 819 LONG ReqCount = 32; 820 821 rc = DosSetRelMaxFH(&ReqCount, &CurMaxFH); 822 if(rc) { 823 dprintf(("DosSetRelMaxFH returned %d", rc)); 824 SetLastError(ERROR_TOO_MANY_OPEN_FILES_W); 825 return INVALID_HANDLE_VALUE_W; 826 } 827 dprintf(("DosOpen failed -> increased nr open files to %d", CurMaxFH)); 826 828 } 827 dprintf(("DosOpen failed -> increased nr open files to %d", CurMaxFH)); 828 } 829 else break; 830 retry++; 829 else break; 830 retry++; 831 831 } 832 832 … … 860 860 if(fuMode & OF_CREATE_W) { 861 861 openFlag |= OPEN_ACTION_CREATE_IF_NEW | 862 863 }864 else openFlag |= OPEN_ACTION_OPEN_IF_EXISTS; //180575865 866 867 868 869 if(fuMode & OF_WRITE_W)870 871 872 if(fuMode & OF_CREATE_W)873 862 OPEN_ACTION_REPLACE_IF_EXISTS; 863 } 864 else openFlag |= OPEN_ACTION_OPEN_IF_EXISTS; 865 866 if(fuMode & OF_READWRITE_W) 867 openMode |= OPEN_ACCESS_READWRITE; 868 else 869 if(fuMode & OF_WRITE_W) 870 openMode |= OPEN_ACCESS_WRITEONLY; 871 else 872 if(fuMode & OF_CREATE_W) 873 openMode |= OPEN_ACCESS_READWRITE; 874 874 } 875 875 … … 930 930 931 931 if(lpOverlapped) {//TODO: 932 dprintf(("OSLibDosLockFile: overlapped lock not yet implemented!!"));932 dprintf(("OSLibDosLockFile: overlapped lock not yet implemented!!")); 933 933 } 934 934 //TODO: Locking region crossing end of file is permitted. Works in OS/2?? 935 935 if(f64BitIO) 936 936 { 937 FILELOCKL lockRangeL;938 939 lockRangeL.lOffset.ulLo = OffsetLow;940 lockRangeL.lOffset.ulHi = OffsetHigh;941 lockRangeL.lRange.ulLo = nNumberOfBytesToLockLow;942 lockRangeL.lRange.ulHi = nNumberOfBytesToLockHigh;943 944 rc = OdinDosSetFileLocksL(hFile, NULL, &lockRangeL,937 FILELOCKL lockRangeL; 938 939 lockRangeL.lOffset.ulLo = OffsetLow; 940 lockRangeL.lOffset.ulHi = OffsetHigh; 941 lockRangeL.lRange.ulLo = nNumberOfBytesToLockLow; 942 lockRangeL.lRange.ulHi = nNumberOfBytesToLockHigh; 943 944 rc = OdinDosSetFileLocksL(hFile, NULL, &lockRangeL, 945 945 (dwFlags & LOCKFILE_FAIL_IMMEDIATELY_W) ? 0 : 5000, 0); 946 946 //SvL: 64 bits values are only supported by JFS … … 948 948 // (TODO: should check the partition type instead) 949 949 if(rc == ERROR_INVALID_PARAMETER && (OffsetHigh || nNumberOfBytesToLockHigh)) { 950 goto oldlock;950 goto oldlock; 951 951 } 952 952 } … … 954 954 { 955 955 oldlock: 956 FILELOCK lockRange = { OffsetLow, nNumberOfBytesToLockLow };957 958 rc = DosSetFileLocks(hFile, NULL, &lockRange,956 FILELOCK lockRange = { OffsetLow, nNumberOfBytesToLockLow }; 957 958 rc = DosSetFileLocks(hFile, NULL, &lockRange, 959 959 (dwFlags & LOCKFILE_FAIL_IMMEDIATELY_W) ? 0 : 5000, 0); 960 960 } 961 961 if(rc) { 962 SetLastError(error2WinError(rc));963 return FALSE;962 SetLastError(error2WinError(rc)); 963 return FALSE; 964 964 } 965 965 SetLastError(ERROR_SUCCESS_W); … … 978 978 979 979 if(lpOverlapped) {//TODO: 980 dprintf(("OSLibDosUnlockFile: overlapped unlock not yet implemented!!"));980 dprintf(("OSLibDosUnlockFile: overlapped unlock not yet implemented!!")); 981 981 } 982 982 if(f64BitIO) 983 983 { 984 FILELOCKL unlockRangeL;985 986 unlockRangeL.lOffset.ulLo = OffsetLow;987 unlockRangeL.lOffset.ulHi = OffsetHigh;988 unlockRangeL.lRange.ulLo = nNumberOfBytesToLockLow;989 unlockRangeL.lRange.ulHi = nNumberOfBytesToLockHigh;990 991 rc = OdinDosSetFileLocksL(hFile, &unlockRangeL, NULL, 5000, 0);984 FILELOCKL unlockRangeL; 985 986 unlockRangeL.lOffset.ulLo = OffsetLow; 987 unlockRangeL.lOffset.ulHi = OffsetHigh; 988 unlockRangeL.lRange.ulLo = nNumberOfBytesToLockLow; 989 unlockRangeL.lRange.ulHi = nNumberOfBytesToLockHigh; 990 991 rc = OdinDosSetFileLocksL(hFile, &unlockRangeL, NULL, 5000, 0); 992 992 //SvL: 64 bits values are only supported by JFS 993 993 // Try the 32 bits DosSetFileLocks if it fails 994 994 // (TODO: should check the partition type instead) 995 995 if(rc == ERROR_INVALID_PARAMETER && (OffsetHigh || nNumberOfBytesToLockHigh)) { 996 goto oldlock;996 goto oldlock; 997 997 } 998 998 } … … 1000 1000 { 1001 1001 oldlock: 1002 FILELOCK unlockRange = { OffsetLow, nNumberOfBytesToLockLow };1002 FILELOCK unlockRange = { OffsetLow, nNumberOfBytesToLockLow }; 1003 1003 1004 1004 rc = DosSetFileLocks(hFile, &unlockRange, NULL, 5000, 0); 1005 1005 } 1006 1006 if(rc) { 1007 SetLastError(error2WinError(rc));1008 return FALSE;1007 SetLastError(error2WinError(rc)); 1008 return FALSE; 1009 1009 } 1010 1010 SetLastError(ERROR_SUCCESS_W); … … 1030 1030 if(f64BitIO) 1031 1031 { 1032 FILESTATUS3L fsts3ConfigInfoL = {{0}};1033 ULONG ulBufSize = sizeof(FILESTATUS3L);1034 1035 rc = DosQueryFileInfo(hFile, FIL_STANDARDL, &fsts3ConfigInfoL, ulBufSize);1036 if(lpdwFileSizeHigh) {1037 *lpdwFileSizeHigh = fsts3ConfigInfoL.cbFile.ulHi;1038 }1039 sizeLow = fsts3ConfigInfoL.cbFile.ulLo;1032 FILESTATUS3L fsts3ConfigInfoL = {{0}}; 1033 ULONG ulBufSize = sizeof(FILESTATUS3L); 1034 1035 rc = DosQueryFileInfo(hFile, FIL_STANDARDL, &fsts3ConfigInfoL, ulBufSize); 1036 if(lpdwFileSizeHigh) { 1037 *lpdwFileSizeHigh = fsts3ConfigInfoL.cbFile.ulHi; 1038 } 1039 sizeLow = fsts3ConfigInfoL.cbFile.ulLo; 1040 1040 } 1041 1041 else 1042 1042 { 1043 FILESTATUS3 fsts3ConfigInfo = {{0}};1044 ULONG ulBufSize = sizeof(FILESTATUS3);1045 1046 if(lpdwFileSizeHigh) {1047 *lpdwFileSizeHigh = 0;1048 }1049 rc = DosQueryFileInfo(hFile, FIL_STANDARD, &fsts3ConfigInfo, ulBufSize);1050 sizeLow = fsts3ConfigInfo.cbFile;1043 FILESTATUS3 fsts3ConfigInfo = {{0}}; 1044 ULONG ulBufSize = sizeof(FILESTATUS3); 1045 1046 if(lpdwFileSizeHigh) { 1047 *lpdwFileSizeHigh = 0; 1048 } 1049 rc = DosQueryFileInfo(hFile, FIL_STANDARD, &fsts3ConfigInfo, ulBufSize); 1050 sizeLow = fsts3ConfigInfo.cbFile; 1051 1051 } 1052 1052 if(rc) { 1053 SetLastError(error2WinError(rc));1054 return -1;1053 SetLastError(error2WinError(rc)); 1054 return -1; 1055 1055 } 1056 1056 SetLastError(ERROR_SUCCESS_W); … … 1085 1085 if( (f64BitIO) && (OffsetHigh) ) 1086 1086 { 1087 offsetL.ulLo = OffsetLow; 1088 offsetL.ulHi = (OffsetHigh) ? *OffsetHigh : 0; 1089 rc = OdinDosSetFilePtrL(hFile, offsetL, method, &newoffsetL); 1090 if(OffsetHigh) { 1091 *OffsetHigh = newoffsetL.ulHi; 1092 } 1093 newoffset = newoffsetL.ulLo; 1094 } 1095 else 1096 rc = DosSetFilePtr(hFile, OffsetLow, method, &newoffset); 1087 offsetL.ulLo = OffsetLow; 1088 offsetL.ulHi = (OffsetHigh) ? *OffsetHigh : 0; 1089 rc = OdinDosSetFilePtrL(hFile, offsetL, method, &newoffsetL); 1090 if(OffsetHigh) { 1091 *OffsetHigh = newoffsetL.ulHi; 1092 } 1093 newoffset = newoffsetL.ulLo; 1094 } 1095 else rc = DosSetFilePtr(hFile, OffsetLow, method, &newoffset); 1097 1096 1098 1097 if(rc) 1099 1098 { 1100 SetLastError(error2WinError(rc));1101 return -1;1099 SetLastError(error2WinError(rc)); 1100 return -1; 1102 1101 } 1103 1102 SetLastError(ERROR_SUCCESS_W); … … 1114 1113 1115 1114 if(f64BitIO) { 1116 rc = OdinDosSetFilePtrL(hFile, FilePosL, FILE_CURRENT, &newFilePosL);1117 if(rc == 0) {1118 rc = OdinDosSetFileSizeL(hFile, newFilePosL);1119 }1115 rc = OdinDosSetFilePtrL(hFile, FilePosL, FILE_CURRENT, &newFilePosL); 1116 if(rc == 0) { 1117 rc = OdinDosSetFileSizeL(hFile, newFilePosL); 1118 } 1120 1119 } 1121 1120 else { 1122 rc = DosSetFilePtr(hFile, 0, FILE_CURRENT, &newFilePos);1123 if(rc == 0) {1124 rc = DosSetFileSize(hFile, newFilePos);1125 }1121 rc = DosSetFilePtr(hFile, 0, FILE_CURRENT, &newFilePos); 1122 if(rc == 0) { 1123 rc = DosSetFileSize(hFile, newFilePos); 1124 } 1126 1125 } 1127 1126 if(rc) { 1128 SetLastError(error2WinError(rc));1129 return FALSE;1127 SetLastError(error2WinError(rc)); 1128 return FALSE; 1130 1129 } 1131 1130 SetLastError(ERROR_SUCCESS_W); … … 1140 1139 if(f64BitIO) 1141 1140 { 1142 FILESTATUS4L statusL = { 0 }; 1143 1144 rc = DosQueryFileInfo(hFile, 1145 FIL_QUERYEASIZEL, 1146 &statusL, 1147 sizeof(statusL)); 1148 if(rc == NO_ERROR) 1149 { 1150 pInfo->dwFileAttributes = 0; 1151 if(!(statusL.attrFile & NOT_NORMAL)) 1152 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_NORMAL_W; 1153 if(statusL.attrFile & FILE_READONLY) 1154 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_READONLY_W; 1155 if(statusL.attrFile & FILE_HIDDEN) 1156 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN_W; 1157 if(statusL.attrFile & FILE_SYSTEM) 1158 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_SYSTEM_W; 1159 if(statusL.attrFile & FILE_DIRECTORY) 1160 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY_W; 1161 if(statusL.attrFile & FILE_ARCHIVED) 1162 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_ARCHIVE_W; 1163 1164 pmDateTimeToFileTime(&statusL.fdateCreation, 1165 &statusL.ftimeCreation, 1166 &pInfo->ftCreationTime); 1167 pmDateTimeToFileTime(&statusL.fdateLastAccess, 1168 &statusL.ftimeLastAccess, 1169 &pInfo->ftLastAccessTime); 1170 pmDateTimeToFileTime(&statusL.fdateLastWrite, 1171 &statusL.ftimeLastWrite, 1172 &pInfo->ftLastWriteTime); 1173 1174 pInfo->nFileSizeHigh = statusL.cbFile.ulHi; 1175 pInfo->nFileSizeLow = statusL.cbFile.ulLo; 1176 pInfo->dwVolumeSerialNumber = 0; //todo 1177 pInfo->nNumberOfLinks = 1; 1178 pInfo->nFileIndexHigh = 0; 1179 pInfo->nFileIndexLow = 0; 1180 } 1141 FILESTATUS4L statusL = { 0 }; 1142 1143 rc = DosQueryFileInfo(hFile, FIL_QUERYEASIZEL, 1144 &statusL, sizeof(statusL)); 1145 if(rc == NO_ERROR) 1146 { 1147 pInfo->dwFileAttributes = 0; 1148 if(!(statusL.attrFile & NOT_NORMAL)) 1149 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_NORMAL_W; 1150 if(statusL.attrFile & FILE_READONLY) 1151 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_READONLY_W; 1152 if(statusL.attrFile & FILE_HIDDEN) 1153 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN_W; 1154 if(statusL.attrFile & FILE_SYSTEM) 1155 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_SYSTEM_W; 1156 if(statusL.attrFile & FILE_DIRECTORY) 1157 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY_W; 1158 if(statusL.attrFile & FILE_ARCHIVED) 1159 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_ARCHIVE_W; 1160 1161 pmDateTimeToFileTime(&statusL.fdateCreation, 1162 &statusL.ftimeCreation, 1163 &pInfo->ftCreationTime); 1164 pmDateTimeToFileTime(&statusL.fdateLastAccess, 1165 &statusL.ftimeLastAccess, 1166 &pInfo->ftLastAccessTime); 1167 pmDateTimeToFileTime(&statusL.fdateLastWrite, 1168 &statusL.ftimeLastWrite, 1169 &pInfo->ftLastWriteTime); 1170 1171 pInfo->nFileSizeHigh = statusL.cbFile.ulHi; 1172 pInfo->nFileSizeLow = statusL.cbFile.ulLo; 1173 pInfo->dwVolumeSerialNumber = 0; //todo 1174 pInfo->nNumberOfLinks = 1; 1175 pInfo->nFileIndexHigh = 0; 1176 pInfo->nFileIndexLow = 0; 1177 } 1181 1178 } 1182 1179 else 1183 1180 { 1184 FILESTATUS4 status = { 0 }; 1185 1186 rc = DosQueryFileInfo(hFile, 1187 FIL_QUERYEASIZE, 1188 &status, 1181 FILESTATUS4 status = { 0 }; 1182 1183 rc = DosQueryFileInfo(hFile, FIL_QUERYEASIZE, &status, 1189 1184 sizeof(status)); 1190 if(rc == NO_ERROR)1191 {1192 pInfo->dwFileAttributes = 0;1193 if(!(status.attrFile & NOT_NORMAL))1194 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_NORMAL_W;1195 if(status.attrFile & FILE_READONLY)1196 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_READONLY_W;1197 if(status.attrFile & FILE_HIDDEN)1198 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN_W;1199 if(status.attrFile & FILE_SYSTEM)1200 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_SYSTEM_W;1201 if(status.attrFile & FILE_DIRECTORY)1202 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY_W;1203 if(status.attrFile & FILE_ARCHIVED)1204 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_ARCHIVE_W;1205 1206 pmDateTimeToFileTime(&status.fdateCreation,1207 &status.ftimeCreation,1208 &pInfo->ftCreationTime);1209 pmDateTimeToFileTime(&status.fdateLastAccess,1210 &status.ftimeLastAccess,1211 &pInfo->ftLastAccessTime);1212 pmDateTimeToFileTime(&status.fdateLastWrite,1213 &status.ftimeLastWrite,1214 &pInfo->ftLastWriteTime);1215 1216 pInfo->nFileSizeHigh = 0;1217 pInfo->nFileSizeLow = status.cbFile;1218 pInfo->dwVolumeSerialNumber = 0; //todo1219 pInfo->nNumberOfLinks = 1;1220 pInfo->nFileIndexHigh = 0;1221 pInfo->nFileIndexLow = 0;1222 }1185 if(rc == NO_ERROR) 1186 { 1187 pInfo->dwFileAttributes = 0; 1188 if(!(status.attrFile & NOT_NORMAL)) 1189 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_NORMAL_W; 1190 if(status.attrFile & FILE_READONLY) 1191 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_READONLY_W; 1192 if(status.attrFile & FILE_HIDDEN) 1193 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN_W; 1194 if(status.attrFile & FILE_SYSTEM) 1195 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_SYSTEM_W; 1196 if(status.attrFile & FILE_DIRECTORY) 1197 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY_W; 1198 if(status.attrFile & FILE_ARCHIVED) 1199 pInfo->dwFileAttributes |= FILE_ATTRIBUTE_ARCHIVE_W; 1200 1201 pmDateTimeToFileTime(&status.fdateCreation, 1202 &status.ftimeCreation, 1203 &pInfo->ftCreationTime); 1204 pmDateTimeToFileTime(&status.fdateLastAccess, 1205 &status.ftimeLastAccess, 1206 &pInfo->ftLastAccessTime); 1207 pmDateTimeToFileTime(&status.fdateLastWrite, 1208 &status.ftimeLastWrite, 1209 &pInfo->ftLastWriteTime); 1210 1211 pInfo->nFileSizeHigh = 0; 1212 pInfo->nFileSizeLow = status.cbFile; 1213 pInfo->dwVolumeSerialNumber = 0; //todo 1214 pInfo->nNumberOfLinks = 1; 1215 pInfo->nFileIndexHigh = 0; 1216 pInfo->nFileIndexLow = 0; 1217 } 1223 1218 } 1224 1219 if(rc) { 1225 1220 SetLastError(error2WinError(rc)); 1226 return FALSE;1221 return FALSE; 1227 1222 } 1228 1223 SetLastError(ERROR_SUCCESS_W); … … 1242 1237 if(rc == NO_ERROR) 1243 1238 { 1244 if(creationdate && creationtime) {1245 fileInfo.fdateCreation = *(FDATE *)&creationdate;1246 1247 }1248 if(lastaccessdate && lastaccesstime) {1249 fileInfo.fdateLastAccess = *(FDATE *)&lastaccessdate;1250 1251 }1252 if(lastwritedate && lastwritetime) {1253 fileInfo.fdateLastWrite = *(FDATE *)&lastwritedate;1254 1255 }1256 1257 rc = DosSetFileInfo(hFile, FIL_STANDARD, &fileInfo, sizeof(fileInfo));1239 if(creationdate && creationtime) { 1240 fileInfo.fdateCreation = *(FDATE *)&creationdate; 1241 fileInfo.ftimeCreation = *(FTIME *)&creationtime; 1242 } 1243 if(lastaccessdate && lastaccesstime) { 1244 fileInfo.fdateLastAccess = *(FDATE *)&lastaccessdate; 1245 fileInfo.ftimeLastAccess = *(FTIME *)&lastaccesstime; 1246 } 1247 if(lastwritedate && lastwritetime) { 1248 fileInfo.fdateLastWrite = *(FDATE *)&lastwritedate; 1249 fileInfo.ftimeLastWrite = *(FTIME *)&lastwritetime; 1250 } 1251 1252 rc = DosSetFileInfo(hFile, FIL_STANDARD, &fileInfo, sizeof(fileInfo)); 1258 1253 } 1259 1254 1260 1255 if(rc) 1261 1256 { 1262 1263 1257 SetLastError(error2WinError(rc)); 1258 return FALSE; 1264 1259 } 1265 1260 SetLastError(ERROR_SUCCESS_W); … … 1279 1274 if(rc == NO_ERROR) 1280 1275 { 1281 *creationdate = *(WORD *)&fileInfo.fdateCreation;1282 1283 *lastaccessdate = *(WORD *)&fileInfo.fdateLastAccess;1284 1285 *lastwritedate = *(WORD *)&fileInfo.fdateLastWrite;1286 1276 *creationdate = *(WORD *)&fileInfo.fdateCreation; 1277 *creationtime = *(WORD *)&fileInfo.ftimeCreation; 1278 *lastaccessdate = *(WORD *)&fileInfo.fdateLastAccess; 1279 *lastaccesstime = *(WORD *)&fileInfo.ftimeLastAccess; 1280 *lastwritedate = *(WORD *)&fileInfo.fdateLastWrite; 1281 *lastwritetime = *(WORD *)&fileInfo.ftimeLastWrite; 1287 1282 } 1288 1283 1289 1284 if(rc) 1290 1285 { 1291 1292 1286 SetLastError(error2WinError(rc)); 1287 return FALSE; 1293 1288 } 1294 1289 SetLastError(ERROR_SUCCESS_W); … … 1919 1914 switch(rc) { 1920 1915 case ERROR_INVALID_DRIVE: 1921 return ERROR_INVALID_DRIVE_W;1916 return ERROR_INVALID_DRIVE_W; 1922 1917 case ERROR_NO_VOLUME_LABEL: 1923 return ERROR_NO_VOLUME_LABEL_W;1918 return ERROR_NO_VOLUME_LABEL_W; 1924 1919 case NO_ERROR: 1925 break;1920 break; 1926 1921 default: 1927 return ERROR_NOT_ENOUGH_MEMORY; //whatever1922 return ERROR_NOT_ENOUGH_MEMORY; //whatever 1928 1923 } 1929 1924 … … 1933 1928 if(lpVolumeNameBuffer) 1934 1929 { 1935 if(nVolumeNameSize > fsi.vol.cch) {1936 1937 }1930 if(nVolumeNameSize > fsi.vol.cch) { 1931 strcpy(lpVolumeNameBuffer, (PCHAR)fsi.vol.szVolLabel); 1932 } 1938 1933 else return ERROR_BUFFER_OVERFLOW_W; 1939 1934 } … … 2041 2036 { 2042 2037 APIRET rc; 2043 2044 rc = DosQuerySysInfo(iStart, iLast, pBuf, cbBuf); 2038 2039 rc = DosQuerySysInfo(iStart, iLast, pBuf, cbBuf); 2045 2040 SetLastError(error2WinError(rc,ERROR_INVALID_HANDLE)); 2046 2041 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.