]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - cups/array.c
Merge changes from CUPS 1.7svn-r10629.
[thirdparty/cups.git] / cups / array.c
index b2b4679b166df0fc4bb003dd54f2e206692c5bc4..a84f3e2a2f299e56733bf8e6644d5c5262d5e586 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Sorted array routines for CUPS.
  *
- *   Copyright 2007-2011 by Apple Inc.
+ *   Copyright 2007-2012 by Apple Inc.
  *   Copyright 1997-2007 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -110,7 +110,7 @@ static int  cups_array_find(cups_array_t *a, void *e, int prev, int *rdiff);
  * appended at the end of the run of identical elements.  For unsorted arrays,
  * the element is appended to the end of the array.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 int                                    /* O - 1 on success, 0 on failure */
@@ -138,8 +138,7 @@ cupsArrayAdd(cups_array_t *a,               /* I - Array */
 
 
 /*
- * '_cupsArrayAddStrings()' - Add zero or more comma-delimited strings to an
- *                            array.
+ * '_cupsArrayAddStrings()' - Add zero or more delimited strings to an array.
  *
  * Note: The array MUST be created using the @link _cupsArrayNewStrings@
  * function. Duplicate strings are NOT added. If the string pointer "s" is NULL
@@ -148,7 +147,8 @@ cupsArrayAdd(cups_array_t *a,               /* I - Array */
 
 int                                    /* O - 1 on success, 0 on failure */
 _cupsArrayAddStrings(cups_array_t *a,  /* I - Array */
-                     const char   *s)  /* I - Comma-delimited strings or NULL */
+                     const char   *s,  /* I - Delimited strings or NULL */
+                     char         delim)/* I - Delimiter character */
 {
   char         *buffer,                /* Copy of string */
                *start,                 /* Start of string */
@@ -159,10 +159,21 @@ _cupsArrayAddStrings(cups_array_t *a,     /* I - Array */
   if (!a || !s || !*s)
     return (0);
 
-  if (!strchr(s, ','))
+  if (delim == ' ')
   {
    /*
-    * String doesn't contain a comma, so add it as a single value...
+    * Skip leading whitespace...
+    */
+
+    while (*s && isspace(*s & 255))
+      s ++;
+  }
+
+  if (!strchr(s, delim) ||
+      (delim == ' ' && !strchr(s, '\t') && !strchr(s, '\n')))
+  {
+   /*
+    * String doesn't contain a delimiter, so add it as a single value...
     */
 
     if (!cupsArrayFind(a, (void *)s))
@@ -179,7 +190,14 @@ _cupsArrayAddStrings(cups_array_t *a,      /* I - Array */
       * it...
       */
 
-      if ((end = strchr(start, ',')) != NULL)
+      if (delim == ' ')
+      {
+        while (*end && !isspace(*end & 255))
+          end ++;
+        while (*end && isspace(*end & 255))
+          *end++ = '\0';
+      }
+      else if ((end = strchr(start, delim)) != NULL)
         *end++ = '\0';
       else
         end = start + strlen(start);
@@ -202,7 +220,7 @@ _cupsArrayAddStrings(cups_array_t *a,       /* I - Array */
  * The caller is responsible for freeing the memory used by the
  * elements themselves.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 void
@@ -244,7 +262,7 @@ cupsArrayClear(cups_array_t *a)             /* I - Array */
 /*
  * 'cupsArrayCount()' - Get the number of elements in the array.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 int                                    /* O - Number of elements */
@@ -271,7 +289,7 @@ cupsArrayCount(cups_array_t *a)             /* I - Array */
  * The current element is undefined until you call @link cupsArrayFind@,
  * @link cupsArrayFirst@, or @link cupsArrayIndex@, or @link cupsArrayLast@.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 void *                                 /* O - Element */
@@ -301,7 +319,7 @@ cupsArrayCurrent(cups_array_t *a)   /* I - Array */
  * The caller is responsible for freeing the memory used by the
  * elements themselves.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 void
@@ -345,7 +363,7 @@ cupsArrayDelete(cups_array_t *a)    /* I - Array */
 /*
  * 'cupsArrayDup()' - Duplicate the array.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 cups_array_t *                         /* O - Duplicate array */
@@ -430,7 +448,7 @@ cupsArrayDup(cups_array_t *a)               /* I - Array */
 /*
  * 'cupsArrayFind()' - Find an element in the array.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 void *                                 /* O - Element found or @code NULL@ */
@@ -525,7 +543,7 @@ cupsArrayFind(cups_array_t *a,              /* I - Array */
 /*
  * 'cupsArrayFirst()' - Get the first element in the array.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 void *                                 /* O - First element or @code NULL@ if the array is empty */
@@ -554,7 +572,7 @@ cupsArrayFirst(cups_array_t *a)             /* I - Array */
  * The current element is undefined until you call @link cupsArrayFind@,
  * @link cupsArrayFirst@, or @link cupsArrayIndex@, or @link cupsArrayLast@.
  *
- * @since CUPS 1.3/Mac OS X 10.5@
+ * @since CUPS 1.3/OS X 10.5@
  */
 
 int                                    /* O - Index of the current element, starting at 0 */
@@ -570,7 +588,7 @@ cupsArrayGetIndex(cups_array_t *a)  /* I - Array */
 /*
  * 'cupsArrayGetInsert()' - Get the index of the last inserted element.
  *
- * @since CUPS 1.3/Mac OS X 10.5@
+ * @since CUPS 1.3/OS X 10.5@
  */
 
 int                                    /* O - Index of the last inserted element, starting at 0 */
@@ -586,7 +604,7 @@ cupsArrayGetInsert(cups_array_t *a) /* I - Array */
 /*
  * 'cupsArrayIndex()' - Get the N-th element in the array.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 void *                                 /* O - N-th element or @code NULL@ */
@@ -609,7 +627,7 @@ cupsArrayIndex(cups_array_t *a,             /* I - Array */
  * inserted at the beginning of the run of identical elements.  For unsorted
  * arrays, the element is inserted at the beginning of the array.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 int                                    /* O - 0 on failure, 1 on success */
@@ -639,7 +657,7 @@ cupsArrayInsert(cups_array_t *a,    /* I - Array */
 /*
  * 'cupsArrayLast()' - Get the last element in the array.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 void *                                 /* O - Last element or @code NULL@ if the array is empty */
@@ -670,7 +688,7 @@ cupsArrayLast(cups_array_t *a)              /* I - Array */
  * data pointer argument can safely be omitted when not required so functions
  * like @code strcmp@ can be used for sorted string arrays.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 cups_array_t *                         /* O - Array */
@@ -692,7 +710,7 @@ cupsArrayNew(cups_array_func_t f,   /* I - Comparison function or @code NULL@ for
  * The hash function ("h") is used to implement cached lookups with the
  * specified hash size ("hsize").
  *
- * @since CUPS 1.3/Mac OS X 10.5@
+ * @since CUPS 1.3/OS X 10.5@
  */
 
 cups_array_t *                         /* O - Array */
@@ -722,7 +740,7 @@ cupsArrayNew2(cups_array_func_t  f, /* I - Comparison function or @code NULL@ fo
  * The free function ("cf") is used to automatically free/release elements when
  * removed or the array is deleted.
  *
- * @since CUPS 1.5/Mac OS X 10.7@
+ * @since CUPS 1.5/OS X 10.7@
  */
 
 cups_array_t *                         /* O - Array */
@@ -782,7 +800,8 @@ cupsArrayNew3(cups_array_func_t  f, /* I - Comparison function or @code NULL@ fo
  */
 
 cups_array_t *                         /* O - Array */
-_cupsArrayNewStrings(const char *s)    /* I - Comma-delimited strings or NULL */
+_cupsArrayNewStrings(const char *s,    /* I - Delimited strings or NULL */
+                     char       delim) /* I - Delimiter character */
 {
   cups_array_t *a;                     /* Array */
 
@@ -790,7 +809,7 @@ _cupsArrayNewStrings(const char *s) /* I - Comma-delimited strings or NULL */
   if ((a = cupsArrayNew3((cups_array_func_t)strcmp, NULL, NULL, 0,
                          (cups_acopy_func_t)_cupsStrAlloc,
                         (cups_afree_func_t)_cupsStrFree)) != NULL)
-    _cupsArrayAddStrings(a, s);
+    _cupsArrayAddStrings(a, s, delim);
 
   return (a);
 }
@@ -805,7 +824,7 @@ _cupsArrayNewStrings(const char *s) /* I - Comma-delimited strings or NULL */
  * @link cupsArrayFirst@, or @link cupsArrayIndex@, or @link cupsArrayLast@
  * to set the current element.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 void *                                 /* O - Next element or @code NULL@ */
@@ -838,7 +857,7 @@ cupsArrayNext(cups_array_t *a)              /* I - Array */
  * @link cupsArrayFirst@, or @link cupsArrayIndex@, or @link cupsArrayLast@
  * to set the current element.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 void *                                 /* O - Previous element or @code NULL@ */
@@ -871,7 +890,7 @@ cupsArrayPrev(cups_array_t *a)              /* I - Array */
  * The caller is responsible for freeing the memory used by the
  * removed element.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 int                                    /* O - 1 on success, 0 on failure */
@@ -936,7 +955,7 @@ cupsArrayRemove(cups_array_t *a,    /* I - Array */
 /*
  * 'cupsArrayRestore()' - Reset the current element to the last @link cupsArraySave@.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 void *                                 /* O - New current element */
@@ -967,7 +986,7 @@ cupsArrayRestore(cups_array_t *a)   /* I - Array */
  *
  * The save/restore stack is guaranteed to be at least 32 elements deep.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 int                                    /* O - 1 on success, 0 on failure */
@@ -989,7 +1008,7 @@ cupsArraySave(cups_array_t *a)             /* I - Array */
 /*
  * 'cupsArrayUserData()' - Return the user data for an array.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 void *                                 /* O - User data */
@@ -1005,7 +1024,7 @@ cupsArrayUserData(cups_array_t *a)        /* I - Array */
 /*
  * 'cups_array_add()' - Insert or append an element to the array.
  *
- * @since CUPS 1.2/Mac OS X 10.5@
+ * @since CUPS 1.2/OS X 10.5@
  */
 
 static int                             /* O - 1 on success, 0 on failure */