Imported Upstream version 1.4
[debian/gzip] / lib / quotearg.c
index 8380e9de6c038e604e50440d5ac49415a94c7aa2..5418f512bcff0a12cdbf021af4328da593ccdb13 100644 (file)
@@ -1,7 +1,7 @@
 /* quotearg.c - quote arguments for output
 
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007,
-   2008 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008,
+   2009, 2010 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -100,7 +100,7 @@ clone_quoting_options (struct quoting_options *o)
 {
   int e = errno;
   struct quoting_options *p = xmemdup (o ? o : &default_quoting_options,
-                                      sizeof *o);
+                                       sizeof *o);
   errno = e;
   return p;
 }
@@ -202,11 +202,11 @@ gettext_quote (char const *msgid, enum quoting_style s)
 
 static size_t
 quotearg_buffer_restyled (char *buffer, size_t buffersize,
-                         char const *arg, size_t argsize,
-                         enum quoting_style quoting_style, int flags,
-                         unsigned int const *quote_these_too,
-                         char const *left_quote,
-                         char const *right_quote)
+                          char const *arg, size_t argsize,
+                          enum quoting_style quoting_style, int flags,
+                          unsigned int const *quote_these_too,
+                          char const *left_quote,
+                          char const *right_quote)
 {
   size_t i;
   size_t len = 0;
@@ -219,9 +219,9 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
 #define STORE(c) \
     do \
       { \
-       if (len < buffersize) \
-         buffer[len] = (c); \
-       len++; \
+        if (len < buffersize) \
+          buffer[len] = (c); \
+        len++; \
       } \
     while (0)
 
@@ -233,7 +233,7 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
       /* Fall through.  */
     case c_quoting_style:
       if (!elide_outer_quotes)
-       STORE ('"');
+        STORE ('"');
       backslash_escapes = true;
       quote_string = "\"";
       quote_string_len = 1;
@@ -248,36 +248,36 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
     case clocale_quoting_style:
     case custom_quoting_style:
       {
-       if (quoting_style != custom_quoting_style)
-         {
-           /* TRANSLATORS:
-              Get translations for open and closing quotation marks.
-
-              The message catalog should translate "`" to a left
-              quotation mark suitable for the locale, and similarly for
-              "'".  If the catalog has no translation,
-              locale_quoting_style quotes `like this', and
-              clocale_quoting_style quotes "like this".
-
-              For example, an American English Unicode locale should
-              translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
-              should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
-              MARK).  A British English Unicode locale should instead
-              translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
-              and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
-
-              If you don't know what to put here, please see
-              <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
-              and use glyphs suitable for your language.  */
-           left_quote = gettext_quote (N_("`"), quoting_style);
-           right_quote = gettext_quote (N_("'"), quoting_style);
-         }
-       if (!elide_outer_quotes)
-         for (quote_string = left_quote; *quote_string; quote_string++)
-           STORE (*quote_string);
-       backslash_escapes = true;
-       quote_string = right_quote;
-       quote_string_len = strlen (quote_string);
+        if (quoting_style != custom_quoting_style)
+          {
+            /* TRANSLATORS:
+               Get translations for open and closing quotation marks.
+
+               The message catalog should translate "`" to a left
+               quotation mark suitable for the locale, and similarly for
+               "'".  If the catalog has no translation,
+               locale_quoting_style quotes `like this', and
+               clocale_quoting_style quotes "like this".
+
+               For example, an American English Unicode locale should
+               translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
+               should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
+               MARK).  A British English Unicode locale should instead
+               translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+               and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+
+               If you don't know what to put here, please see
+               <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
+               and use glyphs suitable for your language.  */
+            left_quote = gettext_quote (N_("`"), quoting_style);
+            right_quote = gettext_quote (N_("'"), quoting_style);
+          }
+        if (!elide_outer_quotes)
+          for (quote_string = left_quote; *quote_string; quote_string++)
+            STORE (*quote_string);
+        backslash_escapes = true;
+        quote_string = right_quote;
+        quote_string_len = strlen (quote_string);
       }
       break;
 
@@ -287,7 +287,7 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
       /* Fall through.  */
     case shell_always_quoting_style:
       if (!elide_outer_quotes)
