OSDN Git Service

* cygpath.cc (main): Remove enforcing "en_US.UTF-8" locale.
authorcorinna <corinna>
Thu, 7 Jan 2010 21:08:11 +0000 (21:08 +0000)
committercorinna <corinna>
Thu, 7 Jan 2010 21:08:11 +0000 (21:08 +0000)
Revert usage of argz functions when reading input from file and
simplify option usage.  Allow only one option argument and use
the rest as filename argument to allow spaces in filenames.  Restrict
processing special folder type options to one line.

winsup/utils/ChangeLog
winsup/utils/cygpath.cc

index 727817b..e3bab28 100644 (file)
@@ -1,3 +1,11 @@
+2010-01-07  Corinna Vinschen  <corinna@vinschen.de>
+
+       * cygpath.cc (main): Remove enforcing "en_US.UTF-8" locale.
+       Revert usage of argz functions when reading input from file and
+       simplify option usage.  Allow only one option argument and use
+       the rest as filename argument to allow spaces in filenames.  Restrict
+       processing special folder type options to one line.
+
 2009-12-17  Christopher Faylor  <me+cygwin@cgf.cx>
 
        * ps.cc (main): Return 0 if pid found.
index 83d4e3f..6af5d0d 100644 (file)
@@ -1,6 +1,6 @@
 /* cygpath.cc -- convert pathnames between Windows and Unix format
    Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007, 2008, 2009 Red Hat, Inc.
+   2006, 2007, 2008, 2009, 2010 Red Hat, Inc.
 
 This file is part of Cygwin.
 
@@ -16,7 +16,6 @@ details. */
 #include <wchar.h>
 #include <locale.h>
 #include <stdlib.h>
-#include <argz.h>
 #include <limits.h>
 #include <getopt.h>
 #include <windows.h>
@@ -30,7 +29,7 @@ details. */
 #include <ddk/ntifs.h>
 #include "wide_path.h"
 
-static const char version[] = "$Revision$";
+static const char version[] = "$Revision: 1.57 $";
 
 static char *prog_name;
 static char *file_arg, *output_arg;
@@ -1029,10 +1028,7 @@ main (int argc, char **argv)
 {
   int o;
 
-  /* Use locale from environment.  If not set or set to "C", use UTF-8. */
   setlocale (LC_CTYPE, "");
-  if (!strcmp (setlocale (LC_CTYPE, NULL), "C"))
-    setlocale (LC_CTYPE, "en_US.UTF-8");
   prog_name = strrchr (argv[0], '/');
   if (!prog_name)
     prog_name = strrchr (argv[0], '\\');
@@ -1070,35 +1066,33 @@ main (int argc, char **argv)
 
       while (fgets (buf, sizeof (buf), fp))
        {
-         size_t azl = 0;
-         int ac;
-         char *az, **av;
+         int ac = 0;
+         char *av[4] = { NULL, NULL, NULL, NULL };
          char *p = strchr (buf, '\n');
          if (p)
            *p = '\0';
-         if (argz_create_sep (buf, ' ', &az, &azl))
+         p = buf;
+         av[ac++] = prog_name;
+         av[ac++] = p;
+         if (options_from_file_flag && *p == '-')
            {
-             perror ("cygpath");
-             exit (1);
+             while (*p && !isspace (*p))
+               ++p;
+             if (*p)
+               {
+                 *p++ = '\0';
+                 while (*p && isspace (*p))
+                   ++p;
+                 av[ac++] = p;
+               }
+             o = do_options (ac, av, 1);
            }
-         if (!az)
-           continue;
-         ac = argz_count (az, azl) + 1;
-         av = (char **) malloc ((ac + 1) * sizeof (char *));
-         if (!av)
+         else
            {
-             perror ("cygpath");
-             exit (1);
+             output_flag = 0;
+             optind = 1;
            }
-         av[0] = prog_name;
-         argz_extract (az, azl, av + 1);
-         if (options_from_file_flag)
-           o = do_options (ac, av, 1);
-         else
-           optind = 1;
          action (ac, av, o);
-         free (az);
-         free (av);
        }
     }
   exit (0);