From 43fb3fb174d3c06ef792cd9ad9a193ba02200144 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 24 Oct 2012 17:47:30 -0700 Subject: [PATCH] windows.shell32: Throw an error if file does not exist on file-executable? call. --- basis/windows/shell32/shell32.factor | 37 ++++++++++++++++------------ 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/basis/windows/shell32/shell32.factor b/basis/windows/shell32/shell32.factor index bf2076953d..68ec735979 100644 --- a/basis/windows/shell32/shell32.factor +++ b/basis/windows/shell32/shell32.factor @@ -5,7 +5,7 @@ alien.syntax classes.struct combinators io.backend io.files io.pathnames kernel math sequences specialized-arrays ui.backend.windows windows windows.com windows.com.syntax windows.errors windows.kernel32 windows.ole32 windows.types -windows.user32 ; +windows.user32 io.files.info ; SPECIALIZED-ARRAY: ushort IN: windows.shell32 @@ -141,26 +141,31 @@ INSTANCE: +win32-console-executable+ windows-executable INSTANCE: +win32-vxd-executable+ windows-executable ! le INSTANCE: +win32-os2-executable+ windows-executable ! ne INSTANCE: +win32-nt-executable+ windows-executable ! pe - + : file-executable-type ( path -- executable/f ) - normalize-path + normalize-path dup 0 f ! hi is zero means old style executable - 0 SHGFI_EXETYPE SHGetFileInfoW >lo-hi first2 zero? [ - { - { 0x5A4D [ +dos-executable+ ] } - { 0x4550 [ +win32-console-executable+ ] } - [ drop f ] - } case + 0 SHGFI_EXETYPE SHGetFileInfoW + [ + file-info drop f ] [ - { - { 0x454C [ +win32-vxd-executable+ ] } - { 0x454E [ +win32-os2-executable+ ] } - { 0x4550 [ +win32-nt-executable+ ] } - [ drop f ] - } case - ] if ; + nip >lo-hi first2 zero? [ + { + { 0x5A4D [ +dos-executable+ ] } + { 0x4550 [ +win32-console-executable+ ] } + [ drop f ] + } case + ] [ + { + { 0x454C [ +win32-vxd-executable+ ] } + { 0x454E [ +win32-os2-executable+ ] } + { 0x4550 [ +win32-nt-executable+ ] } + [ drop f ] + } case + ] if + ] if-zero ; : shell32-directory ( n -- str ) f swap f SHGFP_TYPE_DEFAULT -- 2.34.1