-       STORE ('\'');
+        STORE ('\'');
       quote_string = "'";
       quote_string_len = 1;
       break;
@@ -307,287 +307,287 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
       bool is_right_quote = false;
 
       if (backslash_escapes
-         && quote_string_len
-         && i + quote_string_len <= argsize
-         && memcmp (arg + i, quote_string, quote_string_len) == 0)
-       {
-         if (elide_outer_quotes)
-           goto force_outer_quoting_style;
-         is_right_quote = true;
-       }
+          && quote_string_len
+          && i + quote_string_len <= argsize
+          && memcmp (arg + i, quote_string, quote_string_len) == 0)
+        {
+          if (elide_outer_quotes)
+            goto force_outer_quoting_style;
+          is_right_quote = true;
+        }
 
       c = arg[i];
       switch (c)
-       {
-       case '\0':
-         if (backslash_escapes)
-           {
-             if (elide_outer_quotes)
-               goto force_outer_quoting_style;
-             STORE ('\\');
-             /* If quote_string were to begin with digits, we'd need to
-                test for the end of the arg as well.  However, it's
-                hard to imagine any locale that would use digits in
-                quotes, and set_custom_quoting is documented not to
-                accept them.  */
-             if (i + 1 < argsize && '0' <= arg[i + 1] && arg[i + 1] <= '9')
-               {
-                 STORE ('0');
-                 STORE ('0');
-               }
-             c = '0';
-             /* We don't have to worry that this last '0' will be
-                backslash-escaped because, again, quote_string should
-                not start with it and because quote_these_too is
-                documented as not accepting it.  */
-           }
-         else if (flags & QA_ELIDE_NULL_BYTES)
-           continue;
-         break;
-
-       case '?':
-         switch (quoting_style)
-           {
-           case shell_always_quoting_style:
-             if (elide_outer_quotes)
-               goto force_outer_quoting_style;
-             break;
-
-           case c_quoting_style:
-             if ((flags & QA_SPLIT_TRIGRAPHS)
-                 && i + 2 < argsize && arg[i + 1] == '?')
-               switch (arg[i + 2])
-                 {
-                 case '!': case '\'':
-                 case '(': case ')': case '-': case '/':
-                 case '<': case '=': case '>':
-                   /* Escape the second '?' in what would otherwise be
-                      a trigraph.  */
-                   if (elide_outer_quotes)
-                     goto force_outer_quoting_style;
-                   c = arg[i + 2];
-                   i += 2;
-                   STORE ('?');
-                   STORE ('"');
-                   STORE ('"');
-                   STORE ('?');
-                   break;
-
-                 default:
-                   break;
-                 }
-             break;
-
-           default:
-             break;
-           }
-         break;
-
-       case '\a': esc = 'a'; goto c_escape;
-       case '\b': esc = 'b'; goto c_escape;
-       case '\f': esc = 'f'; goto c_escape;
-       case '\n': esc = 'n'; goto c_and_shell_escape;
-       case '\r': esc = 'r'; goto c_and_shell_escape;
-       case '\t': esc = 't'; goto c_and_shell_escape;
-       case '\v': esc = 'v'; goto c_escape;
-       case '\\': esc = c;
-         /* No need to escape the escape if we are trying to elide
-            outer quotes and nothing else is problematic.  */
-         if (backslash_escapes && elide_outer_quotes && quote_string_len)
-           goto store_c;
-
-       c_and_shell_escape:
-         if (quoting_style == shell_always_quoting_style
-             && elide_outer_quotes)
-           goto force_outer_quoting_style;
-         /* Fall through.  */
-       c_escape:
-         if (backslash_escapes)
-           {
-             c = esc;
-             goto store_escape;
-           }
-         break;
-
-       case '{': case '}': /* sometimes special if isolated */
-         if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1))
-           break;
-         /* Fall through.  */
-       case '#': case '~':
-         if (i != 0)
-           break;
-         /* Fall through.  */
-       case ' ':
-       case '!': /* special in bash */
-       case '"': case '$': case '&':
-       case '(': case ')': case '*': case ';':
-       case '<':
-       case '=': /* sometimes special in 0th or (with "set -k") later args */
-       case '>': case '[':
-       case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */
-       case '`': case '|':
-         /* A shell special character.  In theory, '$' and '`' could
-            be the first bytes of multibyte characters, which means
-            we should check them with mbrtowc, but in practice this
-            doesn't happen so it's not worth worrying about.  */
-         if (quoting_style == shell_always_quoting_style
-             && elide_outer_quotes)
-           goto force_outer_quoting_style;
-         break;
-
-       case '\'':
-         if (quoting_style == shell_always_quoting_style)
-           {
-             if (elide_outer_quotes)
-               goto force_outer_quoting_style;
-             STORE ('\'');
-             STORE ('\\');
-             STORE ('\'');
-           }
-         break;
-
-       case '%': case '+': case ',': case '-': case '.': case '/':
-       case '0': case '1': case '2': case '3': case '4': case '5':
-       case '6': case '7': case '8': case '9': case ':':
-       case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-       case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-       case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-       case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-       case 'Y': case 'Z': case ']': case '_': case 'a': case 'b':
-       case 'c': case 'd': case 'e': case 'f': case 'g': case 'h':
-       case 'i': case 'j': case 'k': case 'l': case 'm': case 'n':
-       case 'o': case 'p': case 'q': case 'r': case 's': case 't':
-       case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
-         /* These characters don't cause problems, no matter what the
-            quoting style is.  They cannot start multibyte sequences.
-            A digit or a special letter would cause trouble if it
-            appeared at the beginning of quote_string because we'd then
-            escape by prepending a backslash.  However, it's hard to
-            imagine any locale that would use digits or letters as
-            quotes, and set_custom_quoting is documented not to accept
-            them.  Also, a digit or a special letter would cause
-            trouble if it appeared in quote_these_too, but that's also
-            documented as not accepting them.  */
-         break;
-
-       default:
-         /* If we have a multibyte sequence, copy it until we reach
-            its end, find an error, or come back to the initial shift
-            state.  For C-like styles, if the sequence has
-            unprintable characters, escape the whole sequence, since
-            we can't easily escape single characters within it.  */
-         {
-           /* Length of multibyte sequence found so far.  */
-           size_t m;
-
-           bool printable;
-
-           if (unibyte_locale)
-             {
-               m = 1;
-               printable = isprint (c) != 0;
-             }
-           else
-             {
-               mbstate_t mbstate;
-               memset (&mbstate, 0, sizeof mbstate);
-
-               m = 0;
-               printable = true;
-               if (argsize == SIZE_MAX)
-                 argsize = strlen (arg);
-
-               do
-                 {
-                   wchar_t w;
-                   size_t bytes = mbrtowc (&w, &arg[i + m],
-                                           argsize - (i + m), &mbstate);
-                   if (bytes == 0)
-                     break;
-                   else if (bytes == (size_t) -1)
-                     {
-                       printable = false;
-                       break;
-                     }
-                   else if (bytes == (size_t) -2)
-                     {
-                       printable = false;
-                       while (i + m < argsize && arg[i + m])
-                         m++;
-                       break;
-                     }
-                   else
-                     {
-                       /* Work around a bug with older shells that "see" a '\'
-                          that is really the 2nd byte of a multibyte character.
-                          In practice the problem is limited to ASCII
-                          chars >= '@' that are shell special chars.  */
-                       if ('[' == 0x5b && elide_outer_quotes
-                           && quoting_style == shell_always_quoting_style)
-                         {
-                           size_t j;
-                           for (j = 1; j < bytes; j++)
-                             switch (arg[i + m + j])
-                               {
-                               case '[': case '\\': case '^':
-                               case '`': case '|':
-                                 goto force_outer_quoting_style;
-
-                               default:
-                                 break;
-                               }
-                         }
-
-                       if (! iswprint (w))
-                         printable = false;
-                       m += bytes;
-                     }
-                 }
-               while (! mbsinit (&mbstate));
-             }
-
-           if (1 < m || (backslash_escapes && ! printable))
-             {
-               /* Output a multibyte sequence, or an escaped
-                  unprintable unibyte character.  */
-               size_t ilim = i + m;
-
-               for (;;)
-                 {
-                   if (backslash_escapes && ! printable)
-                     {
-                       if (elide_outer_quotes)
-                         goto force_outer_quoting_style;
-                       STORE ('\\');
-                       STORE ('0' + (c >> 6));
-                       STORE ('0' + ((c >> 3) & 7));
-                       c = '0' + (c & 7);
-                     }
-                   else if (is_right_quote)
-                     {
-                       STORE ('\\');
-                       is_right_quote = false;
-                     }
-                   if (ilim <= i + 1)
-                     break;
-                   STORE (c);
-                   c = arg[++i];
-                 }
-
-               goto store_c;
-             }
-         }
-       }
+        {
+        case '\0':
+          if (backslash_escapes)
+            {
+              if (elide_outer_quotes)
+                goto force_outer_quoting_style;
+              STORE ('\\');
+              /* If quote_string were to begin with digits, we'd need to
+                 test for the end of the arg as well.  However, it's
+                 hard to imagine any locale that would use digits in
+                 quotes, and set_custom_quoting is documented not to
+                 accept them.  */
+              if (i + 1 < argsize && '0' <= arg[i + 1] && arg[i + 1] <= '9')
+                {
+                  STORE ('0');
+                  STORE ('0');
+                }
+              c = '0';
+              /* We don't have to worry that this last '0' will be
+                 backslash-escaped because, again, quote_string should
+                 not start with it and because quote_these_too is
+                 documented as not accepting it.  */
+            }
+          else if (flags & QA_ELIDE_NULL_BYTES)
+            continue;
+          break;
+
+        case '?':
+          switch (quoting_style)
+            {
+            case shell_always_quoting_style:
+              if (elide_outer_quotes)
+                goto force_outer_quoting_style;
+              break;
+
+            case c_quoting_style:
+              if ((flags & QA_SPLIT_TRIGRAPHS)
+                  && i + 2 < argsize && arg[i + 1] == '?')
+                switch (arg[i + 2])
+                  {
+                  case '!': case '\'':
+                  case '(': case ')': case '-': case '/':
+                  case '<': case '=': case '>':
+                    /* Escape the second '?' in what would otherwise be
+                       a trigraph.  */
+                    if (elide_outer_quotes)
+                      goto force_outer_quoting_style;
+                    c = arg[i + 2];
+                    i += 2;
+                    STORE ('?');
+                    STORE ('"');
+                    STORE ('"');
+                    STORE ('?');
+                    break;
+
+                  default:
+                    break;
+                  }
+              break;
+
+            default:
+              break;
+            }
+          break;
+
+        case '\a': esc = 'a'; goto c_escape;
+        case '\b': esc = 'b'; goto c_escape;
+        case '\f': esc = 'f'; goto c_escape;
+        case '\n': esc = 'n'; goto c_and_shell_escape;
+        case '\r': esc = 'r'; goto c_and_shell_escape;
+        case '\t': esc = 't'; goto c_and_shell_escape;
+        case '\v': esc = 'v'; goto c_escape;
+        case '\\': esc = c;
+          /* No need to escape the escape if we are trying to elide
+             outer quotes and nothing else is problematic.  */
+          if (backslash_escapes && elide_outer_quotes && quote_string_len)
+            goto store_c;
+
+        c_and_shell_escape:
+          if (quoting_style == shell_always_quoting_style
+              && elide_outer_quotes)
+            goto force_outer_quoting_style;
+          /* Fall through.  */
+        c_escape:
+          if (backslash_escapes)
+            {
+              c = esc;
+              goto store_escape;
+            }
+          break;
+
+        case '{': case '}': /* sometimes special if isolated */
+          if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1))
+            break;
+          /* Fall through.  */
+        case '#': case '~':
+          if (i != 0)
+            break;
+          /* Fall through.  */
+        case ' ':
+        case '!': /* special in bash */
+        case '"': case '$': case '&':
+        case '(': case ')': case '*': case ';':
+        case '<':
+        case '=': /* sometimes special in 0th or (with "set -k") later args */
+        case '>': case '[':
+        case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */
+        case '`': case '|':
+          /* A shell special character.  In theory, '$' and '`' could
+             be the first bytes of multibyte characters, which means
+             we should check them with mbrtowc, but in practice this
+             doesn't happen so it's not worth worrying about.  */
+          if (quoting_style == shell_always_quoting_style
+              && elide_outer_quotes)
+            goto force_outer_quoting_style;
+          break;
+
+        case '\'':
+          if (quoting_style == shell_always_quoting_style)
+            {
+              if (elide_outer_quotes)
+                goto force_outer_quoting_style;
+              STORE ('\'');
+              STORE ('\\');
+              STORE ('\'');
+            }
+          break;
+
+        case '%': case '+': case ',': case '-': case '.': case '/':
+        case '0': case '1': case '2': case '3': case '4': case '5':
+        case '6': case '7': case '8': case '9': case ':':
+        case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+        case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+        case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+        case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+        case 'Y': case 'Z': case ']': case '_': case 'a': case 'b':
+        case 'c': case 'd': case 'e': case 'f': case 'g': case 'h':
+        case 'i': case 'j': case 'k': case 'l': case 'm': case 'n':
+        case 'o': case 'p': case 'q': case 'r': case 's': case 't':
+        case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
+          /* These characters don't cause problems, no matter what the
+             quoting style is.  They cannot start multibyte sequences.
+             A digit or a special letter would cause trouble if it
+             appeared at the beginning of quote_string because we'd then
+             escape by prepending a backslash.  However, it's hard to
+             imagine any locale that would use digits or letters as
+             quotes, and set_custom_quoting is documented not to accept
+             them.  Also, a digit or a special letter would cause
+             trouble if it appeared in quote_these_too, but that's also
+             documented as not accepting them.  */
+          break;
+
+        default:
+          /* If we have a multibyte sequence, copy it until we reach
+             its end, find an error, or come back to the initial shift
+             state.  For C-like styles, if the sequence has
+             unprintable characters, escape the whole sequence, since
+             we can't easily escape single characters within it.  */
+          {
+            /* Length of multibyte sequence found so far.  */
+            size_t m;
+
+            bool printable;
+
+            if (unibyte_locale)
+              {
+                m = 1;
+                printable = isprint (c) != 0;
+              }
+            else
+              {
+                mbstate_t mbstate;
+                memset (&mbstate, 0, sizeof mbstate);
+
+                m = 0;
+                printable = true;
+                if (argsize == SIZE_MAX)
+                  argsize = strlen (arg);
+
+                do
+                  {
+                    wchar_t w;
+                    size_t bytes = mbrtowc (&w, &arg[i + m],
+                                            argsize - (i + m), &mbstate);
+                    if (bytes == 0)
+                      break;
+                    else if (bytes == (size_t) -1)
+                      {
+                        printable = false;
+                        break;
+                      }
+                    else if (bytes == (size_t) -2)
+                      {
+                        printable = false;
+                        while (i + m < argsize && arg[i + m])
+                          m++;
+                        break;
+                      }
+                    else
+                      {
+                        /* Work around a bug with older shells that "see" a '\'
+                           that is really the 2nd byte of a multibyte character.
+                           In practice the problem is limited to ASCII
+                           chars >= '@' that are shell special chars.  */
+                        if ('[' == 0x5b && elide_outer_quotes
+                            && quoting_style == shell_always_quoting_style)
+                          {
+                            size_t j;
+                            for (j = 1; j < bytes; j++)
+                              switch (arg[i + m + j])
+                                {
+                                case '[': case '\\': case '^':
+                                case '`': case '|':
+                                  goto force_outer_quoting_style;
+
+                                default:
+                                  break;
+                                }
+                          }
+
+                        if (! iswprint (w))
+                          printable = false;
+                        m += bytes;
+                      }
+                  }
+                while (! mbsinit (&mbstate));
+              }
+
+            if (1 < m || (backslash_escapes && ! printable))
+              {
+                /* Output a multibyte sequence, or an escaped
+                   unprintable unibyte character.  */
+                size_t ilim = i + m;
+
+                for (;;)
+                  {
+                    if (backslash_escapes && ! printable)
+                      {
+                        if (elide_outer_quotes)
+                          goto force_outer_quoting_style;
+                        STORE ('\\');
+                        STORE ('0' + (c >> 6));
+                        STORE ('0' + ((c >> 3) & 7));
+                        c = '0' + (c & 7);
+                      }
+                    else if (is_right_quote)
+                      {
+                        STORE ('\\');
+                        is_right_quote = false;
+                      }
+                    if (ilim <= i + 1)
+                      break;
+                    STORE (c);
+                    c = arg[++i];
+                  }
+
+                goto store_c;
+              }
+          }
+        }
 
       if (! ((backslash_escapes || elide_outer_quotes)
-            && quote_these_too
-            && quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS)))
-         && !is_right_quote)
-       goto store_c;
+             && quote_these_too
+             && quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS)))
+          && !is_right_quote)
+        goto store_c;
 
     store_escape:
       if (elide_outer_quotes)
