--- 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'!
--- 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:''
--- 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:''
--- 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:''
--- 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:''
--- 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:''
--- 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:''
--- 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:''
--- 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:''
--- 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!