]> Kevux Git Server - fll/commitdiff
Update: Attempt to avoid libc/POSIX character array length limitations.
authorKevin Day <thekevinday@gmail.com>
Mon, 31 May 2021 05:02:58 +0000 (00:02 -0500)
committerKevin Day <thekevinday@gmail.com>
Mon, 31 May 2021 05:18:54 +0000 (00:18 -0500)
Define f_string_t_length to handle the special case max length.
Make the f_utf_string_t also operate in the same way (even it it might avoid the problem by being a different type than char).
The f_utf_string_t is changed in this way for consistency reasons.

18 files changed:
level_0/f_capability/c/capability.c
level_0/f_console/c/console-common.h
level_0/f_environment/c/environment-common.h
level_0/f_file/c/file.c
level_0/f_string/c/private-string.c
level_0/f_string/c/string-common.h
level_0/f_string/c/string_dynamic.c
level_0/f_utf/c/private-utf.c
level_0/f_utf/c/utf_dynamic.c
level_1/fl_directory/c/private-directory.c
level_1/fl_utf_file/c/utf_file.c
level_2/fll_fss/c/fss_basic.c
level_2/fll_fss/c/fss_basic_list.c
level_2/fll_fss/c/fss_embedded_list.c
level_2/fll_fss/c/fss_extended.c
level_2/fll_fss/c/fss_extended_list.c
level_2/fll_path/c/path.h
level_3/fake/c/private-build.c

