From: Bill Lash Date: Thu, 27 Sep 2018 00:55:45 +0000 (-0500) Subject: Add my_strndup() api X-Git-Url: https://scope-eye.net/git/?a=commitdiff_plain;h=6d161fb8eedb1257a6c244e6a37451bebab6ead4;p=liskon_frotz.git Add my_strndup() api Provide an implementation of strndup that only requires malloc --- diff --git a/src/dumb/dumb_frotz.h b/src/dumb/dumb_frotz.h index 0be1177..89fa887 100644 --- a/src/dumb/dumb_frotz.h +++ b/src/dumb/dumb_frotz.h @@ -17,6 +17,7 @@ #include extern char *my_strdup(char *); +extern char *my_strndup(char *, size_t); /* from ../common/setup.h */ extern f_setup_t f_setup; diff --git a/src/dumb/dumb_init.c b/src/dumb/dumb_init.c index d154107..9b8f74f 100644 --- a/src/dumb/dumb_init.c +++ b/src/dumb/dumb_init.c @@ -116,7 +116,7 @@ void os_process_arguments(int argc, char *argv[]) case 'P': f_setup.piracy = 1; break; case 'p': plain_ascii = 1; break; case 'r': dumb_handle_setting(zoptarg, FALSE, TRUE); break; - case 'R': f_setup.restricted_path = strndup(zoptarg, PATH_MAX); break; + case 'R': f_setup.restricted_path = my_strndup(zoptarg, PATH_MAX); break; case 's': user_random_seed = atoi(zoptarg); break; case 'S': f_setup.script_cols = atoi(zoptarg); break; case 't': user_tandy_bit = 1; break; @@ -304,6 +304,24 @@ char *my_strdup(char *src) return str; } +char *my_strndup(char *src, size_t n) +{ + char *str; + char *p; + int len = 0; + + while (src[len] && len < n) + len++; + str = malloc(len + 1); + p = str; + while (len--) + { + *p++ = *src++; + } + *p = '\0'; + return str; +} + static void print_version(void) { printf("FROTZ V%s\t", GIT_TAG);