ucode: fix EOF detection in the non-blocking read patch
authorFelix Fietkau <[email protected]>
Thu, 16 Oct 2025 18:57:51 +0000 (18:57 +0000)
committerFelix Fietkau <[email protected]>
Thu, 16 Oct 2025 18:58:55 +0000 (20:58 +0200)
size = 0 means EOF - do not return an empty string in this case
(which implies no data available).

Signed-off-by: Felix Fietkau <[email protected]>
package/utils/ucode/patches/121-fs-add-read_nb-method-for-non-blocking-reads.patch
package/utils/ucode/patches/122-fs-add-mkdtemp-method-for-creating-temporary-directo.patch

index 8566ad158b7e60246c58025317fe1b81229bcc8a..f258869239e659e1ca4c04c53ba00ae0d907045f 100644 (file)
@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
 
 --- a/lib/fs.c
 +++ b/lib/fs.c
-@@ -674,6 +674,112 @@ uc_fs_read(uc_vm_t *vm, size_t nargs)
+@@ -674,6 +674,116 @@ uc_fs_read(uc_vm_t *vm, size_t nargs)
  }
  
  /**
@@ -65,6 +65,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
 +      FILE **fp = uc_fn_this("fs.file");
 +      char *buf = NULL;
 +      ssize_t n_read;
++      uc_value_t *rv;
 +      size_t limit = 4096;
 +      int fd;
 +
@@ -113,7 +114,10 @@ Signed-off-by: Felix Fietkau <[email protected]>
 +              err_return(errno);
 +      }
 +
-+      uc_value_t *rv = ucv_string_new_length(buf, (size_t)n_read);
++      if (!n_read)
++              return NULL;
++
++      rv = ucv_string_new_length(buf, (size_t)n_read);
 +      free(buf);
 +
 +      return rv;
@@ -123,7 +127,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
   * Writes a chunk of data to the file handle.
   *
   * In case the given data is not a string, it is converted to a string before
-@@ -2910,6 +3016,7 @@ static const uc_function_list_t proc_fns
+@@ -2910,6 +3020,7 @@ static const uc_function_list_t proc_fns
  
  static const uc_function_list_t file_fns[] = {
        { "read",               uc_fs_read },
index a92dac3f4325236d454e7aa54f96b87fa2b5b179..e6da8bf525539069991fec421b6de8604d908ea1 100644 (file)
@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
 
 --- a/lib/fs.c
 +++ b/lib/fs.c
-@@ -2632,6 +2632,86 @@ uc_fs_mkstemp(uc_vm_t *vm, size_t nargs)
+@@ -2636,6 +2636,86 @@ uc_fs_mkstemp(uc_vm_t *vm, size_t nargs)
  }
  
  /**
@@ -97,7 +97,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
   * Checks the accessibility of a file or directory.
   *
   * The optional modes argument specifies the access modes which should be
-@@ -3065,6 +3145,7 @@ static const uc_function_list_t global_f
+@@ -3069,6 +3149,7 @@ static const uc_function_list_t global_f
        { "basename",   uc_fs_basename },
        { "lsdir",              uc_fs_lsdir },
        { "mkstemp",    uc_fs_mkstemp },