]> git.ipfire.org Git - people/dweismueller/ipfire-2.x.git/commitdiff
installer: Fix crash with small screen resolutions
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 2 Jan 2015 13:41:33 +0000 (14:41 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 2 Jan 2015 13:41:33 +0000 (14:41 +0100)
The installer is showing a help line at the bottom of the
screen which is in some languages rather long. If it is
longer than the width of the screen, the installer used to
crash which is now fixed in this patch.

src/installer/main.c

index ab2cb8912e0490d154765e51bbae700a79da397d..c97776d24882b7b300d4fab497ffe9c9aa0655d2 100644 (file)
@@ -216,19 +216,31 @@ static char* get_system_release() {
 }
 
 static char* center_string(const char* str, int width) {
+       if (!str)
+               return NULL;
+
+       char* string = NULL;
        unsigned int str_len = strlen(str);
 
-       unsigned int indent_length = (width - str_len) / 2;
-       char indent[indent_length + 1];
+       if (str_len == width) {
+               string = strdup(str);
 
-       for (unsigned int i = 0; i < indent_length; i++) {
-               indent[i] = ' ';
-       }
-       indent[indent_length] = '\0';
+       } else if (str_len > width) {
+               string = strdup(str);
+               string[width - 1] = '\0';
 
-       char* string = NULL;
-       if (asprintf(&string, "%s%s", indent, str) < 0)
-               return NULL;
+       } else {
+               unsigned int indent_length = (width - str_len) / 2;
+               char indent[indent_length + 1];
+
+               for (unsigned int i = 0; i < indent_length; i++) {
+                       indent[i] = ' ';
+               }
+               indent[indent_length] = '\0';
+
+               if (asprintf(&string, "%s%s", indent, str) < 0)
+                       return NULL;
+       }
 
        return string;
 }
@@ -377,7 +389,8 @@ int main(int argc, char *argv[]) {
 
        // Draw title
        char* roottext = center_string(system_release, screen_cols);
-       newtDrawRootText(0, 0, roottext);
+       if (roottext)
+               newtDrawRootText(0, 0, roottext);
 
        snprintf(title, sizeof(title), "%s - %s", NAME, SLOGAN);
 
@@ -423,7 +436,8 @@ int main(int argc, char *argv[]) {
        else
                helpline = center_string(_("<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"), screen_cols);
 
-       newtPushHelpLine(helpline);
+       if (helpline)
+               newtPushHelpLine(helpline);
 
        if (!config.unattended) {
                snprintf(message, sizeof(message),