diff --git a/src/fdlib.c b/src/fdlib.c
index 6e34aceb771462740433f6e5f886568c384ee95c..90d209214f2ad8c192f61accd13d6a3f1c1f2a82 100644
--- a/src/fdlib.c
+++ b/src/fdlib.c
@@ -2121,35 +2121,38 @@ PMOD_EXPORT ptrdiff_t debug_fd_read(FD fd, void *to, ptrdiff_t len)
 	  }
 	}
       }
-      /* FALLTHRU */
+      break;
+
     case FD_CONSOLE:
     case FD_FILE:
-      ret=0;
-      if(len && !ReadFile(handle, to,
-			  DO_NOT_WARN((DWORD)len),
-			  &ret,0) && ret<=0)
-      {
-	unsigned int err = GetLastError();
-	release_fd(fd);
-	set_errno_from_win32_error (err);
-	switch(err)
-	{
-	  /* Pretend we reached the end of the file */
-	  case ERROR_BROKEN_PIPE:
-	    return 0;
-	}
-	FDDEBUG(fprintf(stderr,"Read failed %d\n",errno));
-	return -1;
-      }
-      FDDEBUG(fprintf(stderr,"Read on %d returned %ld\n",fd,ret));
-      release_fd(fd);
-      return ret;
+      break;
 
     default:
       errno=ENOTSUPP;
       release_fd(fd);
       return -1;
   }
+
+  ret=0;
+  if(len && !ReadFile(handle, to,
+		      DO_NOT_WARN((DWORD)len),
+		      &ret,0) && ret<=0)
+  {
+    unsigned int err = GetLastError();
+    release_fd(fd);
+    set_errno_from_win32_error (err);
+    switch(err)
+    {
+      /* Pretend we reached the end of the file */
+      case ERROR_BROKEN_PIPE:
+        return 0;
+    }
+    FDDEBUG(fprintf(stderr,"Read failed %d\n",errno));
+    return -1;
+  }
+  FDDEBUG(fprintf(stderr,"Read on %d returned %ld\n",fd,ret));
+  release_fd(fd);
+  return ret;
 }
 
 PMOD_EXPORT PIKE_OFF_T debug_fd_lseek(FD fd, PIKE_OFF_T pos, int where)