]> git.ipfire.org Git - people/dweismueller/ipfire-2.x.git/blobdiff - src/installer/main.c
installer: Fix crash with small screen resolutions
[people/dweismueller/ipfire-2.x.git] / 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),