]> sourceware.org Git - newlib-cygwin.git/commitdiff
* environ.cc (regopt): Change the first argument to wide char string.
authorChristopher Faylor <me@cgf.cx>
Tue, 18 May 2010 14:30:51 +0000 (14:30 +0000)
committerChristopher Faylor <me@cgf.cx>
Tue, 18 May 2010 14:30:51 +0000 (14:30 +0000)
(environ_init): Accommodate change to the first argument of regopt.
* exception.cc (open_stackdumpfile): Accommodate change to the type of progname
in _pinfo.
* external.cc (fillout_pinfo): Ditto.
* fhandler_process.cc (format_process_winexename): Ditto.
(format_process_stat): Ditto.
* fork.cc (fork::parent): Ditto.
* pinfo.cc (pinfo_basic::pinfo_basic): Call GetModuleFileNameW instead of
GetModuleFileName.
(pinfo::thisproc): Accommodate change to the type of progname in _pinfo.
(pinfo_init): Ditto.
* pinfo.h (_pinfo): Change the type of progname to a wide char array.
* registry.h (reg_key::get_int): Change the first argument from constant point
to pointer to constant.
(reg_key::get_string): Ditto.  Change the last argument likewise.
* registry.cc (reg_key::get_int): Accommodate change to the declaration.
(reg_key::get_string): Ditto.
* strace.cc (strace::hello): Accommodate change to the type of progname in
_pinfo.
(strace::vsprntf): Ditto.

12 files changed:
winsup/cygwin/ChangeLog
winsup/cygwin/environ.cc
winsup/cygwin/exceptions.cc
winsup/cygwin/external.cc
winsup/cygwin/fhandler_process.cc
winsup/cygwin/fork.cc
winsup/cygwin/pinfo.cc
winsup/cygwin/pinfo.h
winsup/cygwin/registry.cc
winsup/cygwin/registry.h
winsup/cygwin/spawn.cc
winsup/cygwin/strace.cc

index a2d40a9f60821c66dfbdd8f1bf87e27dbd4395e1..cbf2a0e45b75e9811a28c36cdb7acf6e84e0ea1e 100644 (file)
@@ -1,3 +1,29 @@
+2010-05-18  Kazuhiro Fujida  <fujieda@acm.org>
+
+       * environ.cc (regopt): Change the first argument to wide char string.
+       (environ_init): Accommodate change to the first argument of regopt.
+       * exception.cc (open_stackdumpfile): Accommodate change to the type of
+       progname in _pinfo.
+       * external.cc (fillout_pinfo): Ditto.
+       * fhandler_process.cc (format_process_winexename): Ditto.
+       (format_process_stat): Ditto.
+       * fork.cc (fork::parent): Ditto.
+       * pinfo.cc (pinfo_basic::pinfo_basic): Call GetModuleFileNameW instead
+       of GetModuleFileName.
+       (pinfo::thisproc): Accommodate change to the type of progname in
+       _pinfo.
+       (pinfo_init): Ditto.
+       * pinfo.h (_pinfo): Change the type of progname to a wide char array.
+       * registry.h (reg_key::get_int): Change the first argument from
+       constant point to pointer to constant.
+       (reg_key::get_string): Ditto.  Change the last argument likewise.
+       * registry.cc (reg_key::get_int): Accommodate change to the
+       declaration.
+       (reg_key::get_string): Ditto.
+       * strace.cc (strace::hello): Accommodate change to the type of progname
+       in _pinfo.
+       (strace::vsprntf): Ditto.
+
 2010-05-07  Christopher Faylor  <me+cygwin@cgf.cx>
 
        * Makefile.in (DLL_OFILES): Add pseudo-reloc.o.
index 4935bc8152906b40cc1370df1d55682e0ec0dc0d..9d1544429fe13fdc583e79ad7c2fce2922ef217d 100644 (file)
@@ -29,6 +29,7 @@ details. */
 #include "registry.h"
 #include "environ.h"
 #include "child_info.h"
+#include "ntdll.h"
 
 extern bool dos_file_warning;
 extern bool ignore_case_with_glob;
@@ -698,18 +699,24 @@ parse_options (char *buf)
 
 /* Set options from the registry. */
 static bool __stdcall