-       goto force_outer_quoting_style;
+        goto force_outer_quoting_style;
       STORE ('\\');
 
     store_c:
@@ -610,9 +610,9 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
   /* Don't reuse quote_these_too, since the addition of outer quotes
      sufficiently quotes the specified characters.  */
   return quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
-                                  quoting_style,
-                                  flags & ~QA_ELIDE_OUTER_QUOTES, NULL,
-                                  left_quote, right_quote);
+                                   quoting_style,
+                                   flags & ~QA_ELIDE_OUTER_QUOTES, NULL,
+                                   left_quote, right_quote);
 }
 
 /* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
@@ -626,14 +626,14 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
    ARGSIZE.  */
 size_t
 quotearg_buffer (char *buffer, size_t buffersize,
-                char const *arg, size_t argsize,
-                struct quoting_options const *o)
+                 char const *arg, size_t argsize,
+                 struct quoting_options const *o)
 {
   struct quoting_options const *p = o ? o : &default_quoting_options;
   int e = errno;
   size_t r = quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
-                                      p->style, p->flags, p->quote_these_too,
-                                      p->left_quote, p->right_quote);
+                                       p->style, p->flags, p->quote_these_too,
+                                       p->left_quote, p->right_quote);
   errno = e;
   return r;
 }
