* 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:
		| @@ -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 */; | ||||
|   | ||||
| @@ -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 (); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user