Annotation of mstools/mfc/src/filex.cpp, revision 1.1.1.1

1.1       root        1: // This is a part of the Microsoft Foundation Classes C++ library.
                      2: // Copyright (C) 1992 Microsoft Corporation
                      3: // All rights reserved.
                      4: //
                      5: // This source code is only intended as a supplement to the
                      6: // Microsoft Foundation Classes Reference and Microsoft
                      7: // QuickHelp documentation provided with the library.
                      8: // See these sources for detailed information regarding the
                      9: // Microsoft Foundation Classes product.
                     10: 
                     11: #include "afx.h"
                     12: 
                     13: #pragma hdrstop
                     14: 
                     15: #include <errno.h>
                     16: 
                     17: #ifdef AFX_AUX_SEG
                     18: #pragma code_seg(AFX_AUX_SEG)
                     19: #endif
                     20: 
                     21: #ifdef _DEBUG
                     22: #undef THIS_FILE
                     23: static char BASED_CODE THIS_FILE[] = __FILE__;
                     24: #endif
                     25: 
                     26: #ifdef _DEBUG
                     27: 
                     28: // character strings to use for dumping CFileException
                     29: static char BASED_CODE szNone[] = "none";
                     30: static char BASED_CODE szGeneric[] = "generic";
                     31: static char BASED_CODE szFileNotFound[] = "fileNotFound";
                     32: static char BASED_CODE szBadPath[] = "badPath";
                     33: static char BASED_CODE szTooManyOpenFiles[] = "tooManyOpenFiles";
                     34: static char BASED_CODE szAccessDenied[] = "accessDenied";
                     35: static char BASED_CODE szInvalidFile[] = "invalidFile";
                     36: static char BASED_CODE szRemoveCurrentDir[] = "removeCurrentDir";
                     37: static char BASED_CODE szDirectoryFull[] = "directoryFull";
                     38: static char BASED_CODE szBadSeek[] = "badSeek";
                     39: static char BASED_CODE szHardIO[] = "hardIO";
                     40: static char BASED_CODE szSharingViolation[] = "sharingViolation";
                     41: static char BASED_CODE szLockViolation[] = "lockViolation";
                     42: static char BASED_CODE szDiskFull[] = "diskFull";
                     43: static char BASED_CODE szEndOfFile[] = "endOfFile";
                     44: 
                     45: static char FAR* BASED_CODE rgszCFileExceptionCause[] =
                     46: {
                     47:        szNone,
                     48:        szGeneric,
                     49:        szFileNotFound,
                     50:        szBadPath,
                     51:        szTooManyOpenFiles,
                     52:        szAccessDenied,
                     53:        szInvalidFile,
                     54:        szRemoveCurrentDir,
                     55:        szDirectoryFull,
                     56:        szBadSeek,
                     57:        szHardIO,
                     58:        szSharingViolation,
                     59:        szLockViolation,
                     60:        szDiskFull,
                     61:        szEndOfFile,
                     62: };
                     63: 
                     64: static char BASED_CODE szUnknown[] = "unknown";
                     65: #endif
                     66: 
                     67: /////////////////////////////////////////////////////////////////////////////
                     68: // CFileException
                     69: 
                     70: IMPLEMENT_DYNAMIC(CFileException, CException)
                     71: 
                     72: void
                     73: CFileException::ThrowOsError(LONG lOsError)
                     74: {
                     75:        if (lOsError != 0)
                     76:                AfxThrowFileException(CFileException::OsErrorToException(lOsError),
                     77:                        lOsError);
                     78: }
                     79: 
                     80: void
                     81: CFileException::ThrowErrno(int nErrno)
                     82: {
                     83:        if (nErrno != 0)
                     84:                AfxThrowFileException(CFileException::ErrnoToException(nErrno),
                     85:                        _doserrno);
                     86: }
                     87: 
                     88: 
                     89: #ifdef _DEBUG
                     90: void
                     91: CFileException::Dump(CDumpContext& dc) const
                     92: {
                     93:        CObject::Dump(dc);
                     94:        dc << " m_cause = ";
                     95: 
                     96:        if (m_cause >= 0 &&
                     97:                m_cause < sizeof(rgszCFileExceptionCause) / sizeof(char FAR*))
                     98:        {
                     99:                dc << rgszCFileExceptionCause[m_cause];
                    100:        }
                    101:        else
                    102:        {
                    103:                dc << szUnknown;
                    104:        }
                    105:        dc << ", lOsError = " << m_lOsError;
                    106: }
                    107: #endif
                    108: 
                    109: void
                    110: PASCAL AfxThrowFileException(int cause, LONG lOsError)
                    111: {
                    112: #ifdef _DEBUG
                    113:        TRACE("CFile exception: ");
                    114:        if (cause >= 0 &&
                    115:                cause < sizeof(rgszCFileExceptionCause) / sizeof(char FAR*))
                    116:        {
                    117:                afxDump << (char FAR*)rgszCFileExceptionCause[cause];
                    118:        }
                    119:        else
                    120:        {
                    121:                afxDump << (char FAR*)szUnknown;
                    122:        }
                    123:        afxDump << ", OS error information = " << (void FAR*)lOsError << "\n";
                    124: #endif
                    125:        THROW(new CFileException(cause, lOsError));
                    126: }
                    127: 
                    128: 
                    129: int
                    130: CFileException::ErrnoToException(int nErrno)
                    131: {
                    132:        switch(nErrno)
                    133:        {
                    134:                case EPERM:
                    135:                case EACCES:
                    136:                                                return CFileException::accessDenied;
                    137:                case EBADF:     return CFileException::invalidFile;
                    138:                case EDEADLOCK: return CFileException::sharingViolation;
                    139:                case EMFILE:    return CFileException::tooManyOpenFiles;
                    140:                case ENOENT:
                    141:                case ENFILE:
                    142:                                                return CFileException::fileNotFound;
                    143:                case ENOSPC:    return CFileException::diskFull;
                    144:                case EINVAL:
                    145:                case EIO:       return CFileException::hardIO;
                    146:                default:
                    147:                                                return CFileException::generic;
                    148:        }
                    149: }
                    150: 
                    151: 
                    152: #ifdef _DOSWIN
                    153: int
                    154: CFileException::OsErrorToException(LONG lOsErr)
                    155: {
                    156:        switch ((UINT)lOsErr)
                    157:        {
                    158:                // DOS Error codes
                    159:                case 0x1: return CFileException::generic;
                    160:                case 0x2: return CFileException::fileNotFound;
                    161:                case 0x3: return CFileException::badPath;
                    162:                case 0x4: return CFileException::tooManyOpenFiles;
                    163:                case 0x5: return CFileException::accessDenied;
                    164:                case 0x6: return CFileException::invalidFile;
                    165:                case 0xf: return CFileException::badPath;
                    166:                case 0x10: return CFileException::removeCurrentDir;
                    167:                case 0x12: return CFileException::directoryFull;
                    168:                case 0x19: return CFileException::badSeek;
                    169:                case 0x1d: return CFileException::hardIO;
                    170:                case 0x1e: return CFileException::hardIO;
                    171:                case 0x1f: return CFileException::hardIO;
                    172:                case 0x58: return CFileException::hardIO;
                    173:                case 0x20: return CFileException::sharingViolation;
                    174:                case 0x21: return CFileException::lockViolation;
                    175:                case 0x23: return CFileException::tooManyOpenFiles;
                    176:                case 0x24: return CFileException::sharingViolation;
                    177:                case 0x41: return CFileException::accessDenied;
                    178:                case 0x43: return CFileException::fileNotFound;
                    179:                case 0x52: return CFileException::accessDenied;
                    180:                default: return CFileException::generic;
                    181:        }
                    182: }
                    183: #endif // _WINDOWS
                    184: 
                    185: #ifdef _NTWIN
                    186: #include "winerror.h"
                    187: int
                    188: CFileException::OsErrorToException(LONG lOsErr)
                    189: {
                    190:        switch ((UINT)lOsErr)
                    191:        {
                    192:        // NT Error codes
                    193:                case NO_ERROR:                  return CFileException::none;
                    194:                case ERROR_FILE_NOT_FOUND:      return CFileException::fileNotFound;
                    195:                case ERROR_PATH_NOT_FOUND:      return CFileException::badPath;
                    196:                case ERROR_TOO_MANY_OPEN_FILES: return CFileException::tooManyOpenFiles;
                    197:                case ERROR_ACCESS_DENIED:       return CFileException::accessDenied;
                    198:                case ERROR_INVALID_HANDLE:      return CFileException::fileNotFound;
                    199:                case ERROR_BAD_FORMAT:          return CFileException::invalidFile;
                    200:                case ERROR_INVALID_ACCESS:      return CFileException::accessDenied;
                    201:                case ERROR_INVALID_DRIVE:       return CFileException::badPath;
                    202:                case ERROR_CURRENT_DIRECTORY:   return CFileException::removeCurrentDir;
                    203:                case ERROR_NOT_SAME_DEVICE:     return CFileException::badPath;
                    204:                case ERROR_NO_MORE_FILES:       return CFileException::fileNotFound;
                    205:                case ERROR_WRITE_PROTECT:       return CFileException::accessDenied;
                    206:                case ERROR_BAD_UNIT:            return CFileException::hardIO;
                    207:                case ERROR_NOT_READY:           return CFileException::hardIO;
                    208:                case ERROR_BAD_COMMAND:         return CFileException::hardIO;
                    209:                case ERROR_CRC:                 return CFileException::hardIO;
                    210:                case ERROR_BAD_LENGTH:          return CFileException::badSeek;
                    211:                case ERROR_SEEK:                return CFileException::badSeek;
                    212:                case ERROR_NOT_DOS_DISK:        return CFileException::invalidFile;
                    213:                case ERROR_SECTOR_NOT_FOUND:    return CFileException::badSeek;
                    214:                case ERROR_WRITE_FAULT:         return CFileException::accessDenied;
                    215:                case ERROR_READ_FAULT:          return CFileException::badSeek;
                    216:                case ERROR_SHARING_VIOLATION:   return CFileException::sharingViolation;
                    217:                case ERROR_NOT_LOCKED:          return CFileException::lockViolation;
                    218:                case ERROR_LOCK_VIOLATION:      return CFileException::lockViolation;
                    219:                case ERROR_WRONG_DISK:          return CFileException::badPath;
                    220:                case ERROR_SHARING_BUFFER_EXCEEDED:     return CFileException::tooManyOpenFiles;
                    221:                case ERROR_HANDLE_EOF:          return CFileException::endOfFile;
                    222:                case ERROR_HANDLE_DISK_FULL:    return CFileException::diskFull;
                    223:                case ERROR_DUP_NAME:            return CFileException::badPath;
                    224:                case ERROR_BAD_NETPATH:         return CFileException::badPath;
                    225:                case ERROR_NETWORK_BUSY:        return CFileException::accessDenied;
                    226:                case ERROR_DEV_NOT_EXIST:       return CFileException::badPath;
                    227:                case ERROR_ADAP_HDW_ERR:        return CFileException::hardIO;
                    228:                case ERROR_BAD_NET_RESP:        return CFileException::accessDenied;
                    229:                case ERROR_UNEXP_NET_ERR:       return CFileException::hardIO;
                    230:                case ERROR_BAD_REM_ADAP:        return CFileException::invalidFile;
                    231:                case ERROR_NO_SPOOL_SPACE:      return CFileException::directoryFull;
                    232:                case ERROR_NETNAME_DELETED:     return CFileException::accessDenied;
                    233:                case ERROR_NETWORK_ACCESS_DENIED:       return CFileException::accessDenied;
                    234:                case ERROR_BAD_DEV_TYPE:        return CFileException::invalidFile;
                    235:                case ERROR_BAD_NET_NAME:        return CFileException::badPath;
                    236:                case ERROR_TOO_MANY_NAMES:      return CFileException::tooManyOpenFiles;
                    237:                case ERROR_SHARING_PAUSED:      return CFileException::badPath;
                    238:                case ERROR_REQ_NOT_ACCEP:       return CFileException::accessDenied;
                    239:                case ERROR_FILE_EXISTS:         return CFileException::accessDenied;
                    240:                case ERROR_CANNOT_MAKE:         return CFileException::accessDenied;
                    241:                case ERROR_ALREADY_ASSIGNED:    return CFileException::badPath;
                    242:                case ERROR_INVALID_PASSWORD:    return CFileException::accessDenied;
                    243:                case ERROR_NET_WRITE_FAULT:     return CFileException::hardIO;
                    244:                case ERROR_DISK_CHANGE:         return CFileException::fileNotFound;
                    245:                case ERROR_DRIVE_LOCKED:        return CFileException::lockViolation;
                    246:                case ERROR_BUFFER_OVERFLOW:     return CFileException::badPath;
                    247:                case ERROR_DISK_FULL:           return CFileException::diskFull;
                    248:                case ERROR_NO_MORE_SEARCH_HANDLES:      return CFileException::tooManyOpenFiles;
                    249:                case ERROR_INVALID_TARGET_HANDLE:       return CFileException::invalidFile;
                    250:                case ERROR_INVALID_CATEGORY:    return CFileException::hardIO;
                    251:                case ERROR_INVALID_NAME:        return CFileException::badPath;
                    252:                case ERROR_INVALID_LEVEL:       return CFileException::badPath;
                    253:                case ERROR_NO_VOLUME_LABEL:     return CFileException::badPath;
                    254:                case ERROR_NEGATIVE_SEEK:       return CFileException::badSeek;
                    255:                case ERROR_SEEK_ON_DEVICE:      return CFileException::badSeek;
                    256:                case ERROR_DIR_NOT_ROOT:        return CFileException::badPath;
                    257:                case ERROR_DIR_NOT_EMPTY:       return CFileException::removeCurrentDir;
                    258:                case ERROR_LABEL_TOO_LONG:      return CFileException::badPath;
                    259:                case ERROR_BAD_PATHNAME:        return CFileException::badPath;
                    260:                case ERROR_LOCK_FAILED:         return CFileException::lockViolation;
                    261:                case ERROR_BUSY:                return CFileException::accessDenied;
                    262:                case ERROR_INVALID_ORDINAL:     return CFileException::invalidFile;
                    263:                case ERROR_ALREADY_EXISTS:      return CFileException::accessDenied;
                    264:                case ERROR_INVALID_EXE_SIGNATURE:       return CFileException::invalidFile;
                    265:                case ERROR_BAD_EXE_FORMAT:      return CFileException::invalidFile;
                    266:                case ERROR_FILENAME_EXCED_RANGE:        return CFileException::badPath;
                    267:                case ERROR_META_EXPANSION_TOO_LONG:     return CFileException::badPath;
                    268:                case ERROR_DIRECTORY:           return CFileException::badPath;
                    269:                case ERROR_OPERATION_ABORTED:   return CFileException::hardIO;
                    270:                case ERROR_IO_INCOMPLETE:       return CFileException::hardIO;
                    271:                case ERROR_IO_PENDING:          return CFileException::hardIO;
                    272:                case ERROR_SWAPERROR:           return CFileException::accessDenied;
                    273:                default:                        return CFileException::generic;
                    274:        }
                    275: }
                    276: #endif // _NTWIN
                    277: 
                    278: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.