From 6d161fb8eedb1257a6c244e6a37451bebab6ead4 Mon Sep 17 00:00:00 2001 From: Bill Lash Date: Wed, 26 Sep 2018 19:55:45 -0500 Subject: [PATCH] Add my_strndup() api Provide an implementation of strndup that only requires malloc --- src/dumb/dumb_frotz.h | 1 + src/dumb/dumb_init.c | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) 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); -- 2.34.1