diff options
author | Christopher Faylor <me@cgf.cx> | 2002-05-28 01:55:40 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2002-05-28 01:55:40 +0000 |
commit | 2402700d07f5592d66b7b78823ce9b9aa698801d (patch) | |
tree | f90880bca367b97356a05e7d6b4a8bc721cb3465 /winsup/cygwin/autoload.cc | |
parent | 74b2f73ea42e22f5d69fd23dd2440130b1564814 (diff) | |
download | cygnal-2402700d07f5592d66b7b78823ce9b9aa698801d.tar.gz cygnal-2402700d07f5592d66b7b78823ce9b9aa698801d.tar.bz2 cygnal-2402700d07f5592d66b7b78823ce9b9aa698801d.zip |
* autoload.cc (LoadFuncEx): Define via new LoadFuncEx2 macro.
(LoadFuncEx2): Adapted from LoadFuncEx. Provides control of return value for
nonexistent function.
(NtQueryObject): Declare.
(IsDebuggerPresent): Declare via LoadFuncEx2 and always return true if not
available.
* debug.h (being_debugged): Just rely on IsDebuggerPresent return value.
* dtable.cc (handle_to_fn): New function.
(dtable::init_std_file_from_handle): Attempt to derive std handle's name via
handle_to_fn.
(dtable::build_fhandler_from_name): Fill in what we can in path_conv structure
when given a handle and path doesn't exist.
* fhandler.cc (fhandler_base::open): Don't set the file pointer here. Use
pc->exists () to determine if file exists rather than calling GetFileAttributes
again.
* fhandler.h (fhandler_base::exec_state_isknown): New method.
(fhandler_base::fstat_helper): Add extra arguments to declaration.
(fhandler_base::fstat_by_handle): Declare new method.
(fhandler_base::fstat_by_name): Declare new method.
* fhandler_disk_file (num_entries): Make __stdcall.
(fhandler_base::fstat_by_handle): Define new method.
(fhandler_base::fstat_by_name): Define new method.
(fhandler_base:fstat): Call fstat_by_{handle,name} as appropriate.
(fhandler_disk_file::fstat_helper): Accept extra arguments for filling out stat
structure. Move handle or name specific stuff to new methods above.
(fhandler_disk_file::open): Use real_path->exists rather than calling
GetFileAttributes again.
* ntdll.h (FILE_NAME_INFORMATION): Define new structure.
(OBJECT_INFORMATION_CLASS): Partially define new enum.
(OBJECT_NAME_INFORMATION): Define new structure.
(NtQueryInformationFile): New declaration.
(NtQueryObject): New declaration.
* path.cc (path_conv::fillin): Define new method.
* path.h (path_conv::fillin): Declare new method.
(path_conv::drive_thpe): Rename from 'get_drive_type'.
(path_conv::volser): Declare new method.
(path_conv::volname): Declare new method.
(path_conv::root_dir): Declare new method.
* syscalls.cc (fstat64): Send real path_conv to fstat as second argument.
Diffstat (limited to 'winsup/cygwin/autoload.cc')
-rw-r--r-- | winsup/cygwin/autoload.cc | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc index c95d8e6c3..909ef1047 100644 --- a/winsup/cygwin/autoload.cc +++ b/winsup/cygwin/autoload.cc @@ -72,9 +72,10 @@ details. */ /* Standard DLL load macro. Invokes a fatal warning if the function isn't found. */ #define LoadDLLfunc(name, n, dllname) LoadDLLfuncEx (name, n, dllname, 0) +#define LoadDLLfuncEx(name, n, dllname, notimp) LoadDLLfuncEx2(name, n, dllname, notimp, 0) /* Main DLL setup stuff. */ -#define LoadDLLfuncEx(name, n, dllname, notimp) \ +#define LoadDLLfuncEx2(name, n, dllname, notimp, err) \ LoadDLLprime (dllname, dll_func_load) \ __asm__ (" \n\ .section ." #dllname "_text,\"wx\" \n\ @@ -86,7 +87,7 @@ _win32_" mangle (name, n) ": \n\ movl (1f),%eax \n\ call *(%eax) \n\ 1:.long ." #dllname "_info \n\ - .long " #n "+" #notimp " \n\ + .long (" #n "+" #notimp ") | " #err "<<16 \n\ .asciz \"" #name "\" \n\ .text \n\ "); @@ -121,11 +122,14 @@ noload: \n\ jz 1f # Nope. \n\ decl %eax # Yes. This is the # of bytes + 1 \n\ popl %edx # Caller's caller \n\ + pushl %eax # Save for later \n\ + xorl $0xffff,%eax # Only want lower word \n\ addl %eax,%esp # Pop off bytes \n\ movl $127,%eax # ERROR_PROC_NOT_FOUND \n\ pushl %eax # First argument \n\ call _SetLastError@4 # Set it \n\ - xor %eax,%eax # Zero functional return \n\ + popl %eax # Get back argument \n\ + shrl $16,%eax # return value in high order word \n\ jmp *%edx # Return \n\ 1: \n\ movl (%edx),%eax # Handle value \n\ @@ -373,6 +377,8 @@ LoadDLLfunc (NetUserGetGroups, 28, netapi32) LoadDLLfunc (NetUserGetInfo, 16, netapi32) LoadDLLfunc (NetWkstaUserGetInfo, 12, netapi32) +LoadDLLfuncEx (NtQueryInformationFile, 20, ntdll, 1) +LoadDLLfuncEx2 (NtQueryObject, 20, ntdll, 1, 1) LoadDLLfuncEx (NtCreateToken, 52, ntdll, 1) LoadDLLfuncEx (NtMapViewOfSection, 40, ntdll, 1) LoadDLLfuncEx (NtOpenFile, 24, ntdll, 1) @@ -483,7 +489,7 @@ LoadDLLfunc (CoCreateInstance, 20, ole32) LoadDLLfuncEx (CancelIo, 4, kernel32, 1) LoadDLLfuncEx (CreateHardLinkA, 12, kernel32, 1) LoadDLLfuncEx (CreateToolhelp32Snapshot, 8, kernel32, 1) -LoadDLLfuncEx (IsDebuggerPresent, 0, kernel32, 1) +LoadDLLfuncEx2 (IsDebuggerPresent, 0, kernel32, 1, 1) LoadDLLfuncEx (Process32First, 8, kernel32, 1) LoadDLLfuncEx (Process32Next, 8, kernel32, 1) LoadDLLfuncEx (SignalObjectAndWait, 16, kernel32, 1) |