*** empty log message ***
authorClaus Gittinger <cg@exept.de>
Tue, 11 Dec 2001 19:43:22 +0100
changeset 6297 7d0a04fb50be
parent 6296 03945cc43a97
child 6298 5814584e3d67
*** empty log message ***
OSErrorHolder.st
OsError.st
OsIllegalOperation.st
OsInaccessibleError.st
OsInvalidArgumentsError.st
OsNeedRetryError.st
OsNoResourcesError.st
OsNotification.st
OsTransferFaultError.st
Win32OperatingSystem.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'!
--- 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!