aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2005-12-27 18:10:49 +0000
committerCorinna Vinschen <corinna@vinschen.de>2005-12-27 18:10:49 +0000
commit9e68bb7b50888ba3ff1c2bbcef78e6f6c9f1b4a0 (patch)
tree9998356dfe4d013ff7dce82ff69d821af33c98b0
parent22d7108ee5dbd881a6d48855d6de2e425a4d5e3e (diff)
downloadnewlib-9e68bb7b50888ba3ff1c2bbcef78e6f6c9f1b4a0.zip
newlib-9e68bb7b50888ba3ff1c2bbcef78e6f6c9f1b4a0.tar.gz
newlib-9e68bb7b50888ba3ff1c2bbcef78e6f6c9f1b4a0.tar.bz2
* path.cc (path_conv::check): Rework loop removing trailing dots
and spaces. * syslog.cc (vklog): Set facility to LOG_KERN if not set.
-rw-r--r--winsup/cygwin/path.cc26
-rw-r--r--winsup/cygwin/syslog.cc2
2 files changed, 19 insertions, 9 deletions
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index f2b56cf..8fc616e 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -955,18 +955,26 @@ out:
{
if (strncmp (path, "\\\\.\\", 4))
{
- /* Windows ignores trailing dots and spaces */
+ /* Windows ignores trailing dots and spaces in the last path
+ component, and ignores exactly one trailing dot in inner
+ path components. */
char *tail = NULL;
for (char *p = path; *p; p++)
- if (*p != '.' && *p != ' ')
- tail = NULL;
- else if (p[1] == '\\')
- {
- memmove (p, p + 1, strlen (p));
+ {
+ if (*p != '.' && *p != ' ')
tail = NULL;
- }
- else if (!tail)
- tail = p;
+ else if (!tail)
+ tail = p;
+ if (tail && p[1] == '\\')
+ {
+ if (p > tail || *tail != '.')
+ {
+ error = ENOENT;
+ return;
+ }
+ tail = NULL;
+ }
+ }
if (!tail || tail == path)
/* nothing */;
diff --git a/winsup/cygwin/syslog.cc b/winsup/cygwin/syslog.cc
index fc6758b..2ea0d62 100644
--- a/winsup/cygwin/syslog.cc
+++ b/winsup/cygwin/syslog.cc
@@ -484,6 +484,8 @@ vklog (int priority, const char *message, va_list ap)
/* TODO: kernel messages are under our control entirely and they should
be quick. No playing with /dev/null, but a fixed upper size for now. */
char buf[2060]; /* 2048 + a prority */
+ if (!(priority & ~LOG_PRIMASK))
+ priority = LOG_KERN | LOG_PRI (priority);
__small_sprintf (buf, "<%d>", priority);
__small_vsprintf (buf + strlen (buf), message, ap);
klog_guard.init ("klog_guard")->acquire ();