# HG changeset patch # User Claus Gittinger # Date 1008096202 -3600 # Node ID 7d0a04fb50be239930f53e2ce501f791a581e0fa # Parent 03945cc43a973b252bebe92c8dc580e1eaef3c72 *** empty log message *** diff -r 03945cc43a97 -r 7d0a04fb50be OSErrorHolder.st --- a/OSErrorHolder.st Tue Dec 11 19:09:14 2001 +0100 +++ b/OSErrorHolder.st Tue Dec 11 19:43:22 2001 +0100 @@ -67,10 +67,112 @@ !OSErrorHolder class methodsFor:'Signal constants'! +allocRetrySignal + ^ Signals at:#allocRetrySignal +! + +badAccessorSignal + ^ Signals at:#badAccessorSignal +! + +badArgumentsSignal + ^ Signals at:#badArgumentsSignal +! + +existingReferentSignal + ^ Signals at:#existingReferentSignal +! + +illegalOperationSignal + ^ Signals at:#illegalOperationSignal +! + +inaccessibleSignal + ^ Signals at:#inaccessibleSignal +! + +inappropriateOperationSignal + ^ Signals at:#inappropriateOperationSignal +! + +inappropriateReferentSignal + ^ Signals at:#inappropriateReferentSignal +! + invalidArgumentsSignal "return the signal for invalid arguments (e.g. right class, wrong value)." ^ OsInvalidArgumentsError +! + +needRetrySignal + ^ Signals at:#needRetrySignal +! + +noDataSignal + ^ Signals at:#noDataSignal +! + +noMemorySignal + ^ Signals at:#noMemorySignal +! + +noPermissionsSignal + ^ Signals at:#noPermissionsSignal +! + +noResourcesSignal + ^ Signals at:#noResourcesSignal +! + +nonexistentSignal + "return the signal for non existing referents (i.e. device, file etc.)." + + ^ Signals at:#nonexistentSignal +! + +notReadySignal + ^ Signals at:#notReadySignal +! + +peerFaultSignal + ^ Signals at:#peerFaultSignal +! + +rangeErrorSignal + ^ Signals at:#rangeErrorSignal +! + +transferFaultSignal + ^ Signals at:#transferFaultSignal +! + +transientErrorSignal + ^ Signals at:#transientErrorSignal +! + +unavailableReferentSignal + ^ Signals at:#unavailableReferentSignal +! + +underSpecifiedSignal + ^ Signals at:#underSpecifiedSignal +! + +unpreparedOperationSignal + ^ Signals at:#unpreparedOperationSignal +! + +unsupportedOperationSignal + ^ Signals at:#unsupportedOperationSignal +! + +volumeFullSignal + ^ Signals at:#volumeFullSignal +! + +wrongSubtypeForOperationSignal + ^ Signals at:#wrongSubtypeForOperationSignal ! ! !OSErrorHolder class methodsFor:'accessing'! @@ -79,12 +181,6 @@ ^ OperatingSystem errorSignal "Created: 25.1.1997 / 18:07:55 / cg" -! - -peerFaultSignal - ^ OperatingSystem errorSignal - - "Created: 25.1.1997 / 18:07:55 / cg" ! ! !OSErrorHolder class methodsFor:'class initialization'! @@ -95,12 +191,28 @@ |s| OSErrorSignal isNil ifTrue:[ - OSErrorSignal := Error newSignalMayProceed:true. - OSErrorSignal nameClass:self message:#errorSignal. + OSErrorSignal := OsError. OSErrorSignal notifierString:'OperatingSystem error'. + Signals := Dictionary new:28. - Signals := Dictionary new:28. + OsNoResourcesError notifierString:'Not enough resources'. + Signals at:#noResourcesSignal put:OsNoResourcesError. + + OsIllegalOperation notifierString:'Illegal Operation'. + Signals at:#illegalOperationSignal put:OsIllegalOperation. + + OsInvalidArgumentsError notifierString:'Invalid Arguments'. + Signals at:#invalidArgumentsSignal put:OsInvalidArgumentsError. + + OsInaccessibleError notifierString:'Referent inaccessible'. + Signals at:#inaccessibleSignal put:OsInaccessibleError. + + OsTransferFaultError notifierString:'Transfer fault'. + Signals at:#transferFaultSignal put:OsTransferFaultError. + + OsNeedRetryError notifierString:'Retry Operation'. + Signals at:#needRetrySignal put:OsNeedRetryError. false ifTrue:[ "/ Information signals @@ -109,84 +221,83 @@ notifier:'Information'. self setupSignal:#operationStartedSignal parent:s notifier:'Operation started'. - +]. "/ Retry signals - s := self setupSignal:#needRetrySignal parent:OSErrorSignal - notifier:'Retry Operation'. - self setupSignal:#notReadySignal parent:s + self setupSignal:#notReadySignal parent:OsNeedRetryError notifier:' -- referent not ready'. - self setupSignal:#transientErrorSignal parent:s + self setupSignal:#transientErrorSignal parent:OsNeedRetryError notifier:' -- transient error'. - self setupSignal:#allocRetrySignal parent:s + self setupSignal:#allocRetrySignal parent:OsNeedRetryError notifier:' -- allocation failure'. "/ Resource signals - s := self setupSignal:#noResourcesSignal parent:OSErrorSignal - notifier:'Not enough resources'. - self setupSignal:#noMemorySignal parent:s + self setupSignal:#noMemorySignal parent:OsNoResourcesError notifier:' -- memory'. "/ Transfer faults - s := self setupSignal:#transferFaultSignal parent:OSErrorSignal - notifier:'Transfer fault'. - self setupSignal:#noDataSignal parent:s + self setupSignal:#noDataSignal parent:OsTransferFaultError notifier:'Data unavailable/EOF reached'. - self setupSignal:#peerFaultSignal parent:s + self setupSignal:#peerFaultSignal parent:OsTransferFaultError notifier:'Communication with peer failed'. - self setupSignal:#volumeFullSignal parent:s + self setupSignal:#volumeFullSignal parent:OsTransferFaultError notifier:'Volume full'. "/ Inaccesible faults - s := self setupSignal:#inaccessibleSignal parent:OSErrorSignal - notifier:'Referent inaccessible'. - self setupSignal:#nonExistantSignal parent:s + self setupSignal:#nonexistentSignal parent:OsInaccessibleError notifier:'File does not exist'. - self setupSignal:#unavailableReferentSignal parent:s + self setupSignal:#unavailableReferentSignal parent:OsInaccessibleError notifier:' currently'. - self setupSignal:#noPermissionsSignal parent:s + self setupSignal:#noPermissionsSignal parent:OsInaccessibleError notifier:'Permission denied'. - self setupSignal:#existingReferentSignal parent:s + self setupSignal:#existingReferentSignal parent:OsInaccessibleError notifier:' -- already exists or currently in use'. - self setupSignal:#inappropriateReferentSignal parent:s + self setupSignal:#inappropriateReferentSignal parent:OsInaccessibleError notifier:' -- operation inappropriate'. "/ Illegal operations - s := self setupSignal:#illegalOperationSignal parent:OSErrorSignal - notifier:'Illegal Operation'. - self setupSignal:#inappropriateOperationSignal parent:s + self setupSignal:#inappropriateOperationSignal parent:OsIllegalOperation notifier:'Inappropriate operation'. - self setupSignal:#wrongSubtypeForOperationSignal parent:s + self setupSignal:#wrongSubtypeForOperationSignal parent:OsIllegalOperation notifier:' -- wrong subtype'. - self setupSignal:#unsupportedOperationSignal parent:s + self setupSignal:#unsupportedOperationSignal parent:OsIllegalOperation notifier:' -- on this platform'. - self setupSignal:#unpreparedOperationSignal parent:s + self setupSignal:#unpreparedOperationSignal parent:OsIllegalOperation notifier:' -- wrong sequence'. "/ Illegal arguments - s := self setupSignal:#invalidArgumentsSignal parent:OSErrorSignal - notifier:'Invalid Arguments'. - self setupSignal:#badArgumentsSignal parent:s + self setupSignal:#badArgumentsSignal parent:OsInvalidArgumentsError notifier:' -- wrong class'. - self setupSignal:#badAccessorSignal parent:s + self setupSignal:#badAccessorSignal parent:OsInvalidArgumentsError notifier:' -- accessor invalid'. - self setupSignal:#rangeErrorSignal parent:s + self setupSignal:#rangeErrorSignal parent:OsInvalidArgumentsError notifier:' -- out of range'. - self setupSignal:#underSpecifiedSignal parent:s + self setupSignal:#underSpecifiedSignal parent:OsInvalidArgumentsError notifier:' -- operation not fully specified'. -]. ]. - " OSErrorSignal := nil. self initialize " +! + +setupSignal:aSymbol parent:parentSignal notifier:aString + "setup a signal, which can be retrieved by sending aSymbol to self. + Return the new signal" + + |s| + + Signals at:aSymbol + put:(s := parentSignal newSignal + notifierString:aString; + nameClass:self message:aSymbol). + ^ s ! ! !OSErrorHolder methodsFor:'accessing'! diff -r 03945cc43a97 -r 7d0a04fb50be OsError.st --- a/OsError.st Tue Dec 11 19:09:14 2001 +0100 +++ b/OsError.st Tue Dec 11 19:43:22 2001 +0100 @@ -1,6 +1,4 @@ -'From Smalltalk/X, Version:4.1.4 on 11-dec-2001 at 02:52:58 pm' ! - -"{ Package: '__NoProject__' }" +"{ Package: 'stx:libbasic' }" Error subclass:#OsError instanceVariableNames:'' diff -r 03945cc43a97 -r 7d0a04fb50be OsIllegalOperation.st --- a/OsIllegalOperation.st Tue Dec 11 19:09:14 2001 +0100 +++ b/OsIllegalOperation.st Tue Dec 11 19:43:22 2001 +0100 @@ -1,6 +1,4 @@ -'From Smalltalk/X, Version:4.1.4 on 11-dec-2001 at 02:53:01 pm' ! - -"{ Package: '__NoProject__' }" +"{ Package: 'stx:libbasic' }" OsError subclass:#OsIllegalOperation instanceVariableNames:'' diff -r 03945cc43a97 -r 7d0a04fb50be OsInaccessibleError.st --- a/OsInaccessibleError.st Tue Dec 11 19:09:14 2001 +0100 +++ b/OsInaccessibleError.st Tue Dec 11 19:43:22 2001 +0100 @@ -1,6 +1,4 @@ -'From Smalltalk/X, Version:4.1.4 on 11-dec-2001 at 02:53:04 pm' ! - -"{ Package: '__NoProject__' }" +"{ Package: 'stx:libbasic' }" OsError subclass:#OsInaccessibleError instanceVariableNames:'' diff -r 03945cc43a97 -r 7d0a04fb50be OsInvalidArgumentsError.st --- a/OsInvalidArgumentsError.st Tue Dec 11 19:09:14 2001 +0100 +++ b/OsInvalidArgumentsError.st Tue Dec 11 19:43:22 2001 +0100 @@ -1,6 +1,4 @@ -'From Smalltalk/X, Version:4.1.4 on 11-dec-2001 at 02:53:07 pm' ! - -"{ Package: '__NoProject__' }" +"{ Package: 'stx:libbasic' }" OsError subclass:#OsInvalidArgumentsError instanceVariableNames:'' diff -r 03945cc43a97 -r 7d0a04fb50be OsNeedRetryError.st --- a/OsNeedRetryError.st Tue Dec 11 19:09:14 2001 +0100 +++ b/OsNeedRetryError.st Tue Dec 11 19:43:22 2001 +0100 @@ -1,6 +1,4 @@ -'From Smalltalk/X, Version:4.1.4 on 11-dec-2001 at 02:53:09 pm' ! - -"{ Package: '__NoProject__' }" +"{ Package: 'stx:libbasic' }" OsError subclass:#OsNeedRetryError instanceVariableNames:'' diff -r 03945cc43a97 -r 7d0a04fb50be OsNoResourcesError.st --- a/OsNoResourcesError.st Tue Dec 11 19:09:14 2001 +0100 +++ b/OsNoResourcesError.st Tue Dec 11 19:43:22 2001 +0100 @@ -1,6 +1,4 @@ -'From Smalltalk/X, Version:4.1.4 on 11-dec-2001 at 02:53:12 pm' ! - -"{ Package: '__NoProject__' }" +"{ Package: 'stx:libbasic' }" OsError subclass:#OsNoResourcesError instanceVariableNames:'' diff -r 03945cc43a97 -r 7d0a04fb50be OsNotification.st --- a/OsNotification.st Tue Dec 11 19:09:14 2001 +0100 +++ b/OsNotification.st Tue Dec 11 19:43:22 2001 +0100 @@ -1,6 +1,4 @@ -'From Smalltalk/X, Version:4.1.4 on 11-dec-2001 at 02:53:14 pm' ! - -"{ Package: '__NoProject__' }" +"{ Package: 'stx:libbasic' }" OsError subclass:#OsNotification instanceVariableNames:'' diff -r 03945cc43a97 -r 7d0a04fb50be OsTransferFaultError.st --- a/OsTransferFaultError.st Tue Dec 11 19:09:14 2001 +0100 +++ b/OsTransferFaultError.st Tue Dec 11 19:43:22 2001 +0100 @@ -1,6 +1,4 @@ -'From Smalltalk/X, Version:4.1.4 on 11-dec-2001 at 02:53:16 pm' ! - -"{ Package: '__NoProject__' }" +"{ Package: 'stx:libbasic' }" OsError subclass:#OsTransferFaultError instanceVariableNames:'' diff -r 03945cc43a97 -r 7d0a04fb50be Win32OperatingSystem.st --- a/Win32OperatingSystem.st Tue Dec 11 19:09:14 2001 +0100 +++ b/Win32OperatingSystem.st Tue Dec 11 19:43:22 2001 +0100 @@ -3130,7 +3130,7 @@ ! createFileForReadWrite:pathName - ^ self openFile:pathName attributes:#(#'GENERIC_READ' #'GENERIC_WRITE') + ^ self openFile:pathName attributes:#(#'GENERIC_READ' #'GENERIC_WRITE' #'CREATE_ALWAYS') ! linkFile:oldPath to:newPath @@ -3160,7 +3160,7 @@ attributes is a collection of symbols specifying how the file is to be opened." - |fileHandle errorNumber| + |fileHandle errorNumber argumentError| fileHandle := Win32Handle new. @@ -3174,10 +3174,12 @@ if (! __isString(pathName)) { fileHandle = nil; + argumentError = @symbol(badPathName); goto badArgument; } if (! __isArray(attributeSpec)) { fileHandle = nil; + argumentError = @symbol(badAttributeSpec); goto badArgument; } @@ -3228,6 +3230,11 @@ fprintf(stderr, "Win32OS [warning]: unsupported open mode\n"); } } + if (create == 0) { + fileHandle = nil; + argumentError = @symbol(missingCreateMode); + goto badArgument; + } fprintf(stderr, "name:<%s> access:%x share:%x create:%x attr:%x\n", name, access, share, create, attr); @@ -3246,7 +3253,7 @@ ^ fileHandle. ]. errorNumber isNil ifTrue:[ - self error:'invalid argument(s)'. + self error:'invalid argument(s): ', argumentError. ] ifFalse:[ (self errorHolderForNumber:errorNumber) reportError ]. @@ -3258,7 +3265,7 @@ ! openFileForRead:pathName - ^ self openFile:pathName attributes:#(#'GENERIC_READ') + ^ self openFile:pathName attributes:#(#'GENERIC_READ' #'OPEN_EXISTING') ! openFileForReadAppend:pathName @@ -8525,7 +8532,7 @@ ! version - ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.102 2001-12-11 17:43:56 cg Exp $' + ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.103 2001-12-11 18:43:22 cg Exp $' ! ! !Win32OperatingSystem::Win32FILEHandle methodsFor:'release'! @@ -8552,7 +8559,7 @@ ! version - ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.102 2001-12-11 17:43:56 cg Exp $' + ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.103 2001-12-11 18:43:22 cg Exp $' ! ! !Win32OperatingSystem::Win32Handle methodsFor:'io'! @@ -8770,6 +8777,12 @@ " ! ! +!Win32OperatingSystem::Win32Handle methodsFor:'queries'! + +isValid + ^ self address ~~0 +! ! + !Win32OperatingSystem::Win32Handle methodsFor:'release'! closeFile @@ -8788,6 +8801,6 @@ !Win32OperatingSystem class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.102 2001-12-11 17:43:56 cg Exp $' + ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.103 2001-12-11 18:43:22 cg Exp $' ! ! Win32OperatingSystem initialize!