[Patch] cygcheck: pretty_id misbehaving.

Bas van Gompel cygwin-patches.buzz@bavag.tmfweb.nl
Sat Oct 16 00:14:00 GMT 2004


Op Fri, 15 Oct 2004 09:59:04 -0400 schreef Christopher Faylor
in <20041015135904.GD29569@trixie.casa.cgf.cx>:
:  On Fri, Oct 15, 2004 at 02:03:24PM +0200, Bas van Gompel wrote:
: > ChangeLog-entry:
: >
: > 2004-10-15  Bas van Gompel  <cygwin-patch.buzz@bavag.tmfweb.nl>
: >
: > 	* cygcheck.cc (pretty_id): Don't exit, return. Correct layout.
:
:   Thanks.  I've checked in a variation of this patch.

Here we go again.

:  I don't see any reason to guard against n being zero

Is there a limit on the length of user/group-names?

:  or to negate
:  sz repeatedly inside of a loop.

My plan was to not negate sz at all, use the printf format-flag ``-''.
``man 3 printf'':
| Negative field widths are not supported; if you attempt to specify
| a negative field width, it is interpreted as a minus (`-') flag
| followed by a positive field width.

Also, space needs to be allocated for the trailing `\0` on uid and
gid, and notice there isn't a space at the end of the printf format.

HTH, HAND.


ChangeLog-entry:

2004-10-16  Bas van Gompel  <cygwin-patch.buzz@bavag.tmfweb.nl>

	* cygcheck.cc (pretty_id): Allocate space for trailing '\0' on uid and
	guid. Don't negate sz. Fix printf-format.


--- src/winsup/utils/cygcheck.cc	15 Oct 2004 13:57:56 -0000	1.50
+++ src/winsup/utils/cygcheck.cc	15 Oct 2004 21:29:29 -0000
@@ -816,8 +816,8 @@ pretty_id (const char *s, char *cygwin, 
   char **ng = groups - 1;
   size_t len_uid = strlen (uid);
   size_t len_gid = strlen (gid);
-  *++ng = groups[0] = (char *) alloca (len_uid += sizeof ("UID: )") - 1);
-  *++ng = groups[1] = (char *) alloca (len_gid += sizeof ("GID: )") - 1);
+  *++ng = groups[0] = (char *) alloca ((len_uid += sizeof ("UID: )") - 1) + 1);
+  *++ng = groups[1] = (char *) alloca ((len_gid += sizeof ("GID: )") - 1) + 1);
   sprintf (groups[0], "UID: %s)", uid);
   sprintf (groups[1], "GID: %s)", gid);
   size_t sz = max (len_uid, len_gid);
@@ -837,10 +837,9 @@ pretty_id (const char *s, char *cygwin, 
   printf ("\nOutput from %s (%s)\n", id, s);
   int n = 80 / (int) ++sz;
   int i = n ? n - 2 : 0;
-  sz = -sz;
   for (char **g = groups; g <= ng; g++)
     if ((g != ng) && (++i < n))
-      printf ("%*s ", sz, *g);
+      printf ("%-*s", sz, *g);
     else
       {
 	puts (*g);


L8r,

Buzz.
-- 
  ) |  | ---/ ---/  Yes, this | This message consists of true | I do not
--  |  |   /    /   really is |   and false bits entirely.    | mail for
  ) |  |  /    /    a 72 by 4 +-------------------------------+ any1 but
--  \--| /--- /---  .sigfile. |   |perl -pe "s.u(z)\1.as."    | me. 4^re



More information about the Cygwin-patches mailing list