* Makefile.in: Remove libadvapi32.a.
* autoload.h: Add additional field to autoload block for handling unimplemented functions. (LoadDLLfuncEx): New function which accepts additional parameter for controlling unimplemented function behavior. (LoadDLLfunc): Use LoadDLLfuncEx. * dcrt0.cc: Use new arguments for LoadDLLfunc. Add advapi32 routines. (noload): Rewrite in assembler. Handle new unimplemented function type. * exceptions.cc: Eliminate another vestige of StackWalk stuff. * net.cc: Use new arguments for LoadDLLfunc. * uinfo.cc: Ditto. * config.h.in: Remove obsolete define. * path.h (isdrive): New macro. * dcrt0.cc (globify): Use new macro to determine if a string refers to an MS-DOS drive. * environ.cc (winenv): Ditto. * spawn.cc (find_exec): Ditto. * path.cc (get_raw_device_number): Ditto. (mount_info::conv_to_posix_path): Ditto. (chdir): Ditto. (cygwin_posix_path_list_p): Ditto. (cygwin_split_path): Ditto. (path_conv::check): Move tmp_buf to beginning of function since it can be used earlier in the loop. Use tmp_buf rather than 'root' to hold root information. (mount_info::conv_to_win32_path): Add trailing slash to end of mount path when it translates to a drive. Add defensive code to avoid writing beyond the end of 'dst'.
This commit is contained in:
parent
fc1df4b6c6
commit
75858e8a03
@ -1,3 +1,38 @@
|
||||
Mon May 29 20:31:01 2000 Christopher Faylor <cgf@cygnus.com>
|
||||
|
||||
* Makefile.in: Remove libadvapi32.a.
|
||||
* autoload.h: Add additional field to autoload block for handling
|
||||
unimplemented functions.
|
||||
(LoadDLLfuncEx): New function which accepts additional parameter for
|
||||
controlling unimplemented function behavior.
|
||||
(LoadDLLfunc): Use LoadDLLfuncEx.
|
||||
* dcrt0.cc: Use new arguments for LoadDLLfunc. Add advapi32 routines.
|
||||
(noload): Rewrite in assembler. Handle new unimplemented function
|
||||
type.
|
||||
* exceptions.cc: Eliminate another vestige of StackWalk stuff.
|
||||
* net.cc: Use new arguments for LoadDLLfunc.
|
||||
* uinfo.cc: Ditto.
|
||||
|
||||
Mon May 29 20:18:47 2000 Christopher Faylor <cgf@cygnus.com>
|
||||
|
||||
* config.h.in: Remove obsolete define.
|
||||
* path.h (isdrive): New macro.
|
||||
* dcrt0.cc (globify): Use new macro to determine if a string refers to
|
||||
an MS-DOS drive.
|
||||
* environ.cc (winenv): Ditto.
|
||||
* spawn.cc (find_exec): Ditto.
|
||||
* path.cc (get_raw_device_number): Ditto.
|
||||
(mount_info::conv_to_posix_path): Ditto.
|
||||
(chdir): Ditto.
|
||||
(cygwin_posix_path_list_p): Ditto.
|
||||
(cygwin_split_path): Ditto.
|
||||
(path_conv::check): Move tmp_buf to beginning of function since it can
|
||||
be used earlier in the loop. Use tmp_buf rather than 'root' to hold
|
||||
root information.
|
||||
(mount_info::conv_to_win32_path): Add trailing slash to end of mount
|
||||
path when it translates to a drive. Add defensive code to avoid
|
||||
writing beyond the end of 'dst'.
|
||||
|
||||
Wed May 27 15:57:00 2000 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* fhandler_random.cc (read): Use CRYPT_MACHINE_KEYSET in
|
||||
|
@ -114,7 +114,7 @@ EXTRA_DLL_OFILES:=${addsuffix .o,${basename ${notdir ${wildcard $(CONFIG_DIR)/*.
|
||||
|
||||
EXTRA_OFILES=$(bupdir1)/libiberty/random.o $(bupdir1)/libiberty/strsignal.o
|
||||
|
||||
DLL_IMPORTS:=$(w32api_lib)/libkernel32.a $(w32api_lib)/libadvapi32.a
|
||||
DLL_IMPORTS:=$(w32api_lib)/libkernel32.a
|
||||
|
||||
DLL_OFILES:=assert.o dcrt0.o debug.o delqueue.o dir.o dlfcn.o dll_init.o \
|
||||
environ.o errno.o exceptions.o exec.o external.o fcntl.o fhandler.o \
|
||||
|
@ -49,27 +49,33 @@ static int dllname ## _init ()
|
||||
* foojmp (4 bytes) Pointer to a word containing the routine used
|
||||
* to eventually invoke the function. Initially
|
||||
* points to an init function which loads the
|
||||
* DLL, gets the processes load address,
|
||||
* DLL, gets the process's load address,
|
||||
* changes the contents here to point to the
|
||||
* function address, and changes the call *(%eax)
|
||||
* to a jmp %eax. If the initialization has been
|
||||
* done, only the load part is done.
|
||||
* DLL handle (4 bytes) The handle to use when loading the DLL.
|
||||
* flag (4 bytes) If "TRUE" then it is not a fatal error if this
|
||||
* function cannot be found. Instead, error is set
|
||||
* to ERROR_PROC_NOT_FOUND and 0 is returned.
|
||||
* func name (n bytes) asciz string containing the name of the function
|
||||
* to be loaded.
|
||||
*/
|
||||
|
||||
#define LoadDLLfunc(name, mangled, dllname) \
|
||||
#define LoadDLLmangle(name, n) #name "@" #n
|
||||
#define LoadDLLfunc(name, n, dllname) LoadDLLfuncEx (name, n, dllname, 0)
|
||||
#define LoadDLLfuncEx(name, n, dllname, notimp) \
|
||||
__asm__ (".section .data_cygwin_nocopy,\"w\""); \
|
||||
__asm__ (".global _" #mangled); \
|
||||
__asm__ (".global _win32_" #mangled); \
|
||||
__asm__ (".global _" LoadDLLmangle (name, n)); \
|
||||
__asm__ (".global _win32_" LoadDLLmangle (name, n)); \
|
||||
__asm__ (".align 8"); \
|
||||
__asm__ ("_" #mangled ":"); \
|
||||
__asm__ ("_win32_" #mangled ":"); \
|
||||
__asm__ ("_" LoadDLLmangle (name, n) ":"); \
|
||||
__asm__ ("_win32_" LoadDLLmangle (name, n) ":"); \
|
||||
__asm__ ("movl (" #name "jump),%eax"); \
|
||||
__asm__ ("call *(%eax)"); \
|
||||
__asm__ (#name "jump: .long " #dllname "_init_holder"); \
|
||||
__asm__ (" .long _" #dllname "_handle"); \
|
||||
__asm__ (" .long " #n "+" #notimp); \
|
||||
__asm__ (".asciz \"" #name "\""); \
|
||||
__asm__ (".text");
|
||||
|
||||
|
@ -33,6 +33,3 @@
|
||||
|
||||
/* Define if building thread-safe Cygwin DLL. */
|
||||
#undef _MT_SAFE
|
||||
|
||||
/* Define if strace log output has date/time stamp. */
|
||||
#undef STRACE_HHMMSS
|
||||
|
@ -309,9 +309,9 @@ globify (char *word, char **&argv, int &argc, int &argvlen)
|
||||
|
||||
int n = 0;
|
||||
char *p, *s;
|
||||
int dos_spec = isalpha(*word) && word[1] == ':' ? 1 : 0;
|
||||
int dos_spec = isdrive (word);
|
||||
if (!dos_spec && isquote(*word) && word[1] && word[2])
|
||||
dos_spec = isalpha(word[1]) && word[2] == ':' ? 1 : 0;
|
||||
dos_spec = isdrive (word + 1);
|
||||
|
||||
/* We'll need more space if there are quoting characters in
|
||||
word. If that is the case, doubling the size of the
|
||||
@ -987,31 +987,52 @@ __api_fatal (const char *fmt, ...)
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
static void noload (HANDLE h, char *s) __asm__ ("noload");
|
||||
static void __attribute__((unused))
|
||||
noload (HANDLE h, char *s)
|
||||
|
||||
/* This struct is unused, but it illustrates the layout of a DLL
|
||||
information block. */
|
||||
struct DLLinfo
|
||||
{
|
||||
api_fatal ("couldn't dynamically determine load address for '%s' (handle %p), %E", s, h);
|
||||
}
|
||||
char jmpinst[4];
|
||||
HANDLE h;
|
||||
DWORD flag;
|
||||
char name[0];
|
||||
};
|
||||
|
||||
/* FIXME: This is not thread-safe! */
|
||||
__asm__ ("
|
||||
msg1:
|
||||
.ascii \"couldn't dynamically determine load address for '%s' (handle %p), %E\\0\"
|
||||
|
||||
.align 32
|
||||
noload:
|
||||
popl %edx # Get the address of the information block
|
||||
movl 8(%edx),%eax # Should we 'ignore' the lack
|
||||
test $1,%eax # of this function?
|
||||
jz 1f # Nope.
|
||||
decl %eax # Yes. This is the # of bytes + 1
|
||||
popl %edx # Caller's caller
|
||||
addl %eax,%esp # Pop off bytes
|
||||
xor %eax,%eax # Zero functional return
|
||||
jmp *%edx # Return
|
||||
1:
|
||||
movl 4(%edx),%eax # Handle value
|
||||
pushl (%eax)
|
||||
leal 12(%edx),%eax # Location of name of function
|
||||
push %eax
|
||||
push $msg1 # The message
|
||||
call ___api_fatal # Print message. Never returns
|
||||
|
||||
.globl cygwin_dll_func_load
|
||||
cygwin_dll_func_load:
|
||||
movl (%esp),%eax # 'Return address' contains load info
|
||||
addl $8,%eax # Address of name of function to load
|
||||
addl $12,%eax # Address of name of function to load
|
||||
pushl %eax # Second argument
|
||||
movl -4(%eax),%eax # Address of Handle to DLL
|
||||
movl -8(%eax),%eax # Address of Handle to DLL
|
||||
pushl (%eax) # Handle to DLL
|
||||
call _GetProcAddress@8# Load it
|
||||
test %eax,%eax # Success?
|
||||
jne gotit # Yes
|
||||
popl %eax # No. Get back
|
||||
addl $8,%eax # pointer to name
|
||||
pushl %eax # and
|
||||
movl -4(%eax),%eax # Address of Handle to DLL
|
||||
pushl (%eax) # Handle to DLL
|
||||
call noload # issue an error
|
||||
jmp noload # Issue an error or return
|
||||
gotit:
|
||||
popl %ecx # Pointer to 'return address'
|
||||
movb $0xe0,-1(%ecx) # Turn preceding call to a jmp *%eax
|
||||
@ -1033,24 +1054,81 @@ LoadDLLinitfunc (user32)
|
||||
}
|
||||
|
||||
LoadDLLinit (user32)
|
||||
LoadDLLfunc (CharToOemA, CharToOemA@8, user32)
|
||||
LoadDLLfunc (CreateWindowExA, CreateWindowExA@48, user32)
|
||||
LoadDLLfunc (DefWindowProcA, DefWindowProcA@16, user32)
|
||||
LoadDLLfunc (DispatchMessageA, DispatchMessageA@4, user32)
|
||||
LoadDLLfunc (FindWindowA, FindWindowA@8, user32)
|
||||
LoadDLLfunc (GetMessageA, GetMessageA@16, user32)
|
||||
LoadDLLfunc (GetProcessWindowStation, GetProcessWindowStation@0, user32)
|
||||
LoadDLLfunc (GetThreadDesktop, GetThreadDesktop@4, user32)
|
||||
LoadDLLfunc (GetUserObjectInformationA, GetUserObjectInformationA@20, user32)
|
||||
LoadDLLfunc (KillTimer, KillTimer@8, user32)
|
||||
LoadDLLfunc (MessageBoxA, MessageBoxA@16, user32)
|
||||
LoadDLLfunc (MsgWaitForMultipleObjects, MsgWaitForMultipleObjects@20, user32)
|
||||
LoadDLLfunc (OemToCharA, OemToCharA@8, user32)
|
||||
LoadDLLfunc (OemToCharW, OemToCharW@8, user32)
|
||||
LoadDLLfunc (PeekMessageA, PeekMessageA@20, user32)
|
||||
LoadDLLfunc (PostMessageA, PostMessageA@16, user32)
|
||||
LoadDLLfunc (PostQuitMessage, PostQuitMessage@4, user32)
|
||||
LoadDLLfunc (RegisterClassA, RegisterClassA@4, user32)
|
||||
LoadDLLfunc (SendMessageA, SendMessageA@16, user32)
|
||||
LoadDLLfunc (SetTimer, SetTimer@16, user32)
|
||||
LoadDLLfunc (SetUserObjectSecurity, SetUserObjectSecurity@12, user32)
|
||||
LoadDLLfunc (CharToOemA, 8, user32)
|
||||
LoadDLLfunc (CreateWindowExA, 48, user32)
|
||||
LoadDLLfunc (DefWindowProcA, 16, user32)
|
||||
LoadDLLfunc (DispatchMessageA, 4, user32)
|
||||
LoadDLLfunc (FindWindowA, 8, user32)
|
||||
LoadDLLfunc (GetMessageA, 16, user32)
|
||||
LoadDLLfunc (GetProcessWindowStation, 0, user32)
|
||||
LoadDLLfunc (GetThreadDesktop, 4, user32)
|
||||
LoadDLLfunc (GetUserObjectInformationA, 20, user32)
|
||||
LoadDLLfunc (KillTimer, 8, user32)
|
||||
LoadDLLfunc (MessageBoxA, 16, user32)
|
||||
LoadDLLfunc (MsgWaitForMultipleObjects, 20, user32)
|
||||
LoadDLLfunc (OemToCharA, 8, user32)
|
||||
LoadDLLfunc (OemToCharW, 8, user32)
|
||||
LoadDLLfunc (PeekMessageA, 20, user32)
|
||||
LoadDLLfunc (PostMessageA, 16, user32)
|
||||
LoadDLLfunc (PostQuitMessage, 4, user32)
|
||||
LoadDLLfunc (RegisterClassA, 4, user32)
|
||||
LoadDLLfunc (SendMessageA, 16, user32)
|
||||
LoadDLLfunc (SetTimer, 16, user32)
|
||||
LoadDLLfunc (SetUserObjectSecurity, 12, user32)
|
||||
|
||||
LoadDLLinitfunc (advapi32)
|
||||
{
|
||||
HANDLE h;
|
||||
|
||||
if ((h = LoadLibrary ("advapi32.dll")) != NULL)
|
||||
advapi32_handle = h;
|
||||
else if (!advapi32_handle)
|
||||
api_fatal ("could not load advapi32.dll, %E");
|
||||
|
||||
return 0; /* Already done by another thread? */
|
||||
}
|
||||
|
||||
LoadDLLinit (advapi32)
|
||||
LoadDLLfunc (AddAccessAllowedAce, 16, advapi32)
|
||||
LoadDLLfunc (AddAccessDeniedAce, 16, advapi32)
|
||||
LoadDLLfunc (AddAce, 20, advapi32)
|
||||
LoadDLLfunc (AdjustTokenPrivileges, 24, advapi32)
|
||||
LoadDLLfunc (CopySid, 12, advapi32)
|
||||
LoadDLLfunc (CreateProcessAsUserA, 44, advapi32)
|
||||
LoadDLLfunc (CryptAcquireContextA, 20, advapi32)
|
||||
LoadDLLfunc (CryptGenRandom, 12, advapi32)
|
||||
LoadDLLfunc (CryptReleaseContext, 8, advapi32)
|
||||
LoadDLLfunc (DeregisterEventSource, 4, advapi32)
|
||||
LoadDLLfunc (EqualSid, 8, advapi32)
|
||||
LoadDLLfunc (GetAce, 12, advapi32)
|
||||
LoadDLLfunc (GetFileSecurityA, 20, advapi32)
|
||||
LoadDLLfunc (GetLengthSid, 4, advapi32)
|
||||
LoadDLLfunc (GetSecurityDescriptorDacl, 16, advapi32)
|
||||
LoadDLLfunc (GetSecurityDescriptorGroup, 12, advapi32)
|
||||
LoadDLLfunc (GetSecurityDescriptorOwner, 12, advapi32)
|
||||
LoadDLLfunc (GetSidSubAuthority, 8, advapi32)
|
||||
LoadDLLfunc (GetSidSubAuthorityCount, 4, advapi32)
|
||||
LoadDLLfunc (GetTokenInformation, 20, advapi32)
|
||||
LoadDLLfunc (GetUserNameA, 8, advapi32)
|
||||
LoadDLLfunc (InitializeAcl, 12, advapi32)
|
||||
LoadDLLfunc (InitializeSecurityDescriptor, 8, advapi32)
|
||||
LoadDLLfunc (InitializeSid, 12, advapi32)
|
||||
LoadDLLfunc (IsValidSid, 4, advapi32)
|
||||
LoadDLLfunc (LookupAccountNameA, 28, advapi32)
|
||||
LoadDLLfunc (LookupAccountSidA, 28, advapi32)
|
||||
LoadDLLfunc (LookupPrivilegeValueA, 12, advapi32)
|
||||
LoadDLLfunc (MakeSelfRelativeSD, 12, advapi32)
|
||||
LoadDLLfunc (OpenProcessToken, 12, advapi32)
|
||||
LoadDLLfunc (RegCloseKey, 4, advapi32)
|
||||
LoadDLLfunc (RegCreateKeyExA, 36, advapi32)
|
||||
LoadDLLfunc (RegDeleteKeyA, 8, advapi32)
|
||||
LoadDLLfunc (RegEnumKeyExA, 32, advapi32)
|
||||
LoadDLLfunc (RegOpenKeyExA, 20, advapi32)
|
||||
LoadDLLfunc (RegQueryValueExA, 24, advapi32)
|
||||
LoadDLLfunc (RegSetValueExA, 24, advapi32)
|
||||
LoadDLLfunc (RegisterEventSourceA, 8, advapi32)
|
||||
LoadDLLfunc (ReportEventA, 36, advapi32)
|
||||
LoadDLLfunc (SetKernelObjectSecurity, 12, advapi32)
|
||||
LoadDLLfunc (SetSecurityDescriptorDacl, 16, advapi32)
|
||||
LoadDLLfunc (SetSecurityDescriptorGroup, 12, advapi32)
|
||||
LoadDLLfunc (SetSecurityDescriptorOwner, 12, advapi32)
|
||||
|
@ -543,8 +543,7 @@ winenv (const char * const *envp, int keep_posix)
|
||||
else
|
||||
*dstp = *srcp;
|
||||
tl += strlen (*dstp) + 1;
|
||||
if ((*dstp)[0] == '!' && isalpha((*dstp)[1]) && (*dstp)[2] == ':' &&
|
||||
(*dstp)[3] == '=')
|
||||
if ((*dstp)[0] == '!' && isdrive ((*dstp) + 1) && (*dstp)[3] == '=')
|
||||
{
|
||||
char *p = (char *) alloca (strlen (*dstp) + 1);
|
||||
strcpy (p, *dstp);
|
||||
|
@ -195,17 +195,6 @@ exception (EXCEPTION_RECORD *e, CONTEXT *in)
|
||||
|
||||
#define HAVE_STACK_TRACE
|
||||
|
||||
/* The function used to load the imagehlp DLL. Returns TRUE if the
|
||||
DLL was found. */
|
||||
static LoadDLLinitfunc (imagehlp)
|
||||
{
|
||||
imagehlp_handle = LoadLibrary ("imagehlp.dll");
|
||||
return !!imagehlp_handle;
|
||||
}
|
||||
|
||||
LoadDLLinit (imagehlp) /* Set up storage for imagehlp.dll autoload */
|
||||
LoadDLLfunc (StackWalk, StackWalk@36, imagehlp)
|
||||
|
||||
/* A class for manipulating the stack. */
|
||||
class stack_info
|
||||
{
|
||||
|
@ -1815,38 +1815,38 @@ LoadDLLinitfunc (wsock32)
|
||||
|
||||
LoadDLLinit (wsock32)
|
||||
|
||||
LoadDLLfunc (WSAAsyncSelect, WSAAsyncSelect@16, wsock32)
|
||||
LoadDLLfunc (WSACleanup, WSACleanup@0, wsock32)
|
||||
LoadDLLfunc (WSAGetLastError, WSAGetLastError@0, wsock32)
|
||||
LoadDLLfunc (WSAStartup, WSAStartup@8, wsock32)
|
||||
LoadDLLfunc (__WSAFDIsSet, __WSAFDIsSet@8, wsock32)
|
||||
LoadDLLfunc (accept, accept@12, wsock32)
|
||||
LoadDLLfunc (bind, bind@12, wsock32)
|
||||
LoadDLLfunc (closesocket, closesocket@4, wsock32)
|
||||
LoadDLLfunc (connect, connect@12, wsock32)
|
||||
LoadDLLfunc (gethostbyaddr, gethostbyaddr@12, wsock32)
|
||||
LoadDLLfunc (gethostbyname, gethostbyname@4, wsock32)
|
||||
LoadDLLfunc (gethostname, gethostname@8, wsock32)
|
||||
LoadDLLfunc (getpeername, getpeername@12, wsock32)
|
||||
LoadDLLfunc (getprotobyname, getprotobyname@4, wsock32)
|
||||
LoadDLLfunc (getprotobynumber, getprotobynumber@4, wsock32)
|
||||
LoadDLLfunc (getservbyname, getservbyname@8, wsock32)
|
||||
LoadDLLfunc (getservbyport, getservbyport@8, wsock32)
|
||||
LoadDLLfunc (getsockname, getsockname@12, wsock32)
|
||||
LoadDLLfunc (getsockopt, getsockopt@20, wsock32)
|
||||
LoadDLLfunc (inet_addr, inet_addr@4, wsock32)
|
||||
LoadDLLfunc (inet_network, inet_network@4, wsock32)
|
||||
LoadDLLfunc (inet_ntoa, inet_ntoa@4, wsock32)
|
||||
LoadDLLfunc (ioctlsocket, ioctlsocket@12, wsock32)
|
||||
LoadDLLfunc (listen, listen@8, wsock32)
|
||||
LoadDLLfunc (rcmd, rcmd@24, wsock32)
|
||||
LoadDLLfunc (recv, recv@16, wsock32)
|
||||
LoadDLLfunc (recvfrom, recvfrom@24, wsock32)
|
||||
LoadDLLfunc (rexec, rexec@24, wsock32)
|
||||
LoadDLLfunc (rresvport, rresvport@4, wsock32)
|
||||
LoadDLLfunc (select, select@20, wsock32)
|
||||
LoadDLLfunc (send, send@16, wsock32)
|
||||
LoadDLLfunc (sendto, sendto@24, wsock32)
|
||||
LoadDLLfunc (setsockopt, setsockopt@20, wsock32)
|
||||
LoadDLLfunc (shutdown, shutdown@8, wsock32)
|
||||
LoadDLLfunc (socket, socket@12, wsock32)
|
||||
LoadDLLfunc (WSAAsyncSelect, 16, wsock32)
|
||||
LoadDLLfunc (WSACleanup, 0, wsock32)
|
||||
LoadDLLfunc (WSAGetLastError, 0, wsock32)
|
||||
LoadDLLfunc (WSAStartup, 8, wsock32)
|
||||
LoadDLLfunc (__WSAFDIsSet, 8, wsock32)
|
||||
LoadDLLfunc (accept, 12, wsock32)
|
||||
LoadDLLfunc (bind, 12, wsock32)
|
||||
LoadDLLfunc (closesocket, 4, wsock32)
|
||||
LoadDLLfunc (connect, 12, wsock32)
|
||||
LoadDLLfunc (gethostbyaddr, 12, wsock32)
|
||||
LoadDLLfunc (gethostbyname, 4, wsock32)
|
||||
LoadDLLfunc (gethostname, 8, wsock32)
|
||||
LoadDLLfunc (getpeername, 12, wsock32)
|
||||
LoadDLLfunc (getprotobyname, 4, wsock32)
|
||||
LoadDLLfunc (getprotobynumber, 4, wsock32)
|
||||
LoadDLLfunc (getservbyname, 8, wsock32)
|
||||
LoadDLLfunc (getservbyport, 8, wsock32)
|
||||
LoadDLLfunc (getsockname, 12, wsock32)
|
||||
LoadDLLfunc (getsockopt, 20, wsock32)
|
||||
LoadDLLfunc (inet_addr, 4, wsock32)
|
||||
LoadDLLfunc (inet_network, 4, wsock32)
|
||||
LoadDLLfunc (inet_ntoa, 4, wsock32)
|
||||
LoadDLLfunc (ioctlsocket, 12, wsock32)
|
||||
LoadDLLfunc (listen, 8, wsock32)
|
||||
LoadDLLfunc (rcmd, 24, wsock32)
|
||||
LoadDLLfunc (recv, 16, wsock32)
|
||||
LoadDLLfunc (recvfrom, 24, wsock32)
|
||||
LoadDLLfunc (rexec, 24, wsock32)
|
||||
LoadDLLfunc (rresvport, 4, wsock32)
|
||||
LoadDLLfunc (select, 20, wsock32)
|
||||
LoadDLLfunc (send, 16, wsock32)
|
||||
LoadDLLfunc (sendto, 24, wsock32)
|
||||
LoadDLLfunc (setsockopt, 20, wsock32)
|
||||
LoadDLLfunc (shutdown, 8, wsock32)
|
||||
LoadDLLfunc (socket, 12, wsock32)
|
||||
|
@ -189,6 +189,7 @@ path_conv::check (const char *src, symlink_follow follow_mode,
|
||||
trailer. */
|
||||
char path_buf[MAX_PATH];
|
||||
char path_copy[MAX_PATH];
|
||||
char tmp_buf[MAX_PATH];
|
||||
symlink_info sym;
|
||||
|
||||
char *rel_path, *full_path;
|
||||
@ -353,7 +354,6 @@ path_conv::check (const char *src, symlink_follow follow_mode,
|
||||
system_printf ("problem parsing %s - '%s'", src, full_path);
|
||||
else
|
||||
{
|
||||
char tmp_buf[MAX_PATH];
|
||||
int headlen = 1 + tail - path_copy;
|
||||
p = sym.contents - headlen;
|
||||
memcpy (p, path_copy, headlen);
|
||||
@ -378,19 +378,18 @@ fillin:
|
||||
out:
|
||||
DWORD serial, volflags;
|
||||
|
||||
char root[strlen(full_path) + 10];
|
||||
strcpy (root, full_path);
|
||||
if (!rootdir (root) ||
|
||||
!GetVolumeInformation (root, NULL, 0, &serial, NULL, &volflags, NULL, 0))
|
||||
strcpy (tmp_buf, full_path);
|
||||
if (!rootdir (tmp_buf) ||
|
||||
!GetVolumeInformation (tmp_buf, NULL, 0, &serial, NULL, &volflags, NULL, 0))
|
||||
{
|
||||
debug_printf ("GetVolumeInformation(%s) = ERR, full_path(%s), set_has_acls(FALSE)",
|
||||
root, full_path, GetLastError ());
|
||||
tmp_buf, full_path, GetLastError ());
|
||||
set_has_acls (FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
debug_printf ("GetVolumeInformation(%s) = OK, full_path(%s), set_has_acls(%d)",
|
||||
root, full_path, volflags & FS_PERSISTENT_ACLS);
|
||||
tmp_buf, full_path, volflags & FS_PERSISTENT_ACLS);
|
||||
set_has_acls (volflags & FS_PERSISTENT_ACLS);
|
||||
}
|
||||
}
|
||||
@ -446,7 +445,7 @@ get_raw_device_number (const char *uxname, const char *w32path, int &unit)
|
||||
if (! strncasecmp (uxname, "/dev/n", 6))
|
||||
unit += 128;
|
||||
}
|
||||
else if (isalpha (w32path[4]) && w32path[5] == ':')
|
||||
else if (isdrive (w32path + 4))
|
||||
{
|
||||
devn = FH_FLOPPY;
|
||||
unit = tolower (w32path[4]) - 'a';
|
||||
@ -1023,6 +1022,8 @@ mount_info::conv_to_win32_path (const char *src_path, char *win32_path,
|
||||
int n = mi->native_pathlen;
|
||||
memcpy (dst, mi->native_path, n);
|
||||
char *p = pathbuf + mi->posix_pathlen;
|
||||
if (!trailing_slash_p && isdrive (mi->native_path) && !mi->native_path[2])
|
||||
trailing_slash_p = 1;
|
||||
if (!trailing_slash_p && !*p)
|
||||
dst[n] = '\0';
|
||||
else
|
||||
@ -1048,7 +1049,12 @@ fillin:
|
||||
path_prefix_p (current_directory_name, dst,
|
||||
cwdlen = strlen (current_directory_name)))
|
||||
{
|
||||
if (strlen (dst) == cwdlen)
|
||||
size_t n = strlen (dst);
|
||||
if (n < cwdlen)
|
||||
strcpy (win32_path, dst);
|
||||
else
|
||||
{
|
||||
if (n == cwdlen)
|
||||
dst += cwdlen;
|
||||
else
|
||||
dst += isdirsep (current_directory_name[cwdlen - 1]) ? cwdlen : cwdlen + 1;
|
||||
@ -1061,6 +1067,7 @@ fillin:
|
||||
strcat (win32_path, "\\");
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (win32_path != dst)
|
||||
strcpy (win32_path, dst);
|
||||
|
||||
@ -1220,7 +1227,7 @@ mount_info::conv_to_posix_path (const char *src_path, char *posix_path,
|
||||
letter not covered by the mount table. If it's a relative path then the
|
||||
caller must want an absolute path (otherwise we would have returned
|
||||
above). So we always return an absolute path at this point. */
|
||||
if ((isalpha (pathbuf[0])) && (pathbuf[1] == ':'))
|
||||
if (isdrive (pathbuf))
|
||||
cygdrive_posix_path (pathbuf, posix_path, trailing_slash_p);
|
||||
else
|
||||
{
|
||||
@ -2500,13 +2507,13 @@ chdir (const char *dir)
|
||||
If it does, append a \ to the native directory specification to
|
||||
defeat the Windows 95 (i.e. MS-DOS) tendency of returning to
|
||||
the last directory visited on the given drive. */
|
||||
if (isalpha (native_dir[0]) && native_dir[1] == ':' && !native_dir[2])
|
||||
if (isdrive (native_dir) && !native_dir[2])
|
||||
{
|
||||
native_dir[2] = '\\';
|
||||
native_dir[3] = '\0';
|
||||
}
|
||||
int res = SetCurrentDirectoryA (native_dir);
|
||||
if (!res)
|
||||
int res = SetCurrentDirectoryA (native_dir) ? 0 : -1;
|
||||
if (res == -1)
|
||||
__seterrno ();
|
||||
|
||||
/* Clear the cache until we need to retrieve the directory again. */
|
||||
@ -2521,8 +2528,8 @@ chdir (const char *dir)
|
||||
current_directory_posix_name = NULL;
|
||||
}
|
||||
|
||||
syscall_printf ("%d = chdir (%s) (dos %s)", res ? 0 : -1, dir, native_dir);
|
||||
return res ? 0 : -1;
|
||||
syscall_printf ("%d = chdir (%s) (dos %s)", res, dir, native_dir);
|
||||
return res;
|
||||
}
|
||||
|
||||
/******************** Exported Path Routines *********************/
|
||||
@ -2629,8 +2636,7 @@ extern "C"
|
||||
int
|
||||
cygwin_posix_path_list_p (const char *path)
|
||||
{
|
||||
int posix_p = ! (strchr (path, ';')
|
||||
|| (isalpha (path[0]) && path[1] == ':'));
|
||||
int posix_p = ! (strchr (path, ';') || isdrive (path));
|
||||
return posix_p;
|
||||
}
|
||||
|
||||
@ -2725,7 +2731,7 @@ cygwin_split_path (const char *path, char *dir, char *file)
|
||||
|
||||
/* Deal with drives.
|
||||
Remember that c:foo <==> c:/foo. */
|
||||
if (isalpha (path[0]) && path[1] == ':')
|
||||
if (isdrive (path))
|
||||
{
|
||||
*dir++ = *path++;
|
||||
*dir++ = *path++;
|
||||
|
@ -85,7 +85,7 @@ find_exec (const char *name, path_conv& buf, const char *mywinenv,
|
||||
/* Return the error condition if this is an absolute path or if there
|
||||
is no PATH to search. */
|
||||
if (strchr (name, '/') || strchr (name, '\\') ||
|
||||
isalpha (name[0]) && name[1] == ':' ||
|
||||
isdrive (name) ||
|
||||
!(winpath = getwinenv (mywinenv)) ||
|
||||
!(path = winpath->get_native ()) ||
|
||||
*path == '\0')
|
||||
|
@ -190,7 +190,7 @@ LoadDLLinitfunc (netapi32)
|
||||
return 0;
|
||||
}
|
||||
LoadDLLinit (netapi32)
|
||||
LoadDLLfunc (NetWkstaUserGetInfo, NetWkstaUserGetInfo@12, netapi32)
|
||||
LoadDLLfunc (NetGetDCName, NetGetDCName@12, netapi32)
|
||||
LoadDLLfunc (NetApiBufferFree, NetApiBufferFree@4, netapi32)
|
||||
LoadDLLfunc (NetWkstaUserGetInfo, 12, netapi32)
|
||||
LoadDLLfunc (NetGetDCName, 12, netapi32)
|
||||
LoadDLLfunc (NetApiBufferFree, 4, netapi32)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user