[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#136312: boot-floppies: Support list of languages to use like glibc LANGUAGE varialbe



[Phil Blundell]
> Would you mind sending a patch that contains only the changes
> necessary for multiple language code handling, without any
> reorganisation of the rest of the code?  I think that would make it
> easier for people to review.

Yes, and no.  Would it be easier to send a patch reorganize the code
first, and then a patch to add support of the language list?

Adding the required loop to release_notes.c would make the new code
almost unreadable.

Adding the required loop to main.c seem to be fairly readable.

I'll make a new patch after you let me know if release_notes.c can be
cleaned up before I change the behavior.

> 
> +  if ( LOAD_TRMFILE("/etc/messages.en") != 0 ||
> +       LOAD_TRMFILE("/etc/messages.trm") != 0 ||
> +       LOAD_TRMFILE(TRMBACKUP) != 0 )
> 
> That doesn't look quite right to me.

What is wrong?  The fact that TRMBACKUP can be the same as one of the
others?  I thought it didn't matter.  For some definitions, it will be
different, and handling the special case would make the code more
complicated.

The following change to release_notes.c would make it a easier to
rewrite it to use a loop.

--- release_notes.c.~1.9.~	Wed Mar  6 22:37:54 2002
+++ release_notes.c	Wed Mar  6 23:14:08 2002
@@ -13,53 +13,59 @@
 #  define RELEASE_FILE	"/release_notes"
 #endif
 
+static void
+display_notes(int fd)
+{
+    char *buf = (char *)malloc (s.st_size+1);
+    size_t num;
+
+    num = read (fd, buf, s.st_size);
+    close(fd);
+    buf[s.st_size] = '\0';
+
+    wideMessageBox (buf, _("Release Notes"));
+
+    free (buf);
+}
+
 int
 release_notes (const char *suffix)
 {
     struct stat s;
     int fd;
-#ifdef USE_LANGUAGE_CHOOSER
-    char *fname = (char *)malloc (PATH_MAX);
+    char *fname = RELEASE_FILE;
+    int retval = 0;
 
+#ifdef USE_LANGUAGE_CHOOSER
+    char *buf = NULL;
     if (suffix != NULL)
-        snprintf (fname, PATH_MAX, "%s.%s", RELEASE_FILE, suffix);
-    else
-        strcpy (fname, RELEASE_FILE);
+    {
+	/* How should OOM be handled? */
+        buf = (char *)malloc (PATH_MAX);
+
+	snprintf (buf, PATH_MAX, "%s.%s", RELEASE_FILE, suffix);
+	fname = buf;
+    }
 
     if ((NAME_ISREG (fname, &s) && (fd=open (fname, O_RDONLY)) >= 0)
 	|| (NAME_ISREG(RELEASE_FILE, &s) && (fd=open (RELEASE_FILE, O_RDONLY)) >= 0))
 #else
-    if (NAME_ISREG(RELEASE_FILE, &s) && (fd=open(RELEASE_FILE, O_RDONLY)) >= 0)
+    if (NAME_ISREG(fname, &s) && (fd=open(fname, O_RDONLY)) >= 0)
 #endif
     {
-        char *buf = (char *)malloc (s.st_size+1);
-        size_t num;
-
-		num = read (fd, buf, s.st_size);
-		close(fd);
-		buf[s.st_size] = '\0';
-
-		wideMessageBox (buf, _("Release Notes"));
-
-        free (buf);
+        display_notes(fd);
     } else {
-#ifdef USE_LANGUAGE_CHOOSER
         ERRMSG("cannot find release notes file %s", 
                fname);
-        free (fname);
-        return -1;
-#else
-        ERRMSG("cannot find release notes file %s", 
-               RELEASE_FILE);
-        return -1;
-#endif
+	retval = -1;
     }
 
 #ifdef USE_LANGUAGE_CHOOSER
-    free (fname);
+    if (buf)
+        free (buf);
 #endif
 
-    return (0);
+    return retval;
 }
 
 #ifdef _TESTING_



Reply to: