* path.cc (path_conv::check): Rework loop removing trailing dots

and spaces.

	* syslog.cc (vklog): Set facility to LOG_KERN if not set.
This commit is contained in:
Corinna Vinschen 2005-12-27 18:10:49 +00:00
parent 22d7108ee5
commit 9e68bb7b50
2 changed files with 19 additions and 9 deletions

View File

@ -955,18 +955,26 @@ out:
{ {
if (strncmp (path, "\\\\.\\", 4)) 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; char *tail = NULL;
for (char *p = path; *p; p++) for (char *p = path; *p; p++)
if (*p != '.' && *p != ' ') {
tail = NULL; if (*p != '.' && *p != ' ')
else if (p[1] == '\\')
{
memmove (p, p + 1, strlen (p));
tail = NULL; tail = NULL;
} else if (!tail)
else if (!tail) tail = p;
tail = p; if (tail && p[1] == '\\')
{
if (p > tail || *tail != '.')
{
error = ENOENT;
return;
}
tail = NULL;
}
}
if (!tail || tail == path) if (!tail || tail == path)
/* nothing */; /* nothing */;

View File

@ -484,6 +484,8 @@ vklog (int priority, const char *message, va_list ap)
/* TODO: kernel messages are under our control entirely and they should /* 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. */ be quick. No playing with /dev/null, but a fixed upper size for now. */
char buf[2060]; /* 2048 + a prority */ char buf[2060]; /* 2048 + a prority */
if (!(priority & ~LOG_PRIMASK))
priority = LOG_KERN | LOG_PRI (priority);
__small_sprintf (buf, "<%d>", priority); __small_sprintf (buf, "<%d>", priority);
__small_vsprintf (buf + strlen (buf), message, ap); __small_vsprintf (buf + strlen (buf), message, ap);
klog_guard.init ("klog_guard")->acquire (); klog_guard.init ("klog_guard")->acquire ();