Add my_strndup() api
authorBill Lash <william.lash@gmail.com>
Thu, 27 Sep 2018 00:55:45 +0000 (19:55 -0500)
committerBill Lash <william.lash@gmail.com>
Thu, 27 Sep 2018 00:55:45 +0000 (19:55 -0500)
Provide an implementation of strndup that only requires malloc

src/dumb/dumb_frotz.h
src/dumb/dumb_init.c

index 0be1177e66e67670b7fdfdc7489dffafcaf5b1fc..89fa887015e0528f035870ddb73596e1c87515ea 100644 (file)
@@ -17,6 +17,7 @@
 #include <time.h>
 
 extern char *my_strdup(char *);
+extern char *my_strndup(char *, size_t);
 
 /* from ../common/setup.h */
 extern f_setup_t f_setup;
index d154107f2ffa22adfdc0bd1030f30f9b6c66508f..9b8f74f03455832c06ce7e7ffc7ea93f74cebd71 100644 (file)
@@ -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);