Win32OperatingSystem.st
changeset 7662 32a1185158f3
parent 7645 fd98d4cfa617
child 7664 6fcd1da5716f
--- a/Win32OperatingSystem.st	Fri Oct 10 18:39:13 2003 +0200
+++ b/Win32OperatingSystem.st	Sun Oct 12 14:30:18 2003 +0200
@@ -2759,7 +2759,7 @@
     DWORD endStatus;
     int status = -1;
 
-    if (__isExternalAddress(aProcessId)) {
+    if (__isExternalAddressLike(aProcessId)) {
 	HANDLE handle = _HANDLEVal(aProcessId);
 	if (handle) {
 #ifdef DO_WRAP_CALLS
@@ -2970,21 +2970,21 @@
 	    lpsiStartInfo.hStdError  = (HANDLE) _get_osfhandle (2);
 	} else if (__isArray(fdArray) && (__arraySize(fdArray) >= 3)) {
 	    if (__ArrayInstPtr(fdArray)->a_element[0] != nil) {
-		if (__isExternalAddress(__ArrayInstPtr(fdArray)->a_element[0])) {
+		if (__isExternalAddressLike(__ArrayInstPtr(fdArray)->a_element[0])) {
 		    lpsiStartInfo.hStdInput = _HANDLEVal(__ArrayInstPtr(fdArray)->a_element[0]);
 		} else {
 		    lpsiStartInfo.hStdInput = (HANDLE) _get_osfhandle (__intVal(__ArrayInstPtr(fdArray)->a_element[0]));
 		}
 	    }
 	    if (__ArrayInstPtr(fdArray)->a_element[1] != nil) {
-		if (__isExternalAddress(__ArrayInstPtr(fdArray)->a_element[1])) {
+		if (__isExternalAddressLike(__ArrayInstPtr(fdArray)->a_element[1])) {
 		    lpsiStartInfo.hStdOutput = _HANDLEVal(__ArrayInstPtr(fdArray)->a_element[1]);
 		} else {
 		    lpsiStartInfo.hStdOutput = (HANDLE) _get_osfhandle (__intVal(__ArrayInstPtr(fdArray)->a_element[1]));
 		}
 	    }
 	    if (__ArrayInstPtr(fdArray)->a_element[2] != nil) {
-		if (__isExternalAddress(__ArrayInstPtr(fdArray)->a_element[2])) {
+		if (__isExternalAddressLike(__ArrayInstPtr(fdArray)->a_element[2])) {
 		    lpsiStartInfo.hStdError  = _HANDLEVal(__ArrayInstPtr(fdArray)->a_element[2]);
 		} else {
 		    lpsiStartInfo.hStdError = (HANDLE) _get_osfhandle (__intVal(__ArrayInstPtr(fdArray)->a_element[2]));
@@ -3127,23 +3127,22 @@
 
 !Win32OperatingSystem class methodsFor:'file access'!
 
-closeFd:anInteger
+closeFd:anIntegerOrHandle
     "low level close of a filedescriptor"
 
 %{
-     if (__isExternalAddress(anInteger) ) {
-	if( !CloseHandle( anInteger ) ) {
-	    fprintf( stderr, "Could not close handle : %d\n", anInteger);
-	}
+    if (__isExternalAddressLike(anIntegerOrHandle) ) {
+       if( !CloseHandle( anIntegerOrHandle ) ) {
+	   fprintf( stderr, "Could not close handle : %x\n", anIntegerOrHandle);
+       }
+       RETURN(self);
+    }
+    if (__isSmallInteger(anIntegerOrHandle)) {
+	close(__intVal(anIntegerOrHandle));
 	RETURN(self);
-     } else {
-	if (__isSmallInteger(anInteger)) {
-	    close(__intVal(anInteger));
-	    RETURN(self);
-	}
-     }
+    }
 %}.
-     ^ self primitiveFailed.
+    ^ self primitiveFailed.
 !
 
 createDirectory:aPathName
@@ -4875,7 +4874,7 @@
      TODO: send it a WM_QUIT instead, to allow for proper shutdown."
 
 %{  
-    if (__isExternalAddress(processId) ) {
+    if (__isExternalAddressLike(processId) ) {
 	HANDLE __pid = _HANDLEVal(processId);
 
 #ifdef PROCESS1DEBUGWIN32
@@ -4908,7 +4907,7 @@
      Not implemented - TODO: enumerate all sub-processes and terminate them all ..."
 
 %{  
-    if (__isExternalAddress(processGroupId) ) {
+    if (__isExternalAddressLike(processGroupId) ) {
 	HANDLE __pgid = _HANDLEVal(processGroupId);
 
 #ifdef PROCESS1DEBUGWIN32
@@ -4976,12 +4975,14 @@
 closePid:pid
     "free pid resource"
 %{
-    if (__isExternalAddress(pid) ) {
-	if (_HANDLEVal(pid) != 0) {
+    if (__isExternalAddressLike(pid) ) {
+	HANDLE __pid = _HANDLEVal(pid);
+
+	if (__pid != 0) {
 #ifdef PROCESSDEBUGWIN32
-	    printf("Close ProcessHandle %x\n",_HANDLEVal(pid));
-#endif
-	    CloseHandle(_HANDLEVal(pid));
+	    printf("Close ProcessHandle %x\n", __pid);
+#endif
+	    CloseHandle(__pid);
 	    _HANDLEVal(pid) = 0;
 	}
     }
@@ -6995,7 +6996,7 @@
 %{
     DWORD endStatus;
 
-    if (__isExternalAddress(pidToWait) ) {
+    if (__isExternalAddressLike(pidToWait) ) {
 	HANDLE __pidToWait = _HANDLEVal(pidToWait);
 	int t;
 
@@ -7114,7 +7115,7 @@
 	    if (fd != nil) {
 		HANDLE h;
 
-		if (__isExternalAddress(fd)) {
+		if (__isExternalAddressLike(fd)) {
 		    hArray[numHandles] = h = _HANDLEVal(fd);
 		} else {
 		    hArray[numHandles] = h = (HANDLE) _get_osfhandle (__intVal(fd));
@@ -7167,7 +7168,7 @@
 	for (i=0; (i<count) && (numHandles < MAXHANDLE);i++) {
 	    fd = __ArrayInstPtr(writeFdArray)->a_element[i];
 	    if (fd != nil) {
-		if (__isExternalAddress(fd)) {
+		if (__isExternalAddressLike(fd)) {
 		    hArray[numHandles]  = _HANDLEVal(fd);
 		} else {
 		    hArray[numHandles] = (HANDLE) _get_osfhandle (__intVal(fd));
@@ -7189,7 +7190,7 @@
 	for (i=0; (i<count) && (numHandles < MAXHANDLE);i++) {
 	    fd = __ArrayInstPtr(exceptFdArray)->a_element[i];
 	    if (fd != nil) {
-		if (__isExternalAddress(fd)) {
+		if (__isExternalAddressLike(fd)) {
 		    hArray[numHandles]  = _HANDLEVal(fd);
 		} else {
 		    hArray[numHandles] = (HANDLE) _get_osfhandle (__intVal(fd));
@@ -7287,7 +7288,7 @@
 	    for (i=0; (i<count);i++) {
 		fd = __ArrayInstPtr(readFdArray)->a_element[i];
 		if (fd != nil) {
-		    if (__isExternalAddress(fd)) {
+		    if (__isExternalAddressLike(fd)) {
 			continue;
 		    } else {
 			h = (HANDLE) _get_osfhandle (__intVal(fd));
@@ -7363,7 +7364,7 @@
 	OBJ fdOrHandle = __ArrayInstPtr(fdOrHandleArray)->a_element[i];
 	HANDLE h;
 
-	if (__isExternalAddress(fdOrHandle)) {
+	if (__isExternalAddressLike(fdOrHandle)) {
 	    h = _HANDLEVal(fdOrHandle);
 	} else {
 	    if (__isSmallInteger(fdOrHandle)) {
@@ -7423,7 +7424,7 @@
     DWORD res;
     HANDLE h = NULL;
 
-    if (__isExternalAddress(fdOrHandle)) {
+    if (__isExternalAddressLike(fdOrHandle)) {
 	h = _HANDLEVal(fdOrHandle);
     } else {
 	if (__isSmallInteger(fdOrHandle)) {
@@ -8171,7 +8172,7 @@
 %{
     HKEY myKey, subKey = 0;
 
-    if (__isExternalAddress(__INST(handle)) 
+    if (__isExternalAddressLike(__INST(handle)) 
      && (__isString(subKeyString) || __isSymbol(subKeyString))) {
 	myKey = (HKEY)__externalAddressVal(__INST(handle));
 	if (RegCreateKey(myKey, __stringVal(subKeyString), &subKey) == ERROR_SUCCESS) {
@@ -8203,7 +8204,7 @@
 %{
     HKEY myKey;
 
-    if (__isExternalAddress(__INST(handle)) 
+    if (__isExternalAddressLike(__INST(handle)) 
      && (__isString(subKeyString) || __isSymbol(subKeyString))) {
 	myKey = (HKEY)__externalAddressVal(__INST(handle));
 	if (RegDeleteKey(myKey, __stringVal(subKeyString)) == ERROR_SUCCESS) {
@@ -8231,7 +8232,7 @@
 %{
     HKEY myKey, remoteKey = 0;
 
-    if (__isExternalAddress(__INST(handle)) && __isString(hostName)) {
+    if (__isExternalAddressLike(__INST(handle)) && __isString(hostName)) {
 	myKey = (HKEY)__externalAddressVal(__INST(handle));
 	if (RegConnectRegistry(__stringVal(hostName), myKey, &remoteKey) == ERROR_SUCCESS) {
 	    remoteHandle = __MKEXTERNALADDRESS(remoteKey);
@@ -8286,7 +8287,7 @@
     DWORD classNameSize = sizeof(classNameBuffer) - 1;
     FILETIME modificationTime;
 
-    if (__isExternalAddress(__INST(handle)) 
+    if (__isExternalAddressLike(__INST(handle)) 
      && __isSmallInteger(subKeyIndex)) {
 	myKey = (HKEY)__externalAddressVal(__INST(handle));
 	if (RegEnumKeyEx(myKey, __intVal(subKeyIndex), 
@@ -8322,7 +8323,7 @@
 %{
     HKEY myKey, subKey = 0;
 
-    if (__isExternalAddress(__INST(handle)) 
+    if (__isExternalAddressLike(__INST(handle)) 
      && (__isString(subKeyString) || __isSymbol(subKeyString))) {
 	myKey = (HKEY)__externalAddressVal(__INST(handle));
 	if (RegOpenKey(myKey, __stringVal(subKeyString), &subKey) == ERROR_SUCCESS) {
@@ -8356,7 +8357,7 @@
 %{
     HKEY myKey;
 
-    if (__isExternalAddress(__INST(handle)) 
+    if (__isExternalAddressLike(__INST(handle)) 
      && (__isString(aValueName) || __isSymbol(aValueName))) {
 	myKey = (HKEY)__externalAddressVal(__INST(handle));
 	if (RegDeleteValue(myKey, __stringVal(aValueName)) == ERROR_SUCCESS) {
@@ -8379,7 +8380,7 @@
     DWORD nameSize = sizeof(nameBuffer) - 1;
     DWORD valueType;
 
-    if (__isExternalAddress(__INST(handle)) 
+    if (__isExternalAddressLike(__INST(handle)) 
      && __isSmallInteger(valueIndex)) {
 	myKey = (HKEY)__externalAddressVal(__INST(handle));
 	if (RegEnumValue(myKey, __intVal(valueIndex), 
@@ -8424,7 +8425,7 @@
     DWORD dataSize = sizeof(quickData);
     unsigned char *dataBuffer = NULL;
 
-    if (__isExternalAddress(__INST(handle)) 
+    if (__isExternalAddressLike(__INST(handle)) 
      && (__isString(aValueName) || __isSymbol(aValueName))) {
 	int ret;
 
@@ -8566,7 +8567,7 @@
     unsigned char *dataPointer = NULL;
     int datumOk = 1, mustFreeData = 0;
 
-    if (__isExternalAddress(__INST(handle)) 
+    if (__isExternalAddressLike(__INST(handle)) 
      && (__isString(aValueName) || __isSymbol(aValueName))) {
 	int ret;
 	OBJ cls;
@@ -8788,7 +8789,7 @@
 %{
     HKEY myKey;
 
-    if (__isExternalAddress(__INST(handle))) {
+    if (__isExternalAddressLike(__INST(handle))) {
 	myKey = (HKEY)(__externalAddressVal(__INST(handle)));
 	__INST(handle) = nil;
 	RegCloseKey(myKey);
@@ -8850,7 +8851,7 @@
 !
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.134 2003-10-09 15:20:56 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.135 2003-10-12 12:30:18 cg Exp $'
 ! !
 
 !Win32OperatingSystem::Win32FILEHandle methodsFor:'release'!
@@ -8877,7 +8878,7 @@
 !
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.134 2003-10-09 15:20:56 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.135 2003-10-12 12:30:18 cg Exp $'
 ! !
 
 !Win32OperatingSystem::Win32Handle methodsFor:'io'!
@@ -9264,7 +9265,7 @@
 !Win32OperatingSystem class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.134 2003-10-09 15:20:56 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.135 2003-10-12 12:30:18 cg Exp $'
 ! !
 
 Win32OperatingSystem initialize!