-regopt (const char *name, char *buf)
+regopt (const WCHAR *name, char *buf)
 {
   bool parsed_something = false;
-  char lname[strlen (name) + 1];
-  strlwr (strcpy (lname, name));
+  UNICODE_STRING lname;
+  size_t len = (wcslen(name) + 1) * sizeof (WCHAR);
+  RtlInitEmptyUnicodeString(&lname, (PWCHAR) alloca (len), len);
+  wcscpy(lname.Buffer, name);
+  RtlDowncaseUnicodeString(&lname, &lname, FALSE);
 
   for (int i = 0; i < 2; i++)
     {
       reg_key r (i, KEY_READ, CYGWIN_INFO_PROGRAM_OPTIONS_NAME, NULL);
 
-      if (r.get_string (lname, buf, NT_MAX_PATH, "") == ERROR_SUCCESS)
+      if (r.get_string (lname.Buffer, (PWCHAR) buf, NT_MAX_PATH, L"") == ERROR_SUCCESS)
        {
+         char *newp;
+         sys_wcstombs_alloc(&newp, HEAP_NOTHEAP, (PWCHAR) buf);
+         strcpy(buf, newp);
          parse_options (buf);
          parsed_something = true;
          break;
@@ -747,7 +754,7 @@ environ_init (char **envp, int envc)
       }
 
   char *tmpbuf = tp.t_get ();
-  got_something_from_registry = regopt ("default", tmpbuf);
+  got_something_from_registry = regopt (L"default", tmpbuf);
   if (myself->progname[0])
     got_something_from_registry = regopt (myself->progname, tmpbuf)
                                  || got_something_from_registry;
index ed72f79671420d6721cb4b174f423986c34410d8..16a4e190fd369801c010664baee820c0f9bcb5f5 100644 (file)
@@ -130,24 +130,21 @@ open_stackdumpfile ()
 {
   if (myself->progname[0])
     {
-      const char *p;
+      const WCHAR *p;
       /* write to progname.stackdump if possible */
       if (!myself->progname[0])
-       p = "unknown";
-      else if ((p = strrchr (myself->progname, '\\')))
+       p = L"unknown";
+      else if ((p = wcsrchr (myself->progname, L'\\')))
        p++;
       else
        p = myself->progname;
 
-      WCHAR corefile[strlen (p) + sizeof (".stackdump")];
+      WCHAR corefile[wcslen (p) + sizeof (".stackdump")];
+      wcscpy(corefile, p);
       UNICODE_STRING ucore;
       OBJECT_ATTRIBUTES attr;
       /* Create the UNICODE variation of <progname>.stackdump. */
-      RtlInitEmptyUnicodeString (&ucore, corefile,
-                                sizeof corefile - sizeof (WCHAR));
-      ucore.Length = sys_mbstowcs (ucore.Buffer,
-                                  ucore.MaximumLength / sizeof (WCHAR),
-                                  p, strlen (p)) * sizeof (WCHAR);
+      RtlInitUnicodeString (&ucore, corefile);
       RtlAppendUnicodeToString (&ucore, L".stackdump");
       /* Create an object attribute which refers to <progname>.stackdump
         in Cygwin's cwd.  Stick to caseinsensitivity. */
index c8cbd93705e8c8b52dd389f785f77accf7a6e18a..d76000916a89b4dbccf1202ee30a2529e07135af 100644 (file)
@@ -89,7 +89,7 @@ fillout_pinfo (pid_t pid, int winpid)
          ep.rusage_self = p->rusage_self;
          ep.rusage_children = p->rusage_children;
          ep.progname[0] = '\0';
-         strncat (ep.progname, p->progname, MAX_PATH - 1);
+         sys_wcstombs(ep.progname, MAX_PATH, p->progname);
          ep.strace_mask = 0;
          ep.version = EXTERNAL_PINFO_VERSION;
 
@@ -99,7 +99,7 @@ fillout_pinfo (pid_t pid, int winpid)
          ep.gid32 = p->gid;
 
          ep.progname_long = ep_progname_long_buf;
-         strcpy (ep.progname_long, p->progname);
+         sys_wcstombs(ep.progname_long, NT_MAX_PATH, p->progname);
          break;
        }
     }
index 10610541f21531657ad1f5dc64750b4cfe693bc8..83b69b84a0d0b009eb3e07ad47cc926f905727fa 100644 (file)
@@ -537,9 +537,9 @@ static _off64_t
 format_process_winexename (void *data, char *&destbuf)
 {
   _pinfo *p = (_pinfo *) data;
-  int len = strlen (p->progname);
-  destbuf = (char *) crealloc_abort (destbuf, len + 2);
-  strcpy (destbuf, p->progname);
+  size_t len = sys_wcstombs (NULL, 0, p->progname);
+  destbuf = (char *) crealloc_abort (destbuf, len + 1);
+  sys_wcstombs (destbuf, len, p->progname);
   destbuf[len] = '\n';
   return len + 1;
 }
@@ -649,6 +649,7 @@ format_process_stat (void *data, char *&destbuf)
 {
   _pinfo *p = (_pinfo *) data;
   char cmd[NAME_MAX + 1];
+  WCHAR wcmd[NAME_MAX + 1];
   int state = 'R';
   unsigned long fault_count = 0UL,
                utime = 0UL, stime = 0UL,
@@ -659,8 +660,9 @@ format_process_stat (void *data, char *&destbuf)
     strcpy (cmd, "<defunct>");
   else
     {
-      char *last_slash = strrchr (p->progname, '\\');
-      strcpy (cmd, last_slash ? last_slash + 1 : p->progname);
+      PWCHAR last_slash = wcsrchr (p->progname, L'\\');
+      wcscpy (wcmd, last_slash ? last_slash + 1 : p->progname);
+      sys_wcstombs (cmd, NAME_MAX + 1, wcmd);
       int len = strlen (cmd);
       if (len > 4)
        {
@@ -779,6 +781,7 @@ format_process_status (void *data, char *&destbuf)
 {
   _pinfo *p = (_pinfo *) data;
   char cmd[NAME_MAX + 1];
+  WCHAR wcmd[NAME_MAX + 1];
   int state = 'R';
   const char *state_str = "unknown";
   unsigned long vmsize = 0UL, vmrss = 0UL, vmdata = 0UL, vmlib = 0UL, vmtext = 0UL,
@@ -787,8 +790,9 @@ format_process_status (void *data, char *&destbuf)
     strcpy (cmd, "<defunct>");
   else
     {
-      char *last_slash = strrchr (p->progname, '\\');
-      strcpy (cmd, last_slash ? last_slash + 1 : p->progname);
+      PWCHAR last_slash = wcsrchr (p->progname, L'\\');
+      wcscpy (wcmd, last_slash ? last_slash + 1 : p->progname);
+      sys_wcstombs (cmd, NAME_MAX + 1, wcmd);
       int len = strlen (cmd);
       if (len > 4)
        {
index f0a427a63cf7ceafada7fd18ccf2d955ea21174b..97440ae0f7058dc6576e76f7c6fb26a09574a556 100644 (file)
@@ -342,13 +342,8 @@ frok::parent (volatile char * volatile stack_here)
   si.lpReserved2 = (LPBYTE) &ch;
   si.cbReserved2 = sizeof (ch);
 
-  /* FIXME: myself->progname should be converted to WCHAR. */
-  tmp_pathbuf tp;
-  PWCHAR progname = tp.w_get ();
-  sys_mbstowcs (progname, NT_MAX_PATH, myself->progname);
-
   syscall_printf ("CreateProcess (%W, %W, 0, 0, 1, %p, 0, 0, %p, %p)",
-                 progname, progname, c_flags, &si, &pi);
+                 myself->progname, myself->progname, c_flags, &si, &pi);
   bool locked = __malloc_lock ();
   time_t start_time = time (NULL);
 
@@ -358,8 +353,8 @@ frok::parent (volatile char * volatile stack_here)
 
   while (1)
     {
-      rc = CreateProcessW (progname, /* image to run */
-                          progname, /* what we send in arg0 */
+      rc = CreateProcessW (myself->progname, /* image to run */
+                          myself->progname, /* what we send in arg0 */
                           &sec_none_nih,
                           &sec_none_nih,
                           TRUE,          /* inherit handles from parent */
@@ -430,7 +425,7 @@ frok::parent (volatile char * volatile stack_here)
 
   /* Initialize things that are done later in dll_crt0_1 that aren't done
      for the forkee.  */
-  strcpy (child->progname, myself->progname);
+  wcscpy (child->progname, myself->progname);
 
   /* Fill in fields in the child's process table entry.  */
   child->dwProcessId = pi.dwProcessId;
index cdc801d56afccc0d13d821cd776d90ba91b51b0d..e0b1e1f02b1e77505eb63fcec0abd18cb0fcf2a2 100644 (file)
@@ -39,7 +39,7 @@ public:
 pinfo_basic::pinfo_basic()
 {
   pid = dwProcessId = GetCurrentProcessId ();
-  GetModuleFileName (NULL, progname, sizeof (progname));
+  GetModuleFileNameW (NULL, progname, sizeof (progname));
 }
 
 pinfo_basic myself_initial NO_COPY;
@@ -62,7 +62,7 @@ pinfo::thisproc (HANDLE h)
   init (cygheap->pid, PID_IN_USE, h ?: INVALID_HANDLE_VALUE);
   procinfo->process_state |= PID_IN_USE;
   procinfo->dwProcessId = myself_initial.pid;
-  strcpy (procinfo->progname, myself_initial.progname);
+  wcscpy (procinfo->progname, myself_initial.progname);
   strace.hello ();
   debug_printf ("myself->dwProcessId %u", procinfo->dwProcessId);
   if (h)
@@ -121,7 +121,9 @@ status_exit (DWORD x)
     case STATUS_DLL_NOT_FOUND:
       {
        char posix_prog[NT_MAX_PATH];
-       path_conv pc (myself->progname, PC_NOWARN);
+       UNICODE_STRING uc;
+       RtlInitUnicodeString(&uc, myself->progname);
+       path_conv pc (&uc, PC_NOWARN);
        mount_table->conv_to_posix_path (pc.get_win32 (), posix_prog, 1);
        small_printf ("%s: error while loading shared libraries: %s: cannot open shared object file: No such file or directory\n",
                      posix_prog, find_first_notloaded_dll (pc));
index 8a30b8dcfb00e9f378036a3612b979874cfdff50..3e7e547dfc0a9dfa3354175050903d65c8478197 100644 (file)
@@ -64,7 +64,7 @@ public:
   DWORD dwProcessId;
 
   /* Used to spawn a child for fork(), among other things. */
-  char progname[NT_MAX_PATH];
+  WCHAR progname[NT_MAX_PATH];
 
   /* User information.
      The information is derived from the GetUserName system call,
index c71ff7902325c981728d7c2a9c88e54a32f5c45c..5f65603d8a4beacd64bc36208e6f3d5557230729 100644 (file)
@@ -123,7 +123,7 @@ reg_key::get_int (const char *name, int def)
 }
 
 int
-reg_key::get_int (const PWCHAR name, int def)
+reg_key::get_int (const WCHAR *name, int def)
 {
   DWORD type;
   DWORD dst;
@@ -185,7 +185,7 @@ reg_key::get_string (const char *name, char *dst, size_t max, const char *def)
 }
 
 int
-reg_key::get_string (const PWCHAR name, PWCHAR dst, size_t max, const PWCHAR def)
+reg_key::get_string (const WCHAR *name, PWCHAR dst, size_t max, const WCHAR *def)
 {
   DWORD size = max;
   DWORD type;
index b14c3afb52f08ad889f2fb734e1aa3f94bc09d5c..2b0f4657acc7ac155fa8dbd9f2e74bc893cc9af0 100644 (file)
@@ -32,9 +32,9 @@ public:
   HKEY get_key ();
 
   int get_int (const char *, int);
-  int get_int (const PWCHAR, int);
+  int get_int (const WCHAR *, int);
   int get_string (const char *, char *, size_t, const char *);
-  int get_string (const PWCHAR, PWCHAR, size_t, const PWCHAR);
+  int get_string (const WCHAR *, PWCHAR, size_t, const WCHAR *);
 
   int set_int (const char *, int);
   int set_int (const PWCHAR, int);
index e583f8fea383e57c27897d8a03760299cbc81880..7f67389765a6c072fbe4023383ea498429065978 100644 (file)
@@ -692,8 +692,8 @@ loop:
       myself->dwProcessId = pi.dwProcessId;
       strace.execing = 1;
       myself.hProcess = hExeced = pi.hProcess;
-      strcpy (myself->progname, real_path.get_win32 ()); // FIXME: race?
-      sigproc_printf ("new process name %s", myself->progname);
+      wcscpy (myself->progname, real_path.get_nt_native_path ()->Buffer); // FIXME: race?
+      sigproc_printf ("new process name %S", myself->progname);
       /* If wr_proc_pipe doesn't exist then this process was not started by a cygwin
         process.  So, we need to wait around until the process we've just "execed"
         dies.  Use our own wait facility to wait for our own pid to exit (there
@@ -733,7 +733,7 @@ loop:
       child->dwProcessId = pi.dwProcessId;
       child.hProcess = pi.hProcess;
 
-      strcpy (child->progname, real_path.get_win32 ());
+      wcscpy (child->progname, real_path.get_nt_native_path ()->Buffer);
       /* FIXME: This introduces an unreferenced, open handle into the child.
         The purpose is to keep the pid shared memory open so that all of
         the fields filled out by child.remember do not disappear and so there
index beba5b335f2491c81d307cd8475fc377631fbd19..4670f8a9a85bd6ea331ae56e29adf1efb40a69a2 100644 (file)
@@ -52,11 +52,11 @@ strace::hello ()
        __small_sprintf (pidbuf, "(pid %d, ppid %d)", myself->pid, myself->ppid ?: 1);
       else
        {
-         GetModuleFileName (NULL, myself->progname, sizeof (myself->progname));
+         GetModuleFileNameW (NULL, myself->progname, sizeof (myself->progname));
          __small_sprintf (pidbuf, "(windows pid %d)", GetCurrentProcessId ());
        }
       prntf (1, NULL, "**********************************************");
-      prntf (1, NULL, "Program name: %s %s", myself->progname, pidbuf);
+      prntf (1, NULL, "Program name: %W %s", myself->progname, pidbuf);
       prntf (1, NULL, "App version:  %d.%d, api: %d.%d",
             user_data->dll_major, user_data->dll_minor,
             user_data->api_major, user_data->api_minor);
@@ -135,7 +135,7 @@ strace::vsprntf (char *buf, const char *func, const char *infmt, va_list ap)
   int microsec = microseconds ();
   lmicrosec = microsec;
 
-  __small_sprintf (fmt, "%7d [%s] %s ", microsec, tn, "%s %s%s");
+  __small_sprintf (fmt, "%7d [%s] %s ", microsec, tn, "%W %s%s");
 
   SetLastError (err);
 
@@ -143,34 +143,32 @@ strace::vsprntf (char *buf, const char *func, const char *infmt, va_list ap)
     count = 0;
   else
     {
-      char *pn;
+      PWCHAR pn = NULL;
+      WCHAR progname[NT_MAX_PATH];
       if (!cygwin_finished_initializing)
-       pn = myself ? myself->progname : NULL;
+       pn = (myself) ? myself->progname : NULL;
       else if (__progname)
-       pn = __progname;
-      else
-       pn = NULL;
+       sys_mbstowcs(pn = progname, NT_MAX_PATH, __progname);
 
-      char *p;
-      char progname[NT_MAX_PATH];
+      PWCHAR p;
       if (!pn)
-       GetModuleFileName (NULL, pn = progname, sizeof (progname));
+       GetModuleFileNameW (NULL, pn = progname, sizeof (progname));
       if (!pn)
        /* hmm */;
-      else if ((p = strrchr (pn, '\\')) != NULL)
+      else if ((p = wcsrchr (pn, L'\\')) != NULL)
        p++;
-      else if ((p = strrchr (pn, '/')) != NULL)
+      else if ((p = wcsrchr (pn, L'/')) != NULL)
        p++;
       else
        p = pn;
       if (p != progname)
-       strcpy (progname, p);
-      if ((p = strrchr (progname, '.')) != NULL
-         && ascii_strcasematch (p, ".exe"))
+       wcscpy (progname, p);
+      if ((p = wcsrchr (progname, '.')) != NULL
+         && !wcscasecmp (p, L".exe"))
        *p = '\000';
       p = progname;
       char tmpbuf[20];
-      count = __small_sprintf (buf, fmt, p && *p ? p : "?", mypid (tmpbuf),
+      count = __small_sprintf (buf, fmt, *p ? p : L"?", mypid (tmpbuf),
                               execing ? "!" : "");
       if (func)
        count += getfunc (buf + count, func);
This page took 0.053487 seconds and 5 git commands to generate.