Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--winsup/utils/ChangeLog8
-rw-r--r--winsup/utils/cygpath.cc46
2 files changed, 28 insertions, 26 deletions
diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog
index 727817b3b..e3bab28ab 100644
--- a/winsup/utils/ChangeLog
+++ b/winsup/utils/ChangeLog
@@ -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.
diff --git a/winsup/utils/cygpath.cc b/winsup/utils/cygpath.cc
index 83d4e3fd3..3f6e5a9cc 100644
--- a/winsup/utils/cygpath.cc
+++ b/winsup/utils/cygpath.cc
@@ -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>
@@ -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);