XEmacs 21.2.30 "Hygeia".
[chise/xemacs-chise.git.1] / src / ntproc.c
index 5618847..0b95e43 100644 (file)
@@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA.
 #include <signal.h>
 
 /* must include CRT headers *before* config.h */
-/* ### I don't believe it - martin */
+/* #### I don't believe it - martin */
 #include <config.h>
 #undef signal
 #undef wait
@@ -120,6 +120,13 @@ child_process *dead_child = NULL;
 
 DWORD WINAPI reader_thread (void *arg);
 
+/* Determine if running on Windows 9x and not NT */
+static int
+windows9x_p (void)
+{
+  return GetVersion () & 0x80000000;
+}
+
 /* Find an unused process slot.  */
 child_process *
 new_child (void)
@@ -393,7 +400,7 @@ reader_thread (void *arg)
 static const char * process_dir;
 
 static BOOL 
-create_child (CONST char *exe, char *cmdline, char *env,
+create_child (const char *exe, char *cmdline, char *env,
              int * pPid, child_process *cp)
 {
   STARTUPINFO start;
@@ -445,16 +452,8 @@ create_child (CONST char *exe, char *cmdline, char *env,
   cp->procinfo.hThread=NULL;
   cp->procinfo.hProcess=NULL;
 
-  /* Hack for Windows 95, which assigns large (ie negative) pids */
-  if (cp->pid < 0)
-    cp->pid = -cp->pid;
-
   /* pid must fit in a Lisp_Int */
-#ifdef USE_UNION_TYPE
-  cp->pid = (cp->pid & ((1U << VALBITS) - 1));
-#else
-  cp->pid = (cp->pid & VALMASK);
-#endif
+
 
   *pPid = cp->pid;
   
@@ -488,7 +487,7 @@ rva_to_section (DWORD rva, IMAGE_NT_HEADERS * nt_header)
 #endif
 
 void
-win32_executable_type (CONST char * filename, int * is_dos_app, int * is_cygnus_app)
+win32_executable_type (const char * filename, int * is_dos_app, int * is_cygnus_app)
 {
   file_data executable;
   char * p;
@@ -534,7 +533,7 @@ win32_executable_type (CONST char * filename, int * is_dos_app, int * is_cygnus_
          if (exe_header->e_magic != DOSMAGIC)
            goto unwind;
 
-         if ((char *) exe_header->e_lfanew > (char *) executable.size)
+         if ((char*) exe_header->e_lfanew > (char*) executable.size)
            {
              /* Some dos headers (pkunzip) have bogus e_lfanew fields.  */
              *is_dos_app = TRUE;
@@ -551,9 +550,9 @@ win32_executable_type (CONST char * filename, int * is_dos_app, int * is_cygnus_
          if (dos_header->e_magic != IMAGE_DOS_SIGNATURE)
            goto unwind;
          
-         nt_header = (PIMAGE_NT_HEADERS) ((char *) dos_header + dos_header->e_lfanew);
+         nt_header = (PIMAGE_NT_HEADERS) ((char*) dos_header + dos_header->e_lfanew);
          
-         if ((char *) nt_header > (char *) dos_header + executable.size) 
+         if ((char*) nt_header > (char*) dos_header + executable.size) 
            {
              /* Some dos headers (pkunzip) have bogus e_lfanew fields.  */
              *is_dos_app = TRUE;
@@ -572,11 +571,12 @@ win32_executable_type (CONST char * filename, int * is_dos_app, int * is_cygnus_
              IMAGE_SECTION_HEADER * section;
 
              section = rva_to_section (import_dir.VirtualAddress, nt_header);
-             imports = RVA_TO_PTR (import_dir.VirtualAddress, section, executable);
+             imports = (IMAGE_IMPORT_DESCRIPTOR *) RVA_TO_PTR (import_dir.VirtualAddress,
+                                                               section, executable);
              
              for ( ; imports->Name; imports++)
                {
-                 char * dllname = RVA_TO_PTR (imports->Name, section, executable);
+                 char *dllname = (char*) RVA_TO_PTR (imports->Name, section, executable);
 
                  if (strcmp (dllname, "cygwin.dll") == 0)
                    {
@@ -631,7 +631,7 @@ merge_and_sort_env (char **envp1, char **envp2, char **new_envp)
     *nptr++ = *optr++;
   num += optr - envp2;
 
-  qsort (new_envp, num, sizeof (char *), compare_env);
+  qsort (new_envp, num, sizeof (char*), compare_env);
 
   *nptr = NULL;
 }
@@ -639,8 +639,8 @@ merge_and_sort_env (char **envp1, char **envp2, char **new_envp)
 /* When a new child process is created we need to register it in our list,
    so intercept spawn requests.  */
 int 
-sys_spawnve (int mode, CONST char *cmdname,
-            CONST char * CONST *argv, CONST char *CONST *envp)
+sys_spawnve (int mode, const char *cmdname,
+            const char * const *argv, const char *const *envp)
 {
   Lisp_Object program, full;
   char *cmdline, *env, *parg, **targ;
@@ -676,11 +676,13 @@ sys_spawnve (int mode, CONST char *cmdname,
          errno = EINVAL;
          return -1;
        }
-      GET_C_STRING_FILENAME_DATA_ALLOCA (full, cmdname);
+      TO_EXTERNAL_FORMAT (LISP_STRING, full,
+                         C_STRING_ALLOCA, cmdname,
+                         Qfile_name);
     }
   else
     {
-      (char*)cmdname = alloca (strlen (argv[0]) + 1);
+      cmdname = (char*)alloca (strlen (argv[0]) + 1);
       strcpy ((char*)cmdname, argv[0]);
     }
   UNGCPRO;
@@ -688,7 +690,7 @@ sys_spawnve (int mode, CONST char *cmdname,
   /* make sure argv[0] and cmdname are both in DOS format */
   unixtodos_filename ((char*)cmdname);
   /* #### KLUDGE */
-  ((CONST char**)argv)[0] = cmdname;
+  ((const char**)argv)[0] = cmdname;
 
   /* Determine whether program is a 16-bit DOS executable, or a Win32
      executable that is implicitly linked to the Cygnus dll (implying it
@@ -702,7 +704,7 @@ sys_spawnve (int mode, CONST char *cmdname,
      while leaving the real app name as argv[0].  */
   if (is_dos_app)
     {
-      cmdname = alloca (MAXPATHLEN);
+      cmdname = (char*) alloca (MAXPATHLEN);
       if (egetenv ("CMDPROXY"))
        strcpy ((char*)cmdname, egetenv ("CMDPROXY"));
       else
@@ -801,7 +803,7 @@ sys_spawnve (int mode, CONST char *cmdname,
        }
       arglen += strlen (*targ++) + 1;
     }
-  cmdline = alloca (arglen);
+  cmdline = (char*) alloca (arglen);
   targ = (char**)argv;
   parg = cmdline;
   while (*targ)
@@ -883,7 +885,7 @@ sys_spawnve (int mode, CONST char *cmdname,
   
   /* and envp...  */
   arglen = 1;
-  targ = (char**)envp;
+  targ = (char**) envp;
   numenv = 1; /* for end null */
   while (*targ)
     {
@@ -897,11 +899,11 @@ sys_spawnve (int mode, CONST char *cmdname,
   numenv++;
 
   /* merge env passed in and extra env into one, and sort it.  */
-  targ = (char **) alloca (numenv * sizeof (char *));
-  merge_and_sort_env ((char**)envp, extra_env, targ);
+  targ = (char **) alloca (numenv * sizeof (char*));
+  merge_and_sort_env ((char**) envp, extra_env, targ);
 
   /* concatenate env entries.  */
-  env = alloca (arglen);
+  env = (char*) alloca (arglen);
   parg = env;
   while (*targ)
     {
@@ -945,7 +947,7 @@ find_child_console (HWND hwnd, child_process * cp)
 
       GetClassName (hwnd, window_class, sizeof (window_class));
       if (strcmp (window_class,
-                 (os_subtype == OS_WIN95)
+                 windows9x_p()
                  ? "tty"
                  : "ConsoleWindowClass") == 0)
        {
@@ -1038,7 +1040,7 @@ sys_kill (int pid, int sig)
       if (NILP (Vwin32_start_process_share_console) && cp && cp->hwnd)
        {
 #if 1
-         if (os_subtype == OS_WIN95)
+         if (windows9x_p())
            {
 /*
    Another possibility is to try terminating the VDM out-right by
@@ -1099,7 +1101,7 @@ sys_kill (int pid, int sig)
 
 #if 0
 /* Sync with FSF Emacs 19.34.6 note: ifdef'ed out in XEmacs */
-extern int report_file_error (CONST char *, Lisp_Object);
+extern int report_file_error (const char *, Lisp_Object);
 #endif
 /* The following two routines are used to manipulate stdin, stdout, and
    stderr of our child processes.
@@ -1427,7 +1429,7 @@ If successful, the new locale id is returned, otherwise nil.
 
 /* Sync with FSF Emacs 19.34.6 note: dwWinThreadId declared in
    w32term.h and defined in w32fns.c, both of which are not in current
-   XEmacs.  ### Check what we lose by ifdef'ing out these. --marcpa */
+   XEmacs.  #### Check what we lose by ifdef'ing out these. --marcpa */
 #if 0
   /* Need to set input thread locale if present.  */
   if (dwWinThreadId)
@@ -1456,8 +1458,8 @@ syms_of_ntproc ()
 void
 vars_of_ntproc (void)
 {
-  Qhigh = intern ("high");
-  Qlow = intern ("low");
+  defsymbol (&Qhigh, "high");
+  defsymbol (&Qlow, "low");
 
   DEFVAR_LISP ("win32-quote-process-args", &Vwin32_quote_process_args /*
     Non-nil enables quoting of process arguments to ensure correct parsing.