}
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;
}
-#define DEFAULT_LANG "en_US.utf8"
+#define DEFAULT_LANG "en.utf8"
#define NUM_LANGS 13
static struct lang {
static struct config {
int unattended;
int serial_console;
+ int novga;
int require_networking;
int perform_download;
int disable_swap;
} config = {
.unattended = 0,
.serial_console = 0,
+ .novga = 0,
.require_networking = 0,
.perform_download = 0,
.disable_swap = 0,
if ((strcmp(key, "console") == 0) && (strncmp(val, "ttyS", 4) == 0))
c->serial_console = 1;
+ // novga
+ else if (strcmp(key, "novga") == 0)
+ c->novga = 1;
+
// enable networking?
else if (strcmp(token, "installer.net") == 0)
c->require_networking = 1;
// 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);
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),
replace("/harddisk/etc/inittab", "#7:2345:respawn:", "7:2345:respawn:");
}
+ /* novga */
+ if (config.novga) {
+ /* grub */
+ FILE* f = fopen(DESTINATION_MOUNT_PATH "/etc/default/grub", "a");
+ if (!f) {
+ errorbox(_("Unable to open /etc/default/grub for writing."));
+ goto EXIT;
+ }
+
+ fprintf(f, "GRUB_GFXMODE=\"none\"\n");
+ fclose(f);
+ }
+
rc = hw_install_bootloader(destination, logfile);
if (rc) {
errorbox(_("Unable to install the bootloader."));
newtPopWindow();
- /* Set marker that the user has already accepted the gpl */
- mysystem(logfile, "/usr/bin/touch /harddisk/var/ipfire/main/gpl_accepted");
+ /* Set marker that the user has already accepted the GPL if the license has been shown
+ * in the installation process. In unatteded mode, the user will be presented the
+ * license when he or she logs on to the web user interface for the first time. */
+ if (!config.unattended)
+ mysystem(logfile, "/usr/bin/touch /harddisk/var/ipfire/main/gpl_accepted");
/* Copy restore file from cdrom */
char* backup_file = hw_find_backup_file(logfile, SOURCE_MOUNT_PATH);