DirectoryStream.st
changeset 22665 ca5b1c4a31d7
parent 22578 c31e7ac76ff5
child 22695 a817e109e67d
--- a/DirectoryStream.st	Mon Apr 09 16:03:06 2018 +0200
+++ b/DirectoryStream.st	Mon Apr 09 19:17:59 2018 +0200
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
@@ -579,145 +577,142 @@
     encodedPathName := OperatingSystem encodePath:pathName.
     mode := #readonly.
     hitEOF := false.
+    ok := false.
 
 %{
-#ifdef HAS_OPENDIR
-    DIR *d;
-    OBJ path, dp;
+#if defined(HAS_OPENDIR)
+    if (__INST(dirPointer) == nil && __isStringLike(encodedPathName)) {
+        DIR *d;
+        OBJ path, dp;
 
-    ok = false;
-    if (__INST(dirPointer) == nil) {
-	if (__isStringLike(encodedPathName)) {
-	    __BEGIN_INTERRUPTABLE__
-	    __threadErrno = 0;
-	    do {
-		d = opendir((char *) __stringVal(encodedPathName));
-	    } while ((d == NULL) && (__threadErrno == EINTR));
-	    __END_INTERRUPTABLE__
+        __threadErrno = 0;
+        __BEGIN_INTERRUPTABLE__
+        do {
+            d = opendir((char *) __stringVal(encodedPathName));
+        } while ((d == NULL) && (__threadErrno == EINTR));
+        __END_INTERRUPTABLE__
 
-	    if (d == NULL) {
-		error = __mkSmallInteger(__threadErrno);
-	    } else {
-		dp = __MKEXTERNALADDRESS(d); __INST(dirPointer) = dp; __STORE(self, dp);
-		ok = true;
-	    }
-	}
+        if (d == NULL) {
+            error = __mkSmallInteger(__threadErrno);
+        } else {
+            dp = __MKEXTERNALADDRESS(d); __INST(dirPointer) = dp; __STORE(self, dp);
+            ok = true;
+        }
     }
-#else
-#ifdef __win32__
+#elif defined(__win32__)
     HANDLE d;
     OBJ path, dp;
     union {
-	char pattern[MAXPATHLEN];
-	wchar_t wpattern[MAXPATHLEN];
+        char pattern[MAXPATHLEN];
+        wchar_t wpattern[MAXPATHLEN];
     } uP;
     union {
-	WIN32_FIND_DATAA data;
-	WIN32_FIND_DATAW wdata;
+        WIN32_FIND_DATAA data;
+        WIN32_FIND_DATAW wdata;
     } uD;
 
-    ok = false;
     if (__INST(dirPointer) == nil) {
-	path = __INST(pathName);
-	if (__isStringLike(path)) {
-	    int l = __stringSize(path);
+        path = __INST(pathName);
+        if (__isStringLike(path)) {
+            int l = __stringSize(path);
 
-	    if (l < (MAXPATHLEN-4)) {
-		strncpy(uP.pattern, __stringVal(path), l);
-		strcpy(uP.pattern+l, "\\*");
+            if (l < (MAXPATHLEN-4)) {
+                strncpy(uP.pattern, __stringVal(path), l);
+                strcpy(uP.pattern+l, "\\*");
 
-		do {
-		    __threadErrno = 0;
-		    d = STX_API_NOINT_CALL2( "FindFirstFileA", FindFirstFileA, uP.pattern, &uD.data );
-		} while ((d < 0) && (__threadErrno == EINTR));
+                do {
+                    __threadErrno = 0;
+                    d = STX_API_NOINT_CALL2( "FindFirstFileA", FindFirstFileA, uP.pattern, &uD.data );
+                } while ((d < 0) && (__threadErrno == EINTR));
 
-		if (d == INVALID_HANDLE_VALUE) {
-		    error = __mkSmallInteger(GetLastError());
-		} else {
-		    dp = __MKEXTERNALADDRESS(d); __INST(dirPointer) = dp; __STORE(self, dp);
+                if (d == INVALID_HANDLE_VALUE) {
+                    error = __mkSmallInteger(GetLastError());
+                } else {
+                    dp = __MKEXTERNALADDRESS(d); __INST(dirPointer) = dp; __STORE(self, dp);
 
-		    fileSize   = __MKLARGEINT64(1, uD.data.nFileSizeLow, uD.data.nFileSizeHigh );
-		    osPathname = __MKSTRING( uD.data.cFileName );
-		    osFileAttributes = __mkSmallInteger( uD.data.dwFileAttributes );
+                    fileSize   = __MKLARGEINT64(1, uD.data.nFileSizeLow, uD.data.nFileSizeHigh );
+                    osPathname = __MKSTRING( uD.data.cFileName );
+                    osFileAttributes = __mkSmallInteger( uD.data.dwFileAttributes );
 
-		    osCrtTime = FileTimeToOsTime1970(&uD.data.ftCreationTime);
-		    osAccTime = FileTimeToOsTime1970(&uD.data.ftLastAccessTime);
-		    osModTime = FileTimeToOsTime1970(&uD.data.ftLastWriteTime);
-		    ok = true;
-		}
-	    }
-	}
-	else if (__isUnicode16String(path)) {
-	    int l = __unicode16StringSize(path);
-	    int i;
+                    osCrtTime = FileTimeToOsTime1970(&uD.data.ftCreationTime);
+                    osAccTime = FileTimeToOsTime1970(&uD.data.ftLastAccessTime);
+                    osModTime = FileTimeToOsTime1970(&uD.data.ftLastWriteTime);
+                    ok = true;
+                }
+            }
+        }
+        else if (__isUnicode16String(path)) {
+            int l = __unicode16StringSize(path);
+            int i;
 
-	    if (l < (MAXPATHLEN-4)) {
-		for (i=0; i<l; i++) {
-		    uP.wpattern[i] = __unicode16StringVal(path)[i];
-		}
-		uP.wpattern[i++] = '\\';
-		uP.wpattern[i++] = '*';
-		uP.wpattern[i] = 0;
+            if (l < (MAXPATHLEN-4)) {
+                for (i=0; i<l; i++) {
+                    uP.wpattern[i] = __unicode16StringVal(path)[i];
+                }
+                uP.wpattern[i++] = '\\';
+                uP.wpattern[i++] = '*';
+                uP.wpattern[i] = 0;
 
-		do {
-		    __threadErrno = 0;
-		    d = STX_API_NOINT_CALL2( "FindFirstFileW", FindFirstFileW, uP.wpattern, &uD.wdata );
-		} while ((d < 0) && (__threadErrno == EINTR));
+                do {
+                    __threadErrno = 0;
+                    d = STX_API_NOINT_CALL2( "FindFirstFileW", FindFirstFileW, uP.wpattern, &uD.wdata );
+                } while ((d < 0) && (__threadErrno == EINTR));
 
-		if (d == INVALID_HANDLE_VALUE) {
-		    error = __mkSmallInteger(GetLastError());
-		} else {
-		    dp = __MKEXTERNALADDRESS(d); __INST(dirPointer) = dp; __STORE(self, dp);
+                if (d == INVALID_HANDLE_VALUE) {
+                    error = __mkSmallInteger(GetLastError());
+                } else {
+                    dp = __MKEXTERNALADDRESS(d); __INST(dirPointer) = dp; __STORE(self, dp);
 
-		    fileSize   = __MKLARGEINT64(1, uD.wdata.nFileSizeLow, uD.wdata.nFileSizeHigh );
-		    osPathname = __MKU16STRING( uD.wdata.cFileName );
-		    osFileAttributes = __mkSmallInteger( uD.data.dwFileAttributes );
+                    fileSize   = __MKLARGEINT64(1, uD.wdata.nFileSizeLow, uD.wdata.nFileSizeHigh );
+                    osPathname = __MKU16STRING( uD.wdata.cFileName );
+                    osFileAttributes = __mkSmallInteger( uD.data.dwFileAttributes );
 
-		    osCrtTime = FileTimeToOsTime1970(&uD.wdata.ftCreationTime);
-		    osAccTime = FileTimeToOsTime1970(&uD.wdata.ftLastAccessTime);
-		    osModTime = FileTimeToOsTime1970(&uD.wdata.ftLastWriteTime);
-		    ok = true;
-		}
-	    }
-	}
+                    osCrtTime = FileTimeToOsTime1970(&uD.wdata.ftCreationTime);
+                    osAccTime = FileTimeToOsTime1970(&uD.wdata.ftLastAccessTime);
+                    osModTime = FileTimeToOsTime1970(&uD.wdata.ftLastWriteTime);
+                    ok = true;
+                }
+            }
+        }
     }
-#endif
-#endif
+#endif  // __win32__
 %}.
 
     ok == true ifTrue:[
-	self registerForFinalization.
-	osPathname isNil ifTrue:[
-	    "UNIX: does not automatically provide the first entry"
+        self registerForFinalization.
+        osPathname isNil ifTrue:[
+            "UNIX: does not automatically provide the first entry"
 
-	    (StreamError,StreamIOError) handle:[:ex |
-		self close.
-		ex reject.
-	    ] do:[
-		readAheadEntry := OperatingSystem nextLinkInfoFrom:self dirPointer:dirPointer.
-	    ].
-	] ifFalse:[
-	    "Windows already provides the first entry's info"
+            (StreamError,StreamIOError) handle:[:ex |
+                self close.
+                ex reject.
+            ] do:[
+                readAheadEntry := OperatingSystem nextLinkInfoFrom:self dirPointer:dirPointer.
+            ].
+        ] ifFalse:[
+            "Windows already provides the first entry's info"
 
-	    readAheadEntry := OperatingSystem
-		linkInfoFor:osPathname
-		fileSize:fileSize
-		fileAttributes:osFileAttributes
-		osCrtTime:osCrtTime
-		osAccTime:osAccTime
-		osModTime:osModTime
-	].
+            readAheadEntry := OperatingSystem
+                linkInfoFor:osPathname
+                fileSize:fileSize
+                fileAttributes:osFileAttributes
+                osCrtTime:osCrtTime
+                osAccTime:osAccTime
+                osModTime:osModTime
+        ].
 
-	^ self
+        ^ self
     ].
 
     ok notNil ifTrue:[
-	dirPointer notNil ifTrue:[^ self errorAlreadyOpen].
+        dirPointer notNil ifTrue:[^ self errorAlreadyOpen].
     ].
     error notNil ifTrue:[
-	^ self openError:(lastErrorNumber := error).
+        ^ self openError:(lastErrorNumber := error).
     ].
     ^ nil
+
+    "Modified: / 09-04-2018 / 19:03:18 / stefan"
 !
 
 reOpen
@@ -772,3 +767,4 @@
 version_CVS
     ^ '$Header$'
 ! !
+