diff src/ntproc.c @ 408:501cfd01ee6d r21-2-34

Import from CVS: tag r21-2-34
author cvs
date Mon, 13 Aug 2007 11:18:11 +0200
parents b8cc9ab3f761
children de805c49cfc1
line wrap: on
line diff
--- a/src/ntproc.c	Mon Aug 13 11:17:10 2007 +0200
+++ b/src/ntproc.c	Mon Aug 13 11:18:11 2007 +0200
@@ -458,156 +458,6 @@
   return FALSE;
 }
 
-#ifndef __MINGW32__
-/* Return pointer to section header for section containing the given
-   relative virtual address. */
-static IMAGE_SECTION_HEADER *
-rva_to_section (DWORD rva, IMAGE_NT_HEADERS * nt_header)
-{
-  PIMAGE_SECTION_HEADER section;
-  int i;
-
-  section = IMAGE_FIRST_SECTION (nt_header);
-
-  for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++)
-    {
-      if (rva >= section->VirtualAddress
-	  && rva < section->VirtualAddress + section->SizeOfRawData)
-	return section;
-      section++;
-    }
-  return NULL;
-}
-#endif
-
-void
-win32_executable_type (const char * filename, int * is_dos_app, int * is_cygnus_app)
-{
-  file_data executable;
-  char * p;
-
-  /* Default values in case we can't tell for sure.  */
-  *is_dos_app = FALSE;
-  *is_cygnus_app = FALSE;
-
-  if (!open_input_file (&executable, filename))
-    return;
-
-  p = strrchr (filename, '.');
-
-      /* We can only identify DOS .com programs from the extension. */
-      if (p && stricmp (p, ".com") == 0)
-    *is_dos_app = TRUE;
-  else if (p && (stricmp (p, ".bat") == 0 ||
-		 stricmp (p, ".cmd") == 0))
-    {
-      /* A DOS shell script - it appears that CreateProcess is happy to
-	 accept this (somewhat surprisingly); presumably it looks at
-	 COMSPEC to determine what executable to actually invoke.
-	     Therefore, we have to do the same here as well. */
-      /* Actually, I think it uses the program association for that
-	 extension, which is defined in the registry.  */
-      p = egetenv ("COMSPEC");
-      if (p)
-	win32_executable_type (p, is_dos_app, is_cygnus_app);
-    }
-      else
-	{
-      /* Look for DOS .exe signature - if found, we must also check that
-	 it isn't really a 16- or 32-bit Windows exe, since both formats
-	 start with a DOS program stub.  Note that 16-bit Windows
-	 executables use the OS/2 1.x format. */
-
-#ifdef __MINGW32__
-	  /* mingw32 doesn't have enough headers to detect cygwin
-             apps, just do what we can. */
-	  FILHDR * exe_header;
-
-	  exe_header = (FILHDR*) executable.file_base;
-	  if (exe_header->e_magic != DOSMAGIC)
-	    goto unwind;
-
-	  if ((char*) exe_header->e_lfanew > (char*) executable.size)
-	    {
-	      /* Some dos headers (pkunzip) have bogus e_lfanew fields.  */
-	      *is_dos_app = TRUE;
-	    } 
-	  else if (exe_header->nt_signature != NT_SIGNATURE)
-	    {
-	      *is_dos_app = TRUE;
-	    }
-#else
-	  IMAGE_DOS_HEADER * dos_header;
-	  IMAGE_NT_HEADERS * nt_header;
-
-	  dos_header = (PIMAGE_DOS_HEADER) executable.file_base;
-	  if (dos_header->e_magic != IMAGE_DOS_SIGNATURE)
-	    goto unwind;
-	  
-	  nt_header = (PIMAGE_NT_HEADERS) ((char*) dos_header + dos_header->e_lfanew);
-	  
-	  if ((char*) nt_header > (char*) dos_header + executable.size) 
-	    {
-	      /* Some dos headers (pkunzip) have bogus e_lfanew fields.  */
-	      *is_dos_app = TRUE;
-	    } 
-	  else if (nt_header->Signature != IMAGE_NT_SIGNATURE &&
-		   LOWORD (nt_header->Signature) != IMAGE_OS2_SIGNATURE)
-	    {
-	      *is_dos_app = TRUE;
-	    }
-	  else if (nt_header->Signature == IMAGE_NT_SIGNATURE)
-	    {
-	      /* Look for cygwin.dll in DLL import list. */
-	      IMAGE_DATA_DIRECTORY import_dir =
-		nt_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT];
-	      IMAGE_IMPORT_DESCRIPTOR * imports;
-	      IMAGE_SECTION_HEADER * section;
-
-	      section = rva_to_section (import_dir.VirtualAddress, nt_header);
-	      imports = (IMAGE_IMPORT_DESCRIPTOR *) RVA_TO_PTR (import_dir.VirtualAddress,
-								section, executable);
-	      
-	      for ( ; imports->Name; imports++)
-		{
-		  char *dllname = (char*) RVA_TO_PTR (imports->Name, section, executable);
-
-		  if (strcmp (dllname, "cygwin.dll") == 0)
-		    {
-		      *is_cygnus_app = TRUE;
-		      break;
-		    }
-		}
-	    }
-#endif
-	}
-
- unwind:
-      close_file_data (&executable);
-}
-
-int
-compare_env (const void *strp1, const void *strp2)
-{
-  const char *str1 = *(const char**)strp1, *str2 = *(const char**)strp2;
-
-  while (*str1 && *str2 && *str1 != '=' && *str2 != '=')
-    {
-      if ((*str1) > (*str2))
-	return 1;
-      else if ((*str1) < (*str2))
-	return -1;
-      str1++, str2++;
-    }
-
-  if (*str1 == '=' && *str2 == '=')
-    return 0;
-  else if (*str1 == '=')
-    return -1;
-  else
-    return 1;
-}
-
 void
 merge_and_sort_env (char **envp1, char **envp2, char **new_envp)
 {
@@ -691,7 +541,7 @@
      was compiled with the Cygnus GNU toolchain and hence relies on
      cygwin.dll to parse the command line - we use this to decide how to
      escape quote chars in command line args that must be quoted). */
-  win32_executable_type (cmdname, &is_dos_app, &is_cygnus_app);
+  mswindows_executable_type (cmdname, &is_dos_app, &is_cygnus_app);
 
   /* On Windows 95, if cmdname is a DOS app, we invoke a helper
      application to start it by specifying the helper app as cmdname,