]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - cgi-bin/template.c
Merge changes from CUPS 1.3.1.
[thirdparty/cups.git] / cgi-bin / template.c
index 908db4b48ed06ed93d28c4a3cd392ef3ac3bf59d..021de82f53ca4903074924bfd65d066a0f2b5d4b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: template.c 6717 2007-07-24 23:47:12Z mike $"
+ * "$Id: template.c 6799 2007-08-15 19:33:36Z mike $"
  *
  *   CGI template function.
  *
@@ -85,9 +85,9 @@ cgiCopyTemplateFile(FILE       *out,  /* I - Output file */
 void
 cgiCopyTemplateLang(const char *tmpl)  /* I - Base filename */
 {
-  int          i;                      /* Looping var */
   char         filename[1024],         /* Filename */
-               locale[16];             /* Locale name */
+               locale[16],             /* Locale name */
+               *locptr;                /* Pointer into locale name */
   const char   *directory,             /* Directory for templates */
                *lang;                  /* Language */
   FILE         *in;                    /* Input file */
@@ -100,22 +100,19 @@ cgiCopyTemplateLang(const char *tmpl)     /* I - Base filename */
   * Convert the language to a locale name...
   */
 
+  locale[0] = '\0';
+
   if ((lang = getenv("LANG")) != NULL)
   {
-    for (i = 0; lang[i] && i < 15; i ++)
-      if (isalnum(lang[i] & 255) || lang[i] == '_')
-        locale[i] = tolower(lang[i]);
-      else if (lang[i] == '-')
-        locale[i] = '_';
-      else
-        break;
+    locale[0] = '/';
+    strlcpy(locale + 1, lang, sizeof(locale) - 1);
 
-    locale[i] = '\0';
+    if ((locptr = strchr(locale, '.')) != NULL)
+      *locptr = '\0';                  /* Strip charset */
   }
-  else
-    locale[0] = '\0';
 
-  fprintf(stderr, "DEBUG2: locale=\"%s\"...\n", locale);
+  fprintf(stderr, "DEBUG: lang=\"%s\", locale=\"%s\"...\n",
+          lang ? lang : "(null)", locale);
 
  /*
   * See if we have a template file for this language...
@@ -123,14 +120,17 @@ cgiCopyTemplateLang(const char *tmpl)     /* I - Base filename */
 
   directory = cgiGetTemplateDir();
 
-  snprintf(filename, sizeof(filename), "%s/%s/%s", directory, locale, tmpl);
-  if (access(filename, 0))
+  snprintf(filename, sizeof(filename), "%s%s/%s", directory, locale, tmpl);
+  if ((in = fopen(filename, "r")) == NULL)
   {
-    locale[2] = '\0';
+    locale[3] = '\0';
 
-    snprintf(filename, sizeof(filename), "%s/%s/%s", directory, locale, tmpl);
-    if (access(filename, 0))
+    snprintf(filename, sizeof(filename), "%s%s/%s", directory, locale, tmpl);
+    if ((in = fopen(filename, "r")) == NULL)
+    {
       snprintf(filename, sizeof(filename), "%s/%s", directory, tmpl);
+      in = fopen(filename, "r");
+    }
   }
 
   fprintf(stderr, "DEBUG2: Template file is \"%s\"...\n", filename);
@@ -139,7 +139,7 @@ cgiCopyTemplateLang(const char *tmpl)       /* I - Base filename */
   * Open the template file...
   */
 
-  if ((in = fopen(filename, "r")) == NULL)
+  if (!in)
   {
     fprintf(stderr, "ERROR: Unable to open template file \"%s\" - %s\n",
             filename, strerror(errno));
@@ -663,5 +663,5 @@ cgi_puturi(const char *s,           /* I - String to output */
 
 
 /*
- * End of "$Id: template.c 6717 2007-07-24 23:47:12Z mike $".
+ * End of "$Id: template.c 6799 2007-08-15 19:33:36Z mike $".
  */