From 2bc79fd85794c74463ddd0aef2c7a60a02f7b4de Mon Sep 17 00:00:00 2001 From: gbeauche <> Date: Sun, 12 Jun 2005 22:48:48 +0000 Subject: [PATCH] Enable Basilisk II to work even if slirp_init() failed. Disable ethernet emulation in that case, don't exit(1). --- BasiliskII/src/Unix/ether_unix.cpp | 6 +++++- BasiliskII/src/Unix/user_strings_unix.cpp | 1 + BasiliskII/src/Unix/user_strings_unix.h | 1 + BasiliskII/src/slirp/libslirp.h | 2 +- BasiliskII/src/slirp/slirp.c | 9 ++++----- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/BasiliskII/src/Unix/ether_unix.cpp b/BasiliskII/src/Unix/ether_unix.cpp index b1601529..bbbb621d 100644 --- a/BasiliskII/src/Unix/ether_unix.cpp +++ b/BasiliskII/src/Unix/ether_unix.cpp @@ -224,7 +224,11 @@ bool ether_init(void) #ifdef HAVE_SLIRP // Initialize slirp library if (net_if_type == NET_IF_SLIRP) { - slirp_init(); + if (slirp_init() < 0) { + sprintf(str, GetString(STR_SLIRP_NO_DNS_FOUND_WARN)); + WarningAlert(str); + return false; + } // Open slirp output pipe int fds[2]; diff --git a/BasiliskII/src/Unix/user_strings_unix.cpp b/BasiliskII/src/Unix/user_strings_unix.cpp index c4e0b28d..45652a59 100644 --- a/BasiliskII/src/Unix/user_strings_unix.cpp +++ b/BasiliskII/src/Unix/user_strings_unix.cpp @@ -49,6 +49,7 @@ user_string_def platform_strings[] = { {STR_NO_SHEEP_NET_DRIVER_WARN, "Cannot open %s (%s). Ethernet will not be available."}, {STR_SHEEP_NET_ATTACH_WARN, "Cannot attach to Ethernet card (%s). Ethernet will not be available."}, {STR_TUN_TAP_CONFIG_WARN, "Cannot configure TUN/TAP device (%s). Ethernet will not be available."}, + {STR_SLIRP_NO_DNS_FOUND_WARN, "Cannot get DNS address. Ethernet will not be available."}, {STR_SCSI_DEVICE_OPEN_WARN, "Cannot open %s (%s). SCSI Manager access to this device will be disabled."}, {STR_SCSI_DEVICE_NOT_SCSI_WARN, "%s doesn't seem to comply to the Generic SCSI API. SCSI Manager access to this device will be disabled."}, {STR_NO_AUDIO_DEV_WARN, "Cannot open %s (%s). Audio output will be disabled."}, diff --git a/BasiliskII/src/Unix/user_strings_unix.h b/BasiliskII/src/Unix/user_strings_unix.h index 7d123368..75e9becc 100644 --- a/BasiliskII/src/Unix/user_strings_unix.h +++ b/BasiliskII/src/Unix/user_strings_unix.h @@ -40,6 +40,7 @@ enum { STR_NO_SHEEP_NET_DRIVER_WARN, STR_SHEEP_NET_ATTACH_WARN, STR_TUN_TAP_CONFIG_WARN, + STR_SLIRP_NO_DNS_FOUND_WARN, STR_SCSI_DEVICE_OPEN_WARN, STR_SCSI_DEVICE_NOT_SCSI_WARN, STR_NO_AUDIO_DEV_WARN, diff --git a/BasiliskII/src/slirp/libslirp.h b/BasiliskII/src/slirp/libslirp.h index cff159e7..d80c3d6f 100644 --- a/BasiliskII/src/slirp/libslirp.h +++ b/BasiliskII/src/slirp/libslirp.h @@ -13,7 +13,7 @@ int inet_aton(const char *cp, struct in_addr *ia); extern "C" { #endif -void slirp_init(void); +int slirp_init(void); void slirp_select_fill(int *pnfds, fd_set *readfds, fd_set *writefds, fd_set *xfds); diff --git a/BasiliskII/src/slirp/slirp.c b/BasiliskII/src/slirp/slirp.c index 3b840a82..4a35e724 100644 --- a/BasiliskII/src/slirp/slirp.c +++ b/BasiliskII/src/slirp/slirp.c @@ -123,7 +123,7 @@ void slirp_cleanup(void) } #endif -void slirp_init(void) +int slirp_init(void) { // debug_init("/tmp/slirp.log", DEBUG_DEFAULT); @@ -147,12 +147,11 @@ void slirp_init(void) getouraddr(); inet_aton("127.0.0.1", &loopback_addr); - if (get_dns_addr(&dns_addr) < 0) { - fprintf(stderr, "Could not get DNS address\n"); - exit(1); - } + if (get_dns_addr(&dns_addr) < 0) + return -1; inet_aton(CTL_SPECIAL, &special_addr); + return 0; } #define CONN_CANFSEND(so) (((so)->so_state & (SS_FCANTSENDMORE|SS_ISFCONNECTED)) == SS_ISFCONNECTED)