index bdb064498dc14d78ecc7f7b9822f4a811551f9d4..d00e4fe09ada929215f94f4f06ea9170ad01b880 100644 (file)
@@ -1047,7 +1047,7 @@ extern "C" {
         const f_array_length_t length = strlen(result);
 
         if (name->used + length + 1 > name->size) {
-          if (name->used + length + 1 > f_array_length_t_size) {
+          if (name->used + length + 1 > f_string_t_size) {
             return F_status_set_error(F_string_too_large);
           }
 
@@ -1088,7 +1088,7 @@ extern "C" {
 
       if (result) {
         if (text->used + length + 1 > text->size) {
-          if (text->used + length + 1 > f_array_length_t_size) {
+          if (text->used + length + 1 > f_string_t_size) {
             return F_status_set_error(F_string_too_large);
           }
 
index 3ae999440ed148b980fdd05ae1de6878c1924c03..cf005458b82ceaf9c2b24fc488bd9383930ca135 100644 (file)
@@ -173,7 +173,7 @@ extern "C" {
  * However, the libc/POSIX appears to limit this to 2^63 (signed).
  */
 #ifndef _di_f_console_length_size_
-  #define f_console_parameter_size f_type_size_max_64_positive
+  #define f_console_parameter_size f_string_t_size
 #endif // _di_f_console_length_size_
 
 /**
index ac0af3601435c69d3e1969d42d135f968a0738e0..ef7083539bb058202c224c15ad0c9c58a8d54362 100644 (file)
@@ -20,7 +20,7 @@ extern "C" {
  * Environment related defines.
  */
 #ifndef _di_f_environment_defines_
-  #define f_environment_max_length f_array_length_t_size
+  #define f_environment_max_length f_string_t_size
 #endif // _di_f_environment_defines_
 
 #ifdef __cplusplus
index 62501a0164745410ca99393c474079593e3aaabd..123e6b5ad10d8ec8cbdb80984989b1520f807bd3 100644 (file)
@@ -1315,7 +1315,7 @@ extern "C" {
     f_array_length_t size = strnlen(path_to_name, length);
 
     if (name_base->used + size > name_base->size) {
-      if (name_base->used + size > f_array_length_t_size) {
+      if (name_base->used + size > f_string_t_size) {
         return F_status_set_error(F_string_too_large);
       }
 
@@ -1351,7 +1351,7 @@ extern "C" {
     f_array_length_t size = strnlen(path_to_name, length);
 
     if (name_directory->used + size > name_directory->size) {
-      if (name_directory->used + size > f_array_length_t_size) {
+      if (name_directory->used + size > f_string_t_size) {
         return F_status_set_error(F_string_too_large);
       }
 
@@ -1428,7 +1428,7 @@ extern "C" {
     for (f_string_t buffer_read = 0; ; ) {
 
       if (buffer->used + file.size_read > buffer->size) {
-        if (buffer->size + file.size_read > f_array_length_t_size) {
+        if (buffer->size + file.size_read > f_string_t_size) {
           return F_status_set_error(F_string_too_large);
         }
 
@@ -1478,7 +1478,7 @@ extern "C" {
     f_string_t buffer_read = 0;
 
     if (buffer->used + file.size_read > buffer->size) {
-      if (buffer->size + file.size_read > f_array_length_t_size) {
+      if (buffer->size + file.size_read > f_string_t_size) {
         return F_status_set_error(F_string_too_large);
       }
 
@@ -1538,7 +1538,7 @@ extern "C" {
       }
 
       if (buffer->used + buffer_size > buffer->size) {
-        if (buffer->size + buffer_size > f_array_length_t_size) {
+        if (buffer->size + buffer_size > f_string_t_size) {
           return F_status_set_error(F_string_too_large);
         }
 
@@ -1997,7 +1997,7 @@ extern "C" {
     for (;;) {
 
       if (buffer->used + file.size_read > buffer->size) {
-        if (buffer->size + file.size_read > f_array_length_t_size) {
+        if (buffer->size + file.size_read > f_string_t_size) {
           return F_status_set_error(F_string_too_large);
         }
 
@@ -2043,7 +2043,7 @@ extern "C" {
     ssize_t size_read = 0;
 
     if (buffer->used + file.size_read > buffer->size) {
-      if (buffer->size + file.size_read > f_array_length_t_size) {
+      if (buffer->size + file.size_read > f_string_t_size) {
         return F_status_set_error(F_string_too_large);
       }
 
@@ -2097,7 +2097,7 @@ extern "C" {
       }
 
       if (buffer->used + buffer_size > buffer->size) {
-        if (buffer->size + buffer_size > f_array_length_t_size) {
+        if (buffer->size + buffer_size > f_string_t_size) {
           return F_status_set_error(F_string_too_large);
         }
 
index e863f3b74d2681629d0ee7756f802a267e4b4c1d..63cb1b0e8798890ca1451fe269bbf224a138aeab 100644 (file)
@@ -23,7 +23,7 @@ extern "C" {
 #if !defined(_di_f_string_append_assure_nulless_) || !defined(_di_f_string_append_nulless_) || !defined(_di_f_string_dynamic_append_assure_nulless_) || !defined(_di_f_string_dynamic_append_nulless_) || !defined(_di_f_string_dynamic_mash_nulless_) || !defined(_di_f_string_dynamic_partial_append_assure_nulless_) || !defined(_di_f_string_dynamic_partial_append_nulless_) || !defined(_di_f_string_dynamic_partial_mash_nulless_) || !defined(_di_f_string_mash_nulless_)
   f_status_t private_f_string_append_nulless(const f_string_t source, const f_array_length_t length, f_string_dynamic_t *destination) {
 
-    if (destination->used + length > f_array_length_t_size) {
+    if (destination->used + length > f_string_t_size) {
       return F_status_set_error(F_string_too_large);
     }
 
@@ -93,7 +93,7 @@ extern "C" {
   f_status_t private_f_string_dynamic_increase_by(const f_array_length_t amount, f_string_dynamic_t *dynamic) {
 
     if (dynamic->used + amount > dynamic->size) {
-      if (dynamic->used + amount > f_array_length_t_size) {
+      if (dynamic->used + amount > f_string_t_size) {
         return F_status_set_error(F_string_too_large);
       }
 
@@ -333,7 +333,7 @@ extern "C" {
 #if !defined(_di_f_string_dynamic_mish_) || !defined(_di_f_string_dynamic_partial_mish_) || !defined(_di_f_string_dynamic_partial_prepend_assure_) || !defined(_di_f_string_dynamic_partial_prepend_) || !defined(_di_f_string_dynamic_prepend_assure_) || !defined(_di_f_string_dynamic_prepend_) || !defined(_di_f_string_mish_) || !defined(_di_f_string_prepend_assure_) || !defined(_di_f_string_prepend_)
   f_status_t private_f_string_prepend(const f_string_t source, const f_array_length_t length, f_string_dynamic_t *destination) {
 
-    if (destination->used + length > f_array_length_t_size) {
+    if (destination->used + length > f_string_t_size) {
       return F_status_set_error(F_string_too_large);
     }
 
@@ -358,7 +358,7 @@ extern "C" {
 #if !defined(_di_f_string_dynamic_mish_nulless_) || !defined(_di_f_string_dynamic_partial_mish_nulless_) || !defined(_di_f_string_dynamic_partial_prepend_assure_nulless_) || !defined(_di_f_string_dynamic_partial_prepend_nulless_) || !defined(_di_f_string_dynamic_prepend_assure_nulless_) || !defined(_di_f_string_dynamic_prepend_nulless_) || !defined(_di_f_string_mish_nulless_) || !defined(_di_f_string_prepend_assure_nulless_) || !defined(_di_f_string_prepend_nulless_)
   f_status_t private_f_string_prepend_nulless(const f_string_t source, const f_array_length_t length, f_string_dynamic_t *destination) {
 
-    if (destination->used + length > f_array_length_t_size) {
+    if (destination->used + length > f_string_t_size) {
       return F_status_set_error(F_string_too_large);
     }
 
index de0adfefe1f8938a0af6d6068094fa535b2ec23c..dabd4b0b42cdb23a42aba36499adfe047a766736 100644 (file)
@@ -28,6 +28,12 @@ extern "C" {
  * Define the basic string type.
  *
  * Dynamic allocation macros are provided, but it is recommended to utilize the f_string_dynamic_t for dynamic allocation.
+ *
+ *  is provided as a way t have a string max for systems that do not support max string length in 64-bits (when f_array_length_t is set to uint64_t).
+ *
+ * The ideal length for a string is f_array_length_t_size, which generally defaults to 2^64 (unsigned).
+ * However, the libc/POSIX appears to limit this to 2^63 (signed).
+ * f_string_t_size is provided to help safely navigate this.
  */
 #ifndef _di_f_string_t_
   typedef char *f_string_t;
@@ -41,6 +47,9 @@ extern "C" {
 
   #define macro_f_string_t_delete_simple(string, length)  f_memory_resize(length, 0, sizeof(f_string_t), (void **) & string);
   #define macro_f_string_t_destroy_simple(string, length) f_memory_adjust(length, 0, sizeof(f_string_t), (void **) & string);
+
+  // @fixme update all code utilizing f_array_length_t on a string, such as strnlen().
+  #define f_string_t_size f_type_size_64_positive
 #endif // _di_f_string_t_
 
 /**
index 21f26f921d7d1430811b7d83477a6d54ec7ef253..10f21925fbaed3bef07296e802653a731adeb1d3 100644 (file)
@@ -173,12 +173,12 @@ extern "C" {
     if (dynamic->used + 1 > dynamic->size) {
       f_array_length_t size = dynamic->used + step;
 
-      if (size > f_array_length_t_size) {
-        if (dynamic->used + 1 > f_array_length_t_size) {
+      if (size > f_string_t_size) {
+        if (dynamic->used + 1 > f_string_t_size) {
           return F_status_set_error(F_string_too_large);
         }
 
-        size = f_array_length_t_size;
+        size = f_string_t_size;
       }
 
       return private_f_string_dynamic_resize(size, dynamic);
@@ -843,7 +843,7 @@ extern "C" {
       return F_none;
     }
 
-    if (destination->used == f_array_length_t_size) {
+    if (destination->used == f_string_t_size) {
       return F_status_set_error(F_string_too_large);
     }
 
@@ -876,7 +876,7 @@ extern "C" {
       } // for
     }
 
-    if (destination->used == f_array_length_t_size) {
+    if (destination->used == f_string_t_size) {
       return F_status_set_error(F_string_too_large);
     }
 
index 52d8f643015c5186b30efe1db3f1c8389bacf26f..76f0a5dfe6a5d308daa70307360580f6bb7b5e2e 100644 (file)
@@ -2270,7 +2270,7 @@ extern "C" {
 #if !defined(_di_f_utf_string_append_assure_nulless_) || !defined(_di_f_utf_string_append_nulless_) || !defined(_di_f_utf_string_dynamic_append_assure_nulless_) || !defined(_di_f_utf_string_dynamic_append_nulless_) || !defined(_di_f_utf_string_dynamic_mash_nulless_) || !defined(_di_f_utf_string_dynamic_partial_append_assure_nulless_) || !defined(_di_f_utf_string_dynamic_partial_append_nulless_) || !defined(_di_f_utf_string_dynamic_partial_mash_nulless_) || !defined(_di_f_utf_string_mash_nulless_)
   f_status_t private_f_utf_string_append_nulless(const f_utf_string_t source, const f_array_length_t length, f_utf_string_dynamic_t *destination) {
 
-    if (destination->used + length > f_array_length_t_size) {
+    if (destination->used + length > f_string_t_size) {
       return F_status_set_error(F_string_too_large);
     }
 
@@ -2340,7 +2340,7 @@ extern "C" {
   f_status_t private_f_utf_string_dynamic_increase_by(const f_array_length_t amount, f_utf_string_dynamic_t *dynamic) {
 
     if (dynamic->used + amount > dynamic->size) {
-      if (dynamic->used + amount > f_array_length_t_size) {
+      if (dynamic->used + amount > f_string_t_size) {
         return F_status_set_error(F_string_too_large);
       }
 
@@ -2579,7 +2579,7 @@ extern "C" {
 #if !defined(_di_f_utf_string_dynamic_mish_) || !defined(_di_f_utf_string_dynamic_partial_mish_) || !defined(_di_f_utf_string_dynamic_partial_prepend_assure_) || !defined(_di_f_utf_string_dynamic_partial_prepend_) || !defined(_di_f_utf_string_dynamic_prepend_assure_) || !defined(_di_f_utf_string_dynamic_prepend_) || !defined(_di_f_utf_string_mish_) || !defined(_di_f_utf_string_prepend_assure_) || !defined(_di_f_utf_string_prepend_)
   f_status_t private_f_utf_string_prepend(const f_utf_string_t source, const f_array_length_t length, f_utf_string_dynamic_t *destination) {
 
-    if (destination->used + length > f_array_length_t_size) {
+    if (destination->used + length > f_string_t_size) {
       return F_status_set_error(F_string_too_large);
     }
 
@@ -2604,7 +2604,7 @@ extern "C" {
 #if !defined(_di_f_utf_string_dynamic_mish_nulless_) || !defined(_di_f_utf_string_dynamic_partial_mish_nulless_) || !defined(_di_f_utf_string_dynamic_partial_prepend_assure_nulless_) || !defined(_di_f_utf_string_dynamic_partial_prepend_nulless_) || !defined(_di_f_utf_string_dynamic_prepend_assure_nulless_) || !defined(_di_f_utf_string_dynamic_prepend_nulless_) || !defined(_di_f_utf_string_mish_nulless_) || !defined(_di_f_utf_string_prepend_assure_nulless_) || !defined(_di_f_utf_string_prepend_nulless_)
   f_status_t private_f_utf_string_prepend_nulless(const f_utf_string_t source, const f_array_length_t length, f_utf_string_dynamic_t *destination) {
 
-    if (destination->used + length > f_array_length_t_size) {
+    if (destination->used + length > f_string_t_size) {
       return F_status_set_error(F_string_too_large);
     }
 
index 66fa4979363c5929defe8fa87fbb6581fa8d328b..dece63dfe1c9cc6feea6b862ce2dd160fe4ee81e 100644 (file)
@@ -166,12 +166,12 @@ extern "C" {
     if (dynamic->used + 1 > dynamic->size) {
       f_array_length_t size = dynamic->used + step;
 
-      if (size > f_array_length_t_size) {
-        if (dynamic->used + 1 > f_array_length_t_size) {
+      if (size > f_string_t_size) {
+        if (dynamic->used + 1 > f_string_t_size) {
           return F_status_set_error(F_string_too_large);
         }
 
-        size = f_array_length_t_size;
+        size = f_string_t_size;
       }
 
       return private_f_utf_string_dynamic_resize(size, dynamic);
@@ -835,7 +835,7 @@ extern "C" {
       return F_none;
     }
 
-    if (destination->used == f_array_length_t_size) {
+    if (destination->used == f_string_t_size) {
       return F_status_set_error(F_string_too_large);
     }
 
@@ -868,7 +868,7 @@ extern "C" {
       } // for
     }
 
-    if (destination->used == f_array_length_t_size) {
+    if (destination->used == f_string_t_size) {
       return F_status_set_error(F_string_too_large);
     }
 
index 91868d67a39d318d0c7e07e50ef18aa712374925..0ce4b7a463a444bbcb8c90b959343f5244c7207f 100644 (file)
@@ -178,7 +178,7 @@ extern "C" {
       status = f_file_stat(source.string, F_false, &source_stat);
       if (F_status_is_error(status)) {
         if (status == F_status_set_error(F_string_too_large)) {
-          size = f_array_length_t_size - 1;
+          size = f_string_t_size - 1;
         }
         else {
           size = source.used + file.used + 1;
@@ -192,7 +192,7 @@ extern "C" {
       }
       else {
         if (status == F_status_set_error(F_string_too_large)) {
-          size = f_array_length_t_size - 1;
+          size = f_string_t_size - 1;
         }
         else {
           size = destination.used + file.used + 1;
@@ -384,7 +384,7 @@ extern "C" {
 
       if (F_status_is_error(status)) {
         if (status == F_status_set_error(F_string_too_large)) {
-          size = f_array_length_t_size - 1;
+          size = f_string_t_size - 1;
         }
         else {
           size = source.used + file.used + 1;
@@ -398,7 +398,7 @@ extern "C" {
       }
       else {
         if (status == F_status_set_error(F_string_too_large)) {
-          size = f_array_length_t_size - 1;
+          size = f_string_t_size - 1;
         }
         else {
           size = destination.used + file.used + 1;
@@ -551,7 +551,7 @@ extern "C" {
       if (F_status_is_error(status)) break;
 
       if (names->array[names->used].used > 0 && names->array[names->used].string[names->array[names->used].used - 1] != 0) {
-        if (names->array[names->used].used == f_array_length_t_size) {
+        if (names->array[names->used].used == f_string_t_size) {
           status = F_status_set_error(F_string_too_large);
           break;
         }
@@ -766,7 +766,7 @@ extern "C" {
       total += length_truncated - start;
 
       if (destination->used + total > destination->size) {
-        if (destination->used + total > f_array_length_t_size) {
+        if (destination->used + total > f_string_t_size) {
           return F_status_set_error(F_string_too_large);
         }
 
index 924bf2a2cd830f8e562c55143798c087dea311a6..19845dd067895f3eaae95975ee9e351af9fb7025 100644 (file)
@@ -34,7 +34,7 @@ extern "C" {
     while ((size_read = read(file.id, buffer_read, file.size_read)) > 0) {
 
       if (buffer->used + size_read > buffer->size) {
-        if (buffer->size + size_read > f_array_length_t_size) {
+        if (buffer->size + size_read > f_string_t_size) {
           return F_status_set_error(F_string_too_large);
         }
 
@@ -94,7 +94,7 @@ extern "C" {
 
     if ((size_read = read(file.id, buffer_read, file.size_read)) > 0) {
       if (buffer->used + size_read > buffer->size) {
-        if (buffer->size + size_read > f_array_length_t_size) {
+        if (buffer->size + size_read > f_string_t_size) {
           return F_status_set_error(F_string_too_large);
         }
 
@@ -167,7 +167,7 @@ extern "C" {
     while (buffer_count < total && (size_read = read(file.id, buffer_read, buffer_size)) > 0) {
 
       if (buffer->used + size_read > buffer->size) {
-        if (buffer->size + size_read > f_array_length_t_size) {
+        if (buffer->size + size_read > f_string_t_size) {
           return F_status_set_error(F_string_too_large);
         }
 
index fbf80795f6e1dd3ac27f512f3590c6569b0a68c4..ee9db57f614616146bf1b100ef52e1c5e5911253 100644 (file)
@@ -147,7 +147,7 @@ extern "C" {
         objects_quoted->used++;
       }
 
-    } while (range->start < f_array_length_t_size);
+    } while (range->start < f_string_t_size);
 
     return F_status_is_error(F_number_overflow);
   }
index eac9b579ead93593112267dd6131f538b14d5db0..6b125f8659c8b8074dc43c8c5e8ff049b1fde012 100644 (file)
@@ -121,7 +121,7 @@ extern "C" {
       objects->used++;
       contents->used++;
 
-    } while (range->start < f_array_length_t_size);
+    } while (range->start < f_string_t_size);
 
     return F_status_is_error(F_number_overflow);
   }
index bed51a3b413f14bb00c245235da436b473b37771..bbd2fc5f495dc100db4f14215787db7c63bdd0aa 100644 (file)
@@ -119,7 +119,7 @@ extern "C" {
         return F_none_stop;
       }
 
-    } while (range->start < f_array_length_t_size);
+    } while (range->start < f_string_t_size);
 
     return F_status_is_error(F_number_overflow);
   }
index 9e9bd965cc28ca7d612aacf82906ad57abb7d8af..8db3822a027cd9c5517493522ad87fbf8a8c2106 100644 (file)
@@ -186,7 +186,7 @@ extern "C" {
         contents_quoted->used++;
       }
 
-    } while (range->start < f_array_length_t_size);
+    } while (range->start < f_string_t_size);
 
     return F_status_is_error(F_number_overflow);
   }
index 57698005f33a5751810d7d0631c323e44d318351..6f5bee3fcda488b2eb00fea028fdba28358d8fa1 100644 (file)
@@ -121,7 +121,7 @@ extern "C" {
       objects->used++;
       contents->used++;
 
-    } while (range->start < f_array_length_t_size);
+    } while (range->start < f_string_t_size);
 
     return F_status_is_error(F_number_overflow);
   }
index b6839c323a516c33430ba2cd2f25fdfc2d2645b6..b1920b83c59156773b3a3770fec426859c674254 100644 (file)
@@ -33,7 +33,7 @@ extern "C" {
  * This does not check if the path exists or not.
  * This processes the relative parts: './', '../', and extra '/'.
  * This does not process symbolic links.
- * This has a max size of f_array_length_t_size.
+ * This has a max size of f_string_t_size.
  *
  * @param path
  *   The source path to determine what the canonical path is.
index 5c666e46478e40c7d63f38fa4df2c7c91a75076e..568d9da5916b832ad3ab0bd9a399729c9b60a8b4 100644 (file)
@@ -1289,7 +1289,7 @@ extern "C" {
     }
 
     if (environment->used + data_build.setting.environment.used > environment->size) {
-      if (environment->used + data_build.setting.environment.used > f_array_length_t_size) {
+      if (environment->used + data_build.setting.environment.used > f_environment_max_length) {
         if (main.error.verbosity != f_console_verbosity_quiet) {
           fprintf(main.error.to.stream, "%c", f_string_eol_s[0]);
           f_color_print(main.error.to.stream, main.context.set.error, "%sThe values for the setting '", fll_error_print_error);