[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

[PATCH] Lining up option descriptions in cmdline binary help

From: <cmpilato_at_collab.net>
Date: 2002-04-14 09:04:23 CEST

My brain feels super-mushy right now, so rather than commit this chunk
of elementary code, I'll send it to the list for review. I feel sure
that there's some better way to do what I did here (hopefully not
involving a series of single-space apr_pstrcat's) but the old
Thinker's coming up shorthanded. At any rate, the SEGFAULT protection
code needs to be committed.

--
* subversion/clients/cmdline/main.c
  (format_option): Fix potential segfault when OPT is NULL.  Also,
  stop using tabs to supposedly attempt to line up the documentation
  strings ... it just doesn't work.
Index: ./subversion/clients/cmdline/main.c
===================================================================
--- ./subversion/clients/cmdline/main.c
+++ ./subversion/clients/cmdline/main.c	Sun Apr 14 01:58:22 2002
@@ -351,20 +351,43 @@
                apr_pool_t *pool)
 {
   char *opts;
+  char optsw[24]; /* ### this needs to be at least as long as the
+                     longest option string up to the optional ARG. */
 
+  /* If there is no option, just return a '?' string. */
   if (opt == NULL)
-    *string = apr_psprintf (pool, "?");
+    {
+      *string = apr_psprintf (pool, "?");
+      return;
+    }
 
+  /* Else, we have a valid option which may or may not have a "short
+     name" (a single-character alias for the long option).  */
   if (opt->optch <= 255)  
     opts = apr_psprintf (pool, "-%c [--%s]", opt->optch, opt->name);
   else
     opts = apr_psprintf (pool, "--%s", opt->name);
 
+  /* If option takes an argument, specify this in the string. */
   if (opt->has_arg)
     opts = apr_pstrcat (pool, opts, " arg", NULL);
   
+  /* If there exists documentation for the option, add this to the
+     string as well, starting at the sizeof(optsw)'th column. */
   if (doc)
-    opts = apr_pstrcat (pool, opts, ":\t", opt->description, NULL);
+    {
+      int opts_len = strlen (opts);
+      int optsw_len = sizeof (optsw) / sizeof (*optsw);
+      int i;
+
+      /* Pad the existing OPTS string up to sizeof(optsw) with, well,
+         spaces. */
+      for (i = 0; i < (optsw_len - 1); i++)
+        optsw[i] = ((i < opts_len) ? opts[i] : ' ');
+      
+      optsw[optsw_len - 1] = 0;
+      opts = apr_psprintf (pool, "%s : %s", optsw, opt->description);
+    }
 
   *string = opts;
 }
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sun Apr 14 09:07:08 2002

This is an archived mail posted to the Subversion Dev mailing list.