@@ -641,7 +641,7 @@ quotearg_buffer (char *buffer, size_t buffersize,
 /* Equivalent to quotearg_alloc (ARG, ARGSIZE, NULL, O).  */
 char *
 quotearg_alloc (char const *arg, size_t argsize,
-               struct quoting_options const *o)
+                struct quoting_options const *o)
 {
   return quotearg_alloc_mem (arg, argsize, NULL, o);
 }
@@ -654,20 +654,20 @@ quotearg_alloc (char const *arg, size_t argsize,
    flag.  */
 char *
 quotearg_alloc_mem (char const *arg, size_t argsize, size_t *size,
-                   struct quoting_options const *o)
+                    struct quoting_options const *o)
 {
   struct quoting_options const *p = o ? o : &default_quoting_options;
   int e = errno;
   /* Elide embedded null bytes if we can't return a size.  */
   int flags = p->flags | (size ? 0 : QA_ELIDE_NULL_BYTES);
   size_t bufsize = quotearg_buffer_restyled (0, 0, arg, argsize, p->style,
-                                            flags, p->quote_these_too,
-                                            p->left_quote,
-                                            p->right_quote) + 1;
+                                             flags, p->quote_these_too,
+                                             p->left_quote,
+                                             p->right_quote) + 1;
   char *buf = xcharalloc (bufsize);
   quotearg_buffer_restyled (buf, bufsize, arg, argsize, p->style, flags,
-                           p->quote_these_too,
-                           p->left_quote, p->right_quote);
+                            p->quote_these_too,
+                            p->left_quote, p->right_quote);
   errno = e;
   if (size)
     *size = bufsize - 1;
