summaryrefslogtreecommitdiffstats
path: root/mdk-stage1
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1')
-rw-r--r--mdk-stage1/Makefile5
-rw-r--r--mdk-stage1/cdrom.c2
-rw-r--r--mdk-stage1/dhcp.c4
-rw-r--r--mdk-stage1/disk.c20
-rw-r--r--mdk-stage1/frontend.h11
-rw-r--r--mdk-stage1/modules.c2
-rw-r--r--mdk-stage1/network.c34
-rw-r--r--mdk-stage1/newt-frontend.c31
-rw-r--r--mdk-stage1/probing.c4
-rw-r--r--mdk-stage1/stage1.c40
-rw-r--r--mdk-stage1/stage1.h4
-rw-r--r--mdk-stage1/stdio-frontend.c33
-rw-r--r--mdk-stage1/tools.c8
13 files changed, 87 insertions, 111 deletions
diff --git a/mdk-stage1/Makefile b/mdk-stage1/Makefile
index 5dbef79af..75857a408 100644
--- a/mdk-stage1/Makefile
+++ b/mdk-stage1/Makefile
@@ -79,7 +79,7 @@ STAGE1_NETWORK_LIBS =
endif
#- stage1 itself
-STAGE1SRC = stage1.c log.c tools.c modules.c probing.c mount.c automatic.c
+STAGE1SRC = stage1.c log.c tools.c modules.c probing.c mount.c automatic.c frontend-common.c
CDROMSRC = cdrom.c
DISKSRC = disk.c lomount.c
NETWORKSRC = network.c nfsmount.c dhcp.c url.c dns.c
@@ -174,9 +174,6 @@ $(STAGE1OBJS-NETWORK): %-NETWORK.o: %.c .depend
$(INITOBJS): %.o: %.c
$(COMPILE) $(INIT_DEFS) -c $<
-$(FRONTEND_OBJS): %.o: %.c
- $(COMPILE) $(INCLUDES) -D__FRONTEND_NEED_BACKEND__ -c $<
-
.c.o: .depend
$(COMPILE) $(INCLUDES) $(PCMCIA_DEFS) -c $<
diff --git a/mdk-stage1/cdrom.c b/mdk-stage1/cdrom.c
index f05bc0341..d99877b7f 100644
--- a/mdk-stage1/cdrom.c
+++ b/mdk-stage1/cdrom.c
@@ -116,7 +116,7 @@ enum return_type cdrom_prepare(void)
}
if (count == 0) {
- error_message("No CDROM device found.");
+ stg1_error_message("No CDROM device found.");
i = ask_insmod(SCSI_ADAPTERS);
if (i == RETURN_BACK)
return RETURN_BACK;
diff --git a/mdk-stage1/dhcp.c b/mdk-stage1/dhcp.c
index 230e8757b..78a0712f9 100644
--- a/mdk-stage1/dhcp.c
+++ b/mdk-stage1/dhcp.c
@@ -471,7 +471,7 @@ static int handle_transaction(int s, struct bootp_request * breq, struct bootp_r
timeout = 5;
}
- error_message("No DHCP reply received.");
+ stg1_error_message("No DHCP reply received.");
return -1;
}
@@ -511,7 +511,7 @@ enum return_type perform_dhcp(struct interface_info * intf)
char requested_options[50];
if (strncmp(intf->device, "eth", 3)) {
- error_message("DHCP available only for Ethernet networking.");
+ stg1_error_message("DHCP available only for Ethernet networking.");
return RETURN_ERROR;
}
diff --git a/mdk-stage1/disk.c b/mdk-stage1/disk.c
index 23f865380..9b47ce466 100644
--- a/mdk-stage1/disk.c
+++ b/mdk-stage1/disk.c
@@ -76,7 +76,7 @@ static enum return_type try_with_device(char *dev_name)
if (!(f = fopen("/proc/partitions", "rb")) || !fgets(buf, sizeof(buf), f) || !fgets(buf, sizeof(buf), f)) {
log_perror(dev_name);
- error_message("Could not read partitions information.");
+ stg1_error_message("Could not read partitions information.");
return RETURN_ERROR;
}
@@ -94,7 +94,7 @@ static enum return_type try_with_device(char *dev_name)
fclose(f);
if (parts[0] == NULL) {
- error_message("No partitions found.");
+ stg1_error_message("No partitions found.");
return RETURN_ERROR;
}
@@ -109,7 +109,7 @@ static enum return_type try_with_device(char *dev_name)
if (my_mount(device_fullname, disk_own_mount, "ext2") == -1 &&
my_mount(device_fullname, disk_own_mount, "vfat") == -1 &&
my_mount(device_fullname, disk_own_mount, "reiserfs") == -1) {
- error_message("I can't find a valid filesystem (tried: ext2, vfat, reiserfs).");
+ stg1_error_message("I can't find a valid filesystem (tried: ext2, vfat, reiserfs).");
return try_with_device(dev_name);
}
@@ -124,7 +124,7 @@ static enum return_type try_with_device(char *dev_name)
strcat(location_full, answers_location[0]);
if (access(location_full, R_OK)) {
- error_message("Directory or ISO image file could not be found on partition.\n"
+ stg1_error_message("Directory or ISO image file could not be found on partition.\n"
"Here's a short extract of the files in the root of the partition:\n"
"%s", disk_extract_list_directory(disk_own_mount));
umount(disk_own_mount);
@@ -136,7 +136,7 @@ static enum return_type try_with_device(char *dev_name)
if (!stat(location_full, &statbuf) && !S_ISDIR(statbuf.st_mode)) {
log_message("%s exists and is not a directory, assuming this is an ISO image", location_full);
if (lomount(location_full, IMAGE_LOCATION)) {
- error_message("Could not mount file %s as an ISO image of the " DISTRIB_NAME " Distribution.", answers_location[0]);
+ stg1_error_message("Could not mount file %s as an ISO image of the " DISTRIB_NAME " Distribution.", answers_location[0]);
umount(disk_own_mount);
return try_with_device(dev_name);
}
@@ -146,7 +146,7 @@ static enum return_type try_with_device(char *dev_name)
if (IS_SPECIAL_STAGE2 || ramdisk_possible()) {
/* RAMDISK install */
if (access(IMAGE_LOCATION RAMDISK_LOCATION, R_OK)) {
- error_message("I can't find the " DISTRIB_NAME " Distribution in the specified directory. "
+ stg1_error_message("I can't find the " DISTRIB_NAME " Distribution in the specified directory. "
"(I need the subdirectory " RAMDISK_LOCATION ")\n"
"Here's a short extract of the files in the directory:\n"
"%s", disk_extract_list_directory(IMAGE_LOCATION));
@@ -155,7 +155,7 @@ static enum return_type try_with_device(char *dev_name)
return try_with_device(dev_name);
}
if (load_ramdisk() != RETURN_OK) {
- error_message("Could not load program into memory.");
+ stg1_error_message("Could not load program into memory.");
loumount();
umount(disk_own_mount);
return try_with_device(dev_name);
@@ -164,7 +164,7 @@ static enum return_type try_with_device(char *dev_name)
/* LIVE install */
char p;
if (access(IMAGE_LOCATION LIVE_LOCATION, R_OK)) {
- error_message("I can't find the " DISTRIB_NAME " Distribution in the specified directory. "
+ stg1_error_message("I can't find the " DISTRIB_NAME " Distribution in the specified directory. "
"(I need the subdirectory " LIVE_LOCATION ")\n"
"Here's a short extract of the files in the directory:\n"
"%s", disk_extract_list_directory(IMAGE_LOCATION));
@@ -173,7 +173,7 @@ static enum return_type try_with_device(char *dev_name)
return try_with_device(dev_name);
}
if (readlink(IMAGE_LOCATION LIVE_LOCATION "/usr/bin/runinstall2", &p, 1) != 1) {
- error_message("The " DISTRIB_NAME " Distribution seems to be copied on a Windows partition. "
+ stg1_error_message("The " DISTRIB_NAME " Distribution seems to be copied on a Windows partition. "
"You need more memory to perform an installation from a Windows partition. "
"Another solution if to copy the " DISTRIB_NAME " Distribution on a Linux partition.");
loumount();
@@ -210,7 +210,7 @@ enum return_type disk_prepare(void)
}
if (count == 0) {
- error_message("No DISK drive found.");
+ stg1_error_message("No DISK drive found.");
i = ask_insmod(SCSI_ADAPTERS);
if (i == RETURN_BACK)
return RETURN_BACK;
diff --git a/mdk-stage1/frontend.h b/mdk-stage1/frontend.h
index 9658858eb..167291798 100644
--- a/mdk-stage1/frontend.h
+++ b/mdk-stage1/frontend.h
@@ -19,10 +19,14 @@
#ifndef _FRONTEND_H_
#define _FRONTEND_H_
+#include <stdarg.h>
+
+
enum return_type { RETURN_OK, RETURN_BACK, RETURN_ERROR };
void init_frontend(char * welcome_msg);
void finish_frontend(void);
+
void error_message(char *msg, ...) __attribute__ ((format (printf, 1, 2))); /* blocking */
void info_message(char *msg, ...) __attribute__ ((format (printf, 1, 2))); /* blocking */
void wait_message(char *msg, ...) __attribute__ ((format (printf, 1, 2))); /* non-blocking */
@@ -38,10 +42,9 @@ enum return_type ask_from_list_comments(char *msg, char ** elems, char ** elems_
enum return_type ask_from_entries(char *msg, char ** questions, char *** answers, int entry_size, void (*callback_func)(char ** strings));
-#ifdef __FRONTEND_NEED_BACKEND__
-int error_message_backend(void);
-int info_message_backend(void);
-#endif
+void verror_message(char *msg, va_list ap);
+void vinfo_message(char *msg, va_list ap);
+void vwait_message(char *msg, va_list ap);
#endif
diff --git a/mdk-stage1/modules.c b/mdk-stage1/modules.c
index 37f251685..0a84f612b 100644
--- a/mdk-stage1/modules.c
+++ b/mdk-stage1/modules.c
@@ -319,7 +319,7 @@ static enum return_type insmod_with_options(char * mod, enum driver_type type)
strcat(options, answers[0]); // because my_insmod will eventually modify the string
if (my_insmod(mod, type, answers[0]) != INSMOD_OK) {
- error_message("Insmod failed.");
+ stg1_error_message("Insmod failed.");
return RETURN_ERROR;
}
diff --git a/mdk-stage1/network.c b/mdk-stage1/network.c
index 770094893..7e154de2a 100644
--- a/mdk-stage1/network.c
+++ b/mdk-stage1/network.c
@@ -47,7 +47,7 @@
static void error_message_net(void) /* reduce code size */
{
- error_message("Could not configure network.");
+ stg1_error_message("Could not configure network.");
}
@@ -373,7 +373,7 @@ static enum return_type setup_network_interface(struct interface_info * intf)
return setup_network_interface(intf);
if (!inet_aton(answers[0], &addr)) {
- error_message("Invalid IP address.");
+ stg1_error_message("Invalid IP address.");
return setup_network_interface(intf);
}
memcpy(&intf->ip, &addr, sizeof(addr));
@@ -541,7 +541,7 @@ static char * interface_select(void)
}
if (count == 0) {
- error_message("No NET device found.");
+ stg1_error_message("No NET device found.");
i = ask_insmod(NETWORK_DEVICES);
if (i == RETURN_BACK)
return NULL;
@@ -628,13 +628,13 @@ enum return_type nfs_prepare(void)
strcat(nfsmount_location, answers[1]);
if (my_mount(nfsmount_location, IMAGE_LOCATION, "nfs") == -1) {
- error_message("I can't mount the directory from the NFS server.");
+ stg1_error_message("I can't mount the directory from the NFS server.");
results = RETURN_BACK;
continue;
}
if (access(IMAGE_LOCATION LIVE_LOCATION, R_OK)) {
- error_message("That NFS volume does not seem to contain the " DISTRIB_NAME " Distribution.");
+ stg1_error_message("That NFS volume does not seem to contain the " DISTRIB_NAME " Distribution.");
umount(IMAGE_LOCATION);
results = RETURN_BACK;
}
@@ -645,7 +645,7 @@ enum return_type nfs_prepare(void)
if (IS_SPECIAL_STAGE2) {
if (load_ramdisk() != RETURN_OK) {
- error_message("Could not load program into memory.");
+ stg1_error_message("Could not load program into memory.");
return nfs_prepare();
}
}
@@ -666,7 +666,7 @@ enum return_type ftp_prepare(void)
enum return_type results;
if (!ramdisk_possible()) {
- error_message("FTP install needs more than %d Mbytes of memory (detected %d Mbytes).",
+ stg1_error_message("FTP install needs more than %d Mbytes of memory (detected %d Mbytes).",
MEM_LIMIT_RAMDISK, total_memory());
return RETURN_ERROR;
}
@@ -694,11 +694,11 @@ enum return_type ftp_prepare(void)
if (ftp_serv_response < 0) {
log_message("FTP: error connect %d", ftp_serv_response);
if (ftp_serv_response == FTPERR_BAD_HOSTNAME)
- error_message("Error: bad hostname.");
+ stg1_error_message("Error: bad hostname.");
else if (ftp_serv_response == FTPERR_FAILED_CONNECT)
- error_message("Error: failed to connect to remote host.");
+ stg1_error_message("Error: failed to connect to remote host.");
else
- error_message("Error: couldn't connect.");
+ stg1_error_message("Error: couldn't connect.");
results = RETURN_BACK;
continue;
}
@@ -712,13 +712,13 @@ enum return_type ftp_prepare(void)
if (fd < 0) {
log_message("FTP: error get %d", fd);
if (fd == FTPERR_PASSIVE_ERROR)
- error_message("Error: error with passive connection.");
+ stg1_error_message("Error: error with passive connection.");
else if (fd == FTPERR_FILE_NOT_FOUND)
- error_message("Error: file not found (%s).", location_full);
+ stg1_error_message("Error: file not found (%s).", location_full);
else if (fd == FTPERR_BAD_SERVER_RESPONSE)
- error_message("Error: bad server response (server too busy?).");
+ stg1_error_message("Error: bad server response (server too busy?).");
else
- error_message("Error: couldn't retrieve Installation program.");
+ stg1_error_message("Error: couldn't retrieve Installation program.");
results = RETURN_BACK;
continue;
}
@@ -752,7 +752,7 @@ enum return_type http_prepare(void)
enum return_type results;
if (!ramdisk_possible()) {
- error_message("HTTP install needs more than %d Mbytes of memory (detected %d Mbytes).",
+ stg1_error_message("HTTP install needs more than %d Mbytes of memory (detected %d Mbytes).",
MEM_LIMIT_RAMDISK, total_memory());
return RETURN_ERROR;
}
@@ -781,9 +781,9 @@ enum return_type http_prepare(void)
if (fd < 0) {
log_message("HTTP: error %d", fd);
if (fd == FTPERR_FAILED_CONNECT)
- error_message("Error: couldn't connect to server.");
+ stg1_error_message("Error: couldn't connect to server.");
else
- error_message("Error: couldn't get file (%s).", location_full);
+ stg1_error_message("Error: couldn't get file (%s).", location_full);
results = RETURN_BACK;
continue;
}
diff --git a/mdk-stage1/newt-frontend.c b/mdk-stage1/newt-frontend.c
index e2b95eb92..95bf9847f 100644
--- a/mdk-stage1/newt-frontend.c
+++ b/mdk-stage1/newt-frontend.c
@@ -52,32 +52,18 @@ void finish_frontend(void)
}
-void error_message(char *msg, ...)
+void verror_message(char *msg, va_list ap)
{
- va_list args;
-#ifdef __FRONTEND_NEED_BACKEND__
- if (error_message_backend())
- return;
-#endif
- va_start(args, msg);
- newtWinMessagev("Error", "Ok", msg, args);
- va_end(args);
+ newtWinMessagev("Error", "Ok", msg, ap);
}
-void info_message(char *msg, ...)
+void vinfo_message(char *msg, va_list ap)
{
- va_list args;
-#ifdef __FRONTEND_NEED_BACKEND__
- if (info_message_backend())
- return;
-#endif
- va_start(args, msg);
- newtWinMessagev("Notice", "Ok", msg, args);
- va_end(args);
+ newtWinMessagev("Notice", "Ok", msg, ap);
}
-void wait_message(char *msg, ...)
+void vwait_message(char *msg, va_list ap)
{
int width, height;
char * title = "Please wait...";
@@ -87,21 +73,16 @@ void wait_message(char *msg, ...)
char * flowed;
int size = 0;
int i = 0;
- va_list args;
-
- va_start(args, msg);
do {
size += 1000;
if (buf) free(buf);
buf = malloc(size);
- i = vsnprintf(buf, size, msg, args);
+ i = vsnprintf(buf, size, msg, ap);
} while (i >= size || i == -1);
flowed = newtReflowText(buf, 60, 5, 5, &width, &height);
- va_end(args);
-
c = newtTextbox(-1, -1, width, height, NEWT_TEXTBOX_WRAP);
newtTextboxSetText(c, flowed);
diff --git a/mdk-stage1/probing.c b/mdk-stage1/probing.c
index 721f29dcf..fa4df5aa8 100644
--- a/mdk-stage1/probing.c
+++ b/mdk-stage1/probing.c
@@ -63,7 +63,7 @@ static void warning_insmod_failed(enum insmod_return r)
{
if (r != INSMOD_OK
&& !(IS_AUTOMATIC && r == INSMOD_FAILED_FILE_NOT_FOUND))
- error_message("Warning, installation of driver failed. (please include msg from <Alt-F3> for bugreports)");
+ stg1_error_message("Warning, installation of driver failed. (please include msg from <Alt-F3> for bugreports)");
}
#ifndef DISABLE_NETWORK
@@ -173,7 +173,7 @@ static void probe_that_type(enum driver_type type)
#ifndef DISABLE_NETWORK
if (type == NETWORK_DEVICES) {
/* insmod is quick, let's use the info message */
- info_message("Detected network device:\n \n%s", pcidb[i].name);
+ stg1_info_message("Detected network device:\n \n%s", pcidb[i].name);
prepare_intf_descr(pcidb[i].name);
warning_insmod_failed(my_insmod(pcidb[i].module, NETWORK_DEVICES, NULL));
if (intf_descr_for_discover) /* for modules providing more than one net intf */
diff --git a/mdk-stage1/stage1.c b/mdk-stage1/stage1.c
index db9a4a15c..1f39489a1 100644
--- a/mdk-stage1/stage1.c
+++ b/mdk-stage1/stage1.c
@@ -22,19 +22,18 @@
*
*/
-#include <sys/mount.h>
+#include <stdlib.h>
+#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-#include <signal.h>
-
-#include <stdlib.h>
#include <stdio.h>
+#include <sys/ioctl.h>
+#include <sys/mount.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>
+#include <stdarg.h>
#include "stage1.h"
@@ -78,18 +77,29 @@ void fatal_error(char *msg)
/************************************************************
- * backend functs
- * the principle is to not pollute frontend code with stage1-specific stuff */
+ * special frontend functs
+ * (the principle is to not pollute frontend code with stage1-specific stuff) */
-int error_message_backend(void)
+void stg1_error_message(char *msg, ...)
{
+ va_list args;
+ va_start(args, msg);
+ log_message("unsetting automatic");
unset_param(MODE_AUTOMATIC);
- return 0;
+ verror_message(msg, args);
+ va_end(args);
}
-int info_message_backend(void)
+void stg1_info_message(char *msg, ...)
{
- return IS_AUTOMATIC ? 1 : 0;
+ va_list args;
+ va_start(args, msg);
+ if (IS_AUTOMATIC) {
+ vlog_message(msg, args);
+ return;
+ }
+ vinfo_message(msg, args);
+ va_end(args);
}
@@ -215,14 +225,14 @@ static void expert_third_party_modules(void)
my_insmod("floppy", ANY_DRIVER_TYPE, NULL);
if (my_mount("/dev/fd0", floppy_mount_location, "ext2") == -1) {
- error_message("I can't find a Linux ext2 floppy in first floppy drive.");
+ stg1_error_message("I can't find a Linux ext2 floppy in first floppy drive.");
return expert_third_party_modules();
}
modules = list_directory(floppy_mount_location);
if (!modules || !*modules) {
- error_message("No modules found on floppy disk.");
+ stg1_error_message("No modules found on floppy disk.");
umount(floppy_mount_location);
return expert_third_party_modules();
}
@@ -246,7 +256,7 @@ static void expert_third_party_modules(void)
if (rc) {
log_message("\tfailed");
- error_message("Insmod failed.");
+ stg1_error_message("Insmod failed.");
}
return expert_third_party_modules();
diff --git a/mdk-stage1/stage1.h b/mdk-stage1/stage1.h
index 88445f962..a9ca99b32 100644
--- a/mdk-stage1/stage1.h
+++ b/mdk-stage1/stage1.h
@@ -47,6 +47,8 @@ extern char * interactive_fifo;
void fatal_error(char *msg) __attribute__ ((noreturn));
-#define __FRONTEND_NEED_BACKEND__
+
+void stg1_error_message(char *msg, ...) __attribute__ ((format (printf, 1, 2)));
+void stg1_info_message(char *msg, ...) __attribute__ ((format (printf, 1, 2)));
#endif
diff --git a/mdk-stage1/stdio-frontend.c b/mdk-stage1/stdio-frontend.c
index fd3510cf1..5b37eafcd 100644
--- a/mdk-stage1/stdio-frontend.c
+++ b/mdk-stage1/stdio-frontend.c
@@ -163,44 +163,27 @@ static char * get_string_response(char * initial_string)
return strdup(s);
}
-static void blocking_msg(char *type, char *fmt, va_list args)
+static void blocking_msg(char *type, char *fmt, va_list ap)
{
printf(type);
- vprintf(fmt, args);
+ vprintf(fmt, ap);
get_any_response();
}
-void error_message(char *msg, ...)
+void verror_message(char *msg, va_list ap)
{
- va_list args;
-#ifdef __FRONTEND_NEED_BACKEND__
- if (error_message_backend())
- return;
-#endif
- va_start(args, msg);
- blocking_msg("> Error! ", msg, args);
- va_end(args);
+ blocking_msg("> Error! ", msg, ap);
}
-void info_message(char *msg, ...)
+void vinfo_message(char *msg, va_list ap)
{
- va_list args;
-#ifdef __FRONTEND_NEED_BACKEND__
- if (info_message_backend())
- return;
-#endif
- va_start(args, msg);
- blocking_msg("> Notice: ", msg, args);
- va_end(args);
+ blocking_msg("> Notice: ", msg, ap);
}
-void wait_message(char *msg, ...)
+void vwait_message(char *msg, va_list ap)
{
- va_list args;
printf("Please wait: ");
- va_start(args, msg);
- vprintf(msg, args);
- va_end(args);
+ vprintf(msg, ap);
fflush(stdout);
}
diff --git a/mdk-stage1/tools.c b/mdk-stage1/tools.c
index 66df907b7..deafdc8fe 100644
--- a/mdk-stage1/tools.c
+++ b/mdk-stage1/tools.c
@@ -256,14 +256,14 @@ enum return_type load_ramdisk_fd(int ramdisk_fd, int size)
if (!st2) {
log_message("Opening compressed ramdisk: %s", BZ2_bzerror(st2, &z_errnum));
- error_message("Could not open compressed ramdisk file.");
+ stg1_error_message("Could not open compressed ramdisk file.");
return RETURN_ERROR;
}
ram_fd = open(ramdisk, O_WRONLY);
if (ram_fd == -1) {
log_perror(ramdisk);
- error_message("Could not open ramdisk device file.");
+ stg1_error_message("Could not open ramdisk device file.");
return RETURN_ERROR;
}
@@ -282,7 +282,7 @@ enum return_type load_ramdisk_fd(int ramdisk_fd, int size)
if (!seems_ok) {
log_message("reading compressed ramdisk: %s", BZ2_bzerror(st2, &z_errnum));
remove_wait_message();
- error_message("Could not uncompress second stage ramdisk.");
+ stg1_error_message("Could not uncompress second stage ramdisk.");
return RETURN_ERROR;
}
@@ -345,7 +345,7 @@ enum return_type load_ramdisk(void)
if (st2_fd == -1) {
log_message("open ramdisk file (%s) failed", img_name);
- error_message("Could not open compressed ramdisk file (%s).", img_name);
+ stg1_error_message("Could not open compressed ramdisk file (%s).", img_name);
return RETURN_ERROR;
}