From: David Griffith Date: Fri, 23 Sep 2016 09:27:15 +0000 (-0700) Subject: Fixed a problem with segfault on attempting to load a nonexistant file. X-Git-Url: https://scope-eye.net/git/?a=commitdiff_plain;h=7a186e2e31ee9a6ffe869aa0e6cbe11079d02105;p=liskon_frotz.git Fixed a problem with segfault on attempting to load a nonexistant file. ux_blorb_init() needs to be revisited to make sure all common blorb filename extensions are supported. --- diff --git a/src/common/frotz.h b/src/common/frotz.h index 549d39a..d7807f6 100644 --- a/src/common/frotz.h +++ b/src/common/frotz.h @@ -114,7 +114,9 @@ typedef struct { #define EXT_SAVE ".qzl" #define EXT_SCRIPT ".scr" #define EXT_BLORB ".blb" -#define EXT_BLORBLONG ".blorb" +#define EXT_BLORB2 ".zblb" +#define EXT_BLORB3 ".blorb" +#define EXT_BLORB4 ".zblorb" #define EXT_COMMAND ".rec" #define EXT_AUX ".aux" diff --git a/src/curses/ux_blorb.c b/src/curses/ux_blorb.c index ab65ca6..29adefc 100644 --- a/src/curses/ux_blorb.c +++ b/src/curses/ux_blorb.c @@ -88,7 +88,7 @@ bb_err_t ux_blorb_init(char *filename) blorb_fp = fopen(filename, "rb"); } else { len1 = strlen(filename) + strlen(EXT_BLORB); - len2 = strlen(filename) + strlen(EXT_BLORBLONG); + len2 = strlen(filename) + strlen(EXT_BLORB3); mystring = malloc(len2 * sizeof(char) + 1); strncat(mystring, filename, len1 * sizeof(char)); @@ -105,7 +105,7 @@ bb_err_t ux_blorb_init(char *filename) if ((blorb_fp = fopen(mystring, "rb")) == NULL) { p = rindex(mystring, '.'); *p = '\0'; - strncat(mystring, EXT_BLORBLONG, len2 * sizeof(char)); + strncat(mystring, EXT_BLORB3, len2 * sizeof(char)); blorb_fp = fopen(mystring, "rb"); } diff --git a/src/curses/ux_init.c b/src/curses/ux_init.c index 836c60d..ffd7158 100644 --- a/src/curses/ux_init.c +++ b/src/curses/ux_init.c @@ -168,6 +168,8 @@ void os_process_arguments (int argc, char *argv[]) { int c; char *p = NULL; + char *blorb_ext = NULL; + char *home; char configfile[FILENAME_MAX + 1]; @@ -311,8 +313,26 @@ void os_process_arguments (int argc, char *argv[]) f_setup.story_name = strdup(basename(argv[zoptind])); /* Now strip off the extension. */ - p = rindex(f_setup.story_name, '.'); - *p = 0; + p = strrchr(f_setup.story_name, '.'); + if ((p != NULL) && + ((strcmp(p,EXT_BLORB2) == 0) || + (strcmp(p,EXT_BLORB3) == 0) || + (strcmp(p,EXT_BLORB4) == 0) ) ) { + blorb_ext = strdup(p); + } + else + blorb_ext = strdup(EXT_BLORB); + + + /* Get rid of extensions with 1 to 6 character extensions. */ + /* This will take care of an extension like ".zblorb". */ + /* More than that, there might be something weird going on */ + /* which is not our concern. */ + if (p != NULL) { + if (strlen(p) >= 2 && strlen(p) <= 7) { + *p = '\0'; /* extension removed */ + } + } f_setup.story_path = strdup(dirname(argv[zoptind]));