@@ -719,7 +719,7 @@ quotearg_free (void)
    to allow for future extensions (using negative values).  */
 static char *
 quotearg_n_options (int n, char const *arg, size_t argsize,
-                   struct quoting_options const *options)
+                    struct quoting_options const *options)
 {
   int e = errno;
 
@@ -732,19 +732,19 @@ quotearg_n_options (int n, char const *arg, size_t argsize,
   if (nslots <= n0)
     {
       /* FIXME: technically, the type of n1 should be `unsigned int',
-        but that evokes an unsuppressible warning from gcc-4.0.1 and
-        older.  If gcc ever provides an option to suppress that warning,
-        revert to the original type, so that the test in xalloc_oversized
-        is once again performed only at compile time.  */
+         but that evokes an unsuppressible warning from gcc-4.0.1 and
+         older.  If gcc ever provides an option to suppress that warning,
+         revert to the original type, so that the test in xalloc_oversized
+         is once again performed only at compile time.  */
       size_t n1 = n0 + 1;
       bool preallocated = (sv == &slotvec0);
 
       if (xalloc_oversized (n1, sizeof *sv))
-       xalloc_die ();
+        xalloc_die ();
 
       slotvec = sv = xrealloc (preallocated ? NULL : sv, n1 * sizeof *sv);
       if (preallocated)
-       *sv = slotvec0;
+        *sv = slotvec0;
       memset (sv + nslots, 0, (n1 - nslots) * sizeof *sv);
       nslots = n1;
     }
@@ -755,21 +755,21 @@ quotearg_n_options (int n, char const *arg, size_t argsize,
     /* Elide embedded null bytes since we don't return a size.  */
     int flags = options->flags | QA_ELIDE_NULL_BYTES;
     size_t qsize = quotearg_buffer_restyled (val, size, arg, argsize,
-                                            options->style, flags,
-                                            options->quote_these_too,
-                                            options->left_quote,
-                                            options->right_quote);
+                                             options->style, flags,
+                                             options->quote_these_too,
+                                             options->left_quote,
+                                             options->right_quote);
 
     if (size <= qsize)
       {
-       sv[n].size = size = qsize + 1;
-       if (val != slot0)
-         free (val);
-       sv[n].val = val = xcharalloc (size);
-       quotearg_buffer_restyled (val, size, arg, argsize, options->style,
-                                 flags, options->quote_these_too,
-                                 options->left_quote,
-                                 options->right_quote);
+        sv[n].size = size = qsize + 1;
+        if (val != slot0)
+          free (val);
+        sv[n].val = val = xcharalloc (size);
+        quotearg_buffer_restyled (val, size, arg, argsize, options->style,
+                                  flags, options->quote_these_too,
+                                  options->left_quote,
+                                  options->right_quote);
       }
 
     errno = e;
@@ -810,7 +810,7 @@ quotearg_n_style (int n, enum quoting_style s, char const *arg)
 
 char *
 quotearg_n_style_mem (int n, enum quoting_style s,
-                     char const *arg, size_t argsize)
+                      char const *arg, size_t argsize)
 {
   struct quoting_options const o = quoting_options_from_style (s);
   return quotearg_n_options (n, arg, argsize, &o);
@@ -857,16 +857,16 @@ quotearg_colon_mem (char const *arg, size_t argsize)
 
 char *
 quotearg_n_custom (int n, char const *left_quote,
-                  char const *right_quote, char const *arg)
+                   char const *right_quote, char const *arg)
 {
   return quotearg_n_custom_mem (n, left_quote, right_quote, arg,
-                               SIZE_MAX);
+                                SIZE_MAX);
 }
 
 char *
 quotearg_n_custom_mem (int n, char const *left_quote,
-                      char const *right_quote,
-                      char const *arg, size_t argsize)
+                       char const *right_quote,
+                       char const *arg, size_t argsize)
 {
   struct quoting_options o = default_quoting_options;
   set_custom_quoting (&o, left_quote, right_quote);
@@ -875,15 +875,15 @@ quotearg_n_custom_mem (int n, char const *left_quote,
 
 char *
 quotearg_custom (char const *left_quote, char const *right_quote,
-                char const *arg)
+                 char const *arg)
 {
   return quotearg_n_custom (0, left_quote, right_quote, arg);
 }
 
 char *
 quotearg_custom_mem (char const *left_quote, char const *right_quote,
-                    char const *arg, size_t argsize)
+                     char const *arg, size_t argsize)
 {
   return quotearg_n_custom_mem (0, left_quote, right_quote, arg,
-                               argsize);
+                                argsize);
 }