]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Update _cupsMessageLoad to accept existing strings array.
authorMichael R Sweet <msweet@msweet.org>
Mon, 15 Apr 2024 00:37:11 +0000 (20:37 -0400)
committerMichael R Sweet <msweet@msweet.org>
Mon, 15 Apr 2024 00:37:11 +0000 (20:37 -0400)
cups/dest-localization.c
cups/language-private.h
cups/language.c
cups/ppd-cache.c
locale/checkpo.c

index 3b3845f254df88b3ada047ec47fd717468964b76..69a0f7fe9269540e67011da49c1f718d94a8a0e2 100644 (file)
@@ -427,7 +427,7 @@ cups_create_localizations(
     * Got the file, read it...
     */
 
-    dinfo->localizations = _cupsMessageLoad(tempfile, _CUPS_MESSAGE_STRINGS);
+    dinfo->localizations = _cupsMessageLoad(NULL, tempfile, _CUPS_MESSAGE_STRINGS);
   }
 
   DEBUG_printf("4cups_create_localizations: %d messages loaded.", cupsArrayCount(dinfo->localizations));
index 1d00497fd07a4936966c3cfdf716a609ab8fe8d3..1619f6748e8ab274f62b118b5d8cce41e1c95cd2 100644 (file)
@@ -59,7 +59,7 @@ extern int            _cupsLangPrintf(FILE *fp, const char *message, ...) _CUPS_FORMAT(2,
 extern int             _cupsLangPuts(FILE *fp, const char *message) _CUPS_PRIVATE;
 extern const char      *_cupsLangString(cups_lang_t *lang, const char *message) _CUPS_PRIVATE;
 extern void            _cupsMessageFree(cups_array_t *a) _CUPS_PRIVATE;
-extern cups_array_t    *_cupsMessageLoad(const char *filename, int flags) _CUPS_PRIVATE;
+extern cups_array_t    *_cupsMessageLoad(cups_array_t *a, const char *filename, int flags) _CUPS_PRIVATE;
 extern const char      *_cupsMessageLookup(cups_array_t *a, const char *m) _CUPS_PRIVATE;
 extern cups_array_t    *_cupsMessageNew(void *context) _CUPS_PRIVATE;
 extern int             _cupsMessageSave(const char *filename, int flags, cups_array_t *a) _CUPS_PRIVATE;
index 1f44a73e37a24ed95a7714430f021be5dc3abddd..c596e254926f335de151d28ca4b23890e44e59c9 100644 (file)
@@ -663,11 +663,11 @@ _cupsMessageFree(cups_array_t *a) /* I - Message array */
  */
 
 cups_array_t *                         /* O - New message array */
-_cupsMessageLoad(const char *filename, /* I - Message catalog to load */
-                 int        flags)     /* I - Load flags */
+_cupsMessageLoad(cups_array_t *a,      /* I - Existing message array */
+                 const char   *filename,/* I - Message catalog to load */
+                 int          flags)   /* I - Load flags */
 {
   cups_file_t          *fp;            /* Message file */
-  cups_array_t         *a;             /* Message array */
   _cups_message_t      *m;             /* Current message */
   char                 s[4096],        /* String buffer */
                        *ptr,           /* Pointer into buffer */
@@ -676,16 +676,19 @@ _cupsMessageLoad(const char *filename,    /* I - Message catalog to load */
                        ptrlen;         /* Length of string */
 
 
-  DEBUG_printf("4_cupsMessageLoad(filename=\"%s\")", filename);
+  DEBUG_printf("4_cupsMessageLoad(a=%p, filename=\"%s\", flags=%d)", (void *)a, filename, flags);
 
- /*
-  * Create an array to hold the messages...
-  */
-
-  if ((a = _cupsMessageNew(NULL)) == NULL)
+  if (!a)
   {
-    DEBUG_puts("5_cupsMessageLoad: Unable to allocate array!");
-    return (NULL);
+   /*
+    * Create an array to hold the messages...
+    */
+
+    if ((a = _cupsMessageNew(NULL)) == NULL)
+    {
+      DEBUG_puts("5_cupsMessageLoad: Unable to allocate array!");
+      return (NULL);
+    }
   }
 
  /*
@@ -868,7 +871,10 @@ _cupsMessageLoad(const char *filename,     /* I - Message catalog to load */
     {
       if (m->str && (m->str[0] || (flags & _CUPS_MESSAGE_EMPTY)))
       {
-       cupsArrayAdd(a, m);
+        if (cupsArrayFind(a, m))
+          cups_message_free(m, NULL);
+        else
+         cupsArrayAdd(a, m);
       }
       else
       {
@@ -876,10 +882,7 @@ _cupsMessageLoad(const char *filename,     /* I - Message catalog to load */
        * Translation is empty, don't add it... (STR #4033)
        */
 
-       free(m->msg);
-       if (m->str)
-         free(m->str);
-       free(m);
+        cups_message_free(m, NULL);
       }
     }
   }
@@ -1047,16 +1050,14 @@ cups_message_compare(_cups_message_t *m1, /* I - First message */
  * 'cups_message_free()' - Free a message.
  */
 
-static void cups_message_free(_cups_message_t *m, /* I - Message */
-                              void *data)         /* Unused */
+static void
+cups_message_free(_cups_message_t *m,  /* I - Message */
+                 void            *data)/* Unused */
 {
   (void)data;
-  if (m->msg)
-    free(m->msg);
-
-  if (m->str)
-    free(m->str);
 
+  free(m->msg);
+  free(m->str);
   free(m);
 }
 
@@ -1101,7 +1102,7 @@ cups_message_load(cups_lang_t *lang)      /* I - Language */
   * Read the strings from the file...
   */
 
-  lang->strings = _cupsMessageLoad(filename, _CUPS_MESSAGE_UNQUOTE);
+  lang->strings = _cupsMessageLoad(NULL, filename, _CUPS_MESSAGE_UNQUOTE);
 }
 
 
@@ -1235,17 +1236,14 @@ cups_read_strings(cups_file_t  *fp,     /* I - .strings file */
 
     if (m->msg && m->str)
     {
-      cupsArrayAdd(a, m);
+      if (cupsArrayFind(a, m))
+        cups_message_free(m, NULL);
+      else
+       cupsArrayAdd(a, m);
     }
     else
     {
-      if (m->msg)
-       free(m->msg);
-
-      if (m->str)
-       free(m->str);
-
-      free(m);
+      cups_message_free(m, NULL);
       break;
     }
 
index 5809909a1a73c140ce7e6c2b0e12332983de8b7d..679f3695ece348b0a02d9797dcc65967bc7cfbb6 100644 (file)
@@ -5374,7 +5374,7 @@ cups_get_strings(
     */
 
     cupsCopyString(lang->language, language, sizeof(lang->language));
-    lang->strings = _cupsMessageLoad(strings_file, _CUPS_MESSAGE_STRINGS);
+    lang->strings = _cupsMessageLoad(NULL, strings_file, _CUPS_MESSAGE_STRINGS);
     unlink(strings_file);
   }
 #if 0
index 7baf33a581bbd4aca2697f38fc7602d5861d79bc..4dee78e02acf3b4fabdf28d72299757fc605a260 100644 (file)
@@ -69,9 +69,9 @@ main(int  argc,                               /* I - Number of command-line args */
     */
 
     if (strstr(argv[i], ".strings"))
-      po = _cupsMessageLoad(argv[i], _CUPS_MESSAGE_STRINGS);
+      po = _cupsMessageLoad(NULL, argv[i], _CUPS_MESSAGE_STRINGS);
     else
-      po = _cupsMessageLoad(argv[i], _CUPS_MESSAGE_PO | _CUPS_MESSAGE_EMPTY);
+      po = _cupsMessageLoad(NULL, argv[i], _CUPS_MESSAGE_PO | _CUPS_MESSAGE_EMPTY);
 
     if (!po)
     {