]> Kevux Git Server - fll/commitdiff
Feature: the execute functions now support custom pipes.
authorKevin Day <thekevinday@gmail.com>
Sun, 13 Dec 2020 21:47:18 +0000 (15:47 -0600)
committerKevin Day <thekevinday@gmail.com>
Sun, 13 Dec 2020 23:04:51 +0000 (17:04 -0600)
This is necessary for the parent process to directly pipe date to/from a child process.
One of the intended goals is for something like the controller program to directly execute a bash script from a string generated by the parent (where this is no file).
The standard input can be used by the child process as pipe data.

When a pipe is passed then the execute functions are asynchronous instead of blocking.
The caller must properly handling all blocking operations as appropriate.

The pipe functionality is optional.

50 files changed:
build/level_0/settings
build/monolithic/settings
level_0/f_color/data/build/settings
level_0/f_execute/c/execute-common.h [new file with mode: 0644]
level_0/f_execute/c/execute.h [new file with mode: 0644]
level_0/f_execute/data/build/defines [new file with mode: 0644]
level_0/f_execute/data/build/dependencies [new file with mode: 0644]
level_0/f_execute/data/build/settings [new file with mode: 0644]
level_0/f_signal/c/signal.h
level_2/fll_execute/c/execute.c
level_2/fll_execute/c/execute.h
level_2/fll_execute/c/private-execute.c
level_2/fll_execute/c/private-execute.h
level_2/fll_execute/data/build/dependencies
level_3/fake/c/fake.h
level_3/fake/c/private-build.c
level_3/fake/c/private-fake.c
level_3/fake/c/private-make.c
level_3/fake/data/build/dependencies
level_3/firewall/c/firewall.c
level_3/firewall/c/firewall.h
level_3/firewall/c/private-firewall.c
level_3/firewall/data/build/dependencies
level_3/fss_basic_list_read/c/fss_basic_list_read.h
level_3/fss_basic_list_read/data/build/dependencies
level_3/fss_basic_list_read/data/build/settings
level_3/fss_basic_list_write/data/build/dependencies
level_3/fss_basic_list_write/data/build/settings
level_3/fss_basic_read/c/fss_basic_read.h
level_3/fss_basic_read/data/build/dependencies
level_3/fss_basic_read/data/build/settings
level_3/fss_basic_write/data/build/dependencies
level_3/fss_basic_write/data/build/settings
level_3/fss_embedded_list_read/c/fss_embedded_list_read.h
level_3/fss_embedded_list_read/data/build/dependencies
level_3/fss_embedded_list_read/data/build/settings
level_3/fss_embedded_list_write/data/build/dependencies
level_3/fss_embedded_list_write/data/build/settings
level_3/fss_extended_list_read/c/fss_extended_list_read.h
level_3/fss_extended_list_read/data/build/dependencies
level_3/fss_extended_list_read/data/build/settings
level_3/fss_extended_list_write/data/build/dependencies
level_3/fss_extended_list_write/data/build/settings
level_3/fss_extended_read/c/fss_extended_read.h
level_3/fss_extended_read/data/build/dependencies
level_3/fss_extended_read/data/build/settings
level_3/fss_extended_write/data/build/dependencies
level_3/fss_extended_write/data/build/settings
level_3/fss_status_code/data/build/dependencies
level_3/fss_status_code/data/build/settings

index e1ad5258847531732da028b0c121ccccd5e1969b..d4b781bfb849effbc3dbca6566a13e4781723064 100644 (file)
@@ -22,7 +22,7 @@ build_libraries -lc
 build_libraries-level
 build_sources_library account.c console.c conversion.c directory.c private-directory.c environment.c private-environment.c file.c private-file.c fss.c iki.c private-iki.c memory.c path.c private-path.c pipe.c print.c private-print.c process.c serialize.c private-serialize.c signal.c socket.c utf.c private-utf.c
 build_sources_program
-build_sources_headers account.h account-common.h color.h console.h console-common.h conversion.h conversion-common.h directory.h directory_type.h directory-common.h environment.h environment-common.h file.h file-common.h fss.h fss-common.h fss_comment.h fss_delimit.h fss_named.h fss_nest.h fss_quote.h fss_set.h iki.h iki-common.h memory.h memory_structure.h path.h path-common.h pipe.h print.h process.h process-common.h serialize.h serialize-common.h signal.h signal-common.h socket.h socket-common.h status.h status_array.h string.h string-common.h string_dynamic.h string_map.h string_quantity.h string_range.h string_triple.h type.h type_array.h utf.h utf-common.h
+build_sources_headers account.h account-common.h color.h console.h console-common.h conversion.h conversion-common.h directory.h directory_type.h directory-common.h environment.h environment-common.h execute.h execute-common.h file.h file-common.h fss.h fss-common.h fss_comment.h fss_delimit.h fss_named.h fss_nest.h fss_quote.h fss_set.h iki.h iki-common.h memory.h memory_structure.h path.h path-common.h pipe.h print.h process.h process-common.h serialize.h serialize-common.h signal.h signal-common.h socket.h socket-common.h status.h status_array.h string.h string-common.h string_dynamic.h string_map.h string_quantity.h string_range.h string_triple.h type.h type_array.h utf.h utf-common.h
 build_sources_script
 build_sources_setting
 build_script yes
index e1615e5e020b64d8a2295519048edc4a03926108..590ee7b9a892eacc28fb67ac7edb8743964f2e1f 100644 (file)
@@ -22,7 +22,7 @@ build_libraries -lc
 build_libraries-monolithic
 build_sources_library level_0/account.c level_0/console.c level_0/conversion.c level_0/directory.c level_0/private-directory.c level_0/environment.c level_0/private-environment.c level_0/file.c level_0/private-file.c level_0/fss.c level_0/iki.c level_0/private-iki.c level_0/memory.c level_0/path.c level_0/private-path.c level_0/pipe.c level_0/print.c level_0/private-print.c level_0/process.c level_0/serialize.c level_0/private-serialize.c level_0/signal.c level_0/socket.c level_0/utf.c level_0/private-utf.c level_1/color.c level_1/console.c level_1/conversion.c level_1/directory.c level_1/private-directory.c level_1/environment.c level_1/private-fss.c level_1/fss_basic.c level_1/fss_basic_list.c level_1/fss_embedded_list.c level_1/fss_extended.c level_1/fss_extended_list.c level_1/iki.c level_1/print.c level_1/private-print.c level_1/status.c level_1/string.c level_1/private-string.c level_1/type.c level_1/utf.c level_1/private-utf.c level_1/utf_file.c level_1/private-utf_file.c level_2/error.c level_2/private-error.c level_2/execute.c level_2/private-execute.c level_2/file.c level_2/private-file.c level_2/fss.c level_2/private-fss.c level_2/fss_basic.c level_2/fss_basic_list.c level_2/fss_embedded_list.c level_2/fss_extended.c level_2/fss_extended_list.c level_2/fss_status.c level_2/iki.c level_2/private-iki.c level_2/path.c level_2/program.c level_2/status.c
 build_sources_program
-build_sources_headers level_0/account.h level_0/account-common.h level_0/color.h level_0/console.h level_0/console-common.h level_0/conversion.h level_0/conversion-common.h level_0/directory.h level_0/directory_type.h level_0/directory-common.h level_0/environment.h level_0/environment-common.h level_0/file.h level_0/file-common.h level_0/fss.h level_0/fss-common.h level_0/fss_comment.h level_0/fss_delimit.h level_0/fss_named.h level_0/fss_nest.h level_0/fss_quote.h level_0/fss_set.h level_0/iki.h level_0/iki-common.h level_0/memory.h level_0/memory_structure.h level_0/path.h level_0/path-common.h level_0/pipe.h level_0/print.h level_0/process.h level_0/process-common.h level_0/serialize.h level_0/serialize-common.h level_0/signal.h level_0/signal-common.h level_0/socket.h level_0/socket-common.h level_0/status.h level_0/status_array.h level_0/string.h level_0/string-common.h level_0/string_dynamic.h level_0/string_map.h level_0/string_quantity.h level_0/string_range.h level_0/string_triple.h level_0/type.h level_0/type_array.h level_0/utf.h level_0/utf-common.h level_1/color.h level_1/console.h level_1/conversion.h level_1/directory.h level_1/environment.h level_1/fss.h level_1/fss_basic.h level_1/fss_basic_list.h level_1/fss_embedded_list.h level_1/fss_extended.h level_1/fss_extended_list.h level_1/fss_macro.h level_1/fss_status.h level_1/iki.h level_1/print.h level_1/status.h level_1/string.h level_1/type.h level_1/utf.h level_1/utf_file.h level_2/error.h level_2/error-common.h level_2/execute.h level_2/file.h level_2/fss.h level_2/fss_basic.h level_2/fss_basic_list.h level_2/fss_embedded_list.h level_2/fss_extended.h level_2/fss_extended_list.h level_2/fss_status.h level_2/iki.h level_2/path.h level_2/program.h level_2/status.h
+build_sources_headers level_0/account.h level_0/account-common.h level_0/color.h level_0/console.h level_0/console-common.h level_0/conversion.h level_0/conversion-common.h level_0/directory.h level_0/directory_type.h level_0/directory-common.h level_0/environment.h level_0/environment-common.h level_0/execute.h level_0/execute-common.h level_0/file.h level_0/file-common.h level_0/fss.h level_0/fss-common.h level_0/fss_comment.h level_0/fss_delimit.h level_0/fss_named.h level_0/fss_nest.h level_0/fss_quote.h level_0/fss_set.h level_0/iki.h level_0/iki-common.h level_0/memory.h level_0/memory_structure.h level_0/path.h level_0/path-common.h level_0/pipe.h level_0/print.h level_0/process.h level_0/process-common.h level_0/serialize.h level_0/serialize-common.h level_0/signal.h level_0/signal-common.h level_0/socket.h level_0/socket-common.h level_0/status.h level_0/status_array.h level_0/string.h level_0/string-common.h level_0/string_dynamic.h level_0/string_map.h level_0/string_quantity.h level_0/string_range.h level_0/string_triple.h level_0/type.h level_0/type_array.h level_0/utf.h level_0/utf-common.h level_1/color.h level_1/console.h level_1/conversion.h level_1/directory.h level_1/environment.h level_1/fss.h level_1/fss_basic.h level_1/fss_basic_list.h level_1/fss_embedded_list.h level_1/fss_extended.h level_1/fss_extended_list.h level_1/fss_macro.h level_1/fss_status.h level_1/iki.h level_1/print.h level_1/status.h level_1/string.h level_1/type.h level_1/utf.h level_1/utf_file.h level_2/error.h level_2/error-common.h level_2/execute.h level_2/file.h level_2/fss.h level_2/fss_basic.h level_2/fss_basic_list.h level_2/fss_embedded_list.h level_2/fss_extended.h level_2/fss_extended_list.h level_2/fss_status.h level_2/iki.h level_2/path.h level_2/program.h level_2/status.h
 build_sources_script
 build_sources_setting
 build_script yes
index 3ad9dd7f1aa35f7f329089a6157cafdf38b62029..e8a552e59726d6b9907294773be4076049dda84c 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_indexer ar
 build_language c
 build_libraries -lc
-build_libraries-individual
+build_libraries-individual -lf_memory
 build_sources_library
 build_sources_program
 build_sources_headers color.h
diff --git a/level_0/f_execute/c/execute-common.h b/level_0/f_execute/c/execute-common.h
new file mode 100644 (file)
index 0000000..cbd291b
--- /dev/null
@@ -0,0 +1,49 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Execute
+ * API Version: 0.5
+ * Licenses: lgplv2.1
+ *
+ * Defines common data to be used for/by project execute.
+ *
+ * This is auto-included by execute.h and should not need to be explicitly included.
+ */
+#ifndef _F_execute_common_h
+#define _F_execute_common_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * A set containing the three standard descriptors for use in pipes.
+ *
+ * Future versions may suppot stdwarn and stddebug if there ever is such a thing.
+ *
+ * Descriptors always use -1 to designate not used because 0 represent a valid descriptor.
+ *
+ * input:  the input file descriptor.
+ * output: the output file descriptor.
+ * error:  the error file descriptor.
+ */
+#ifndef _di_f_execute_pipe_t_
+  typedef struct {
+    int input;
+    int output;
+    int error;
+  } f_execute_pipe_t;
+
+  #define f_execute_pipe_t_initialize { -1, -1, -1 }
+
+  #define f_execute_pipe_t_clear(set) \
+    set.input = -1; \
+    set.output = -1; \
+    set.error = -1;
+#endif // _di_f_execute_pipe_t_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _F_execute_common_h
diff --git a/level_0/f_execute/c/execute.h b/level_0/f_execute/c/execute.h
new file mode 100644 (file)
index 0000000..60e6abb
--- /dev/null
@@ -0,0 +1,30 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Execute
+ * API Version: 0.5
+ * Licenses: lgplv2.1
+ *
+ * Provides execute processing functionality.
+ */
+#ifndef _F_execute_h
+#define _F_execute_h
+
+// libc includes
+
+// fll-0 includes
+#include <level_0/type.h>
+#include <level_0/status.h>
+
+// fll-0 execute includes
+#include <level_0/execute-common.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _F_execute_h
diff --git a/level_0/f_execute/data/build/defines b/level_0/f_execute/data/build/defines
new file mode 100644 (file)
index 0000000..4f13080
--- /dev/null
@@ -0,0 +1 @@
+# fss-0000
diff --git a/level_0/f_execute/data/build/dependencies b/level_0/f_execute/data/build/dependencies
new file mode 100644 (file)
index 0000000..c06dda5
--- /dev/null
@@ -0,0 +1,5 @@
+# fss-0000
+
+f_type
+f_status
+f_string
diff --git a/level_0/f_execute/data/build/settings b/level_0/f_execute/data/build/settings
new file mode 100644 (file)
index 0000000..0267e24
--- /dev/null
@@ -0,0 +1,55 @@
+# fss-0001
+
+project_name f_execute
+
+version_major 0
+version_minor 5
+version_micro 2
+version_target major
+
+environment
+
+process_pre
+process_post
+
+modes individual
+modes_default individual
+
+build_compiler gcc
+build_indexer ar
+build_language c
+build_libraries -lc
+build_libraries-individual -lf_memory
+build_sources_library
+build_sources_program
+build_sources_headers execute.h execute-common.h
+build_sources_script
+build_sources_setting
+build_script yes
+build_shared yes
+build_static yes
+
+path_headers level_0
+path_headers_preserve no
+path_library_script script
+path_library_shared shared
+path_library_static static
+path_program_script script
+path_program_shared shared
+path_program_static static
+path_sources
+path_standard yes
+
+search_exclusive yes
+search_shared yes
+search_static yes
+
+defines_all
+defines_static
+defines_shared
+
+flags_all -z now -g -fdiagnostics-color=always
+flags_shared
+flags_static
+flags_library -fPIC
+flags_program -fPIE
index bba3a682415504ed1863b20e8aa69a88d1ffc88b..6e358606c0c2783988b7dfdceac363394a641d87 100644 (file)
 #include <level_0/type.h>
 #include <level_0/status.h>
 
+// fll-0 signal includes
+#include <level_0/signal-common.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-// fll-0 signal includes
-#include <level_0/signal-common.h>
-
 /**
  * Close an open signal descriptor.
  *
index c0b78ee2b723ec459f4d72f58fd8d76560ef8e41..90879b0b5f56fc25e005fb3ef965a76d5e20fc68 100644 (file)
@@ -130,7 +130,7 @@ extern "C" {
 #endif // _di_fll_execute_arguments_dynamic_add_set_
 
 #ifndef _di_fll_execute_path_
-  f_return_status fll_execute_path(const f_string_t program_path, const f_string_statics_t arguments, const f_signal_how_t *signals, int *result) {
+  f_return_status fll_execute_path(const f_string_t program_path, const f_string_statics_t arguments, const f_signal_how_t *signals, f_execute_pipe_t * const pipe, int *result) {
     #ifndef _di_level_2_parameter_checking_
       if (!result) return F_status_set_error(F_parameter);
     #endif // _di_level_2_parameter_checking_
@@ -158,12 +158,12 @@ extern "C" {
       }
     }
 
-    return private_fll_execute_fork(program_name, fixed_arguments, F_false, signals, result);
+    return private_fll_execute_fork(program_name, fixed_arguments, F_false, signals, pipe, result);
   }
 #endif // _di_fll_execute_path_
 
 #ifndef _di_fll_execute_path_environment_
-  f_return_status fll_execute_path_environment(const f_string_t program_path, const f_string_statics_t arguments, const f_string_statics_t names, const f_string_statics_t values, const f_signal_how_t *signals, int *result) {
+  f_return_status fll_execute_path_environment(const f_string_t program_path, const f_string_statics_t arguments, const f_string_statics_t names, const f_string_statics_t values, const f_signal_how_t *signals, f_execute_pipe_t * const pipe, int *result) {
     #ifndef _di_level_2_parameter_checking_
       if (!result) return F_status_set_error(F_parameter);
     #endif // _di_level_2_parameter_checking_
@@ -189,12 +189,12 @@ extern "C" {
       }
     }
 
-    return private_fll_execute_fork_environment(program_name, fixed_arguments, F_false, names, values, signals, result);
+    return private_fll_execute_fork_environment(program_name, fixed_arguments, F_false, names, values, signals, pipe, result);
   }
 #endif // _di_fll_execute_path_environment_
 
 #ifndef _di_fll_execute_program_
-  f_return_status fll_execute_program(const f_string_t program_name, const f_string_statics_t arguments, const f_signal_how_t *signals, int *result) {
+  f_return_status fll_execute_program(const f_string_t program_name, const f_string_statics_t arguments, const f_signal_how_t *signals, f_execute_pipe_t * const pipe, int *result) {
     #ifndef _di_level_2_parameter_checking_
       if (!result) return F_status_set_error(F_parameter);
     #endif // _di_level_2_parameter_checking_
@@ -211,12 +211,12 @@ extern "C" {
     // insert the required array terminated.
     fixed_arguments[arguments.used + 1] = 0;
 
-    return private_fll_execute_fork(program_name, fixed_arguments, F_true, signals, result);
+    return private_fll_execute_fork(program_name, fixed_arguments, F_true, signals, pipe, result);
   }
 #endif // _di_fll_execute_program_
 
 #ifndef _di_fll_execute_program_environment_
-  f_return_status fll_execute_program_environment(const f_string_t program_name, const f_string_statics_t arguments, const f_string_statics_t names, const f_string_statics_t values, const f_signal_how_t *signals, int *result) {
+  f_return_status fll_execute_program_environment(const f_string_t program_name, const f_string_statics_t arguments, const f_string_statics_t names, const f_string_statics_t values, const f_signal_how_t *signals, f_execute_pipe_t * const pipe, int *result) {
     #ifndef _di_level_2_parameter_checking_
       if (!result) return F_status_set_error(F_parameter);
     #endif // _di_level_2_parameter_checking_
@@ -315,7 +315,7 @@ extern "C" {
     f_macro_string_dynamics_t_delete(status, paths);
     if (F_status_is_error(status)) return status;
 
-    return private_fll_execute_fork_environment(program_name, fixed_arguments, F_true, names, values, signals, result);
+    return private_fll_execute_fork_environment(program_name, fixed_arguments, F_true, names, values, signals, pipe, result);
   }
 #endif // _di_fll_execute_program_environment_
 
index 756965bfad743412b9dceca84899821d35f7d0ca..fe720249a5f24b8f5808febe2906d3a27fa70701 100644 (file)
@@ -25,6 +25,7 @@
 #include <level_0/string.h>
 #include <level_0/utf.h>
 #include <level_0/environment.h>
+#include <level_0/execute.h>
 #include <level_0/file.h>
 #include <level_0/path.h>
 #include <level_0/signal.h>
@@ -350,25 +351,38 @@ extern "C" {
  * Instead, this returns F_child and assigns the child's return code to result.
  * The caller is expected to handle the appropriate exit procedures and memory deallocation.
  *
+ * When the passed pipe parameter is not NULL, this function is effectively asynchronous and will not block.
+ * The caller is then expected to handle all read/write operations to/from the pipe.
+ * The caller is expected to appropriately call waitpid() or similar as needed.
+ * The caller is expected to handle both parent and child process (status is F_parent for parent and F_child for child.).
+ * When the passed paremeter is NULL, then this function is effectively synchronous and blocks until child exits.
+ *
  * @param program_path
  *   The entire path to the program.
  * @param arguments
  *   An array of strings representing the arguments.
- * @param set_signal
+ * @param signals
  *   (optional) A pointer to the set of signals.
  *   Set to 0 to disable.
+ * @param pipe
+ *   (optional) A pointer to the set of pipe desciptors (I/O) to be used by the child process.
+ *   When a non-zero address, the child process will assign these as the standard I/O file descriptors for piping to/from the parent/child.
+ *   For each pipe, setting a value of -1 means to use the default pipe.
+ *   Set to 0 to disable.
  * @param result
  *   The code returned after finishing execution of program_path.
  *
  * @return
  *   F_none on success.
- *   F_child on success but this is the child thread (this may happen when calling scripts rather than executing a binary).
- *   F_failure (with error bit) if result is non-zero.
- *   F_fork (with error bit) if fork failed.
+ *   F_child on success but this is the child thread.
+ *   F_parent on success but this is the parent thread and pipe is non-zero (function is not blocking).
+ *   F_failure (with error bit set) on execution failure.
+ *   F_fork (with error bit set) on fork failure.
  *
  *   Errors (with error bit) from: f_file_exists().
  *   Errors (with error bit) from: f_signal_set_handle().
  *
+ * @see dup2()
  * @see execv()
  * @see exit()
  * @see fork()
@@ -380,7 +394,7 @@ extern "C" {
  * @see f_signal_set_handle()
  */
 #ifndef _di_fll_execute_path_
-  extern f_return_status fll_execute_path(const f_string_t program_path, const f_string_statics_t arguments, const f_signal_how_t *signals, int *result);
+  extern f_return_status fll_execute_path(const f_string_t program_path, const f_string_statics_t arguments, const f_signal_how_t *signals, f_execute_pipe_t * const pipe, int *result);
 #endif // _di_fll_execute_path_
 
 /**
@@ -394,6 +408,12 @@ extern "C" {
  * Instead, this returns F_child and assigns the child's return code to result.
  * The caller is expected to handle the appropriate exit procedures and memory deallocation.
  *
+ * When the passed pipe parameter is not NULL, this function is effectively asynchronous and will not block.
+ * The caller is then expected to handle all read/write operations to/from the pipe.
+ * The caller is expected to appropriately call waitpid() or similar as needed.
+ * The caller is expected to handle both parent and child process (status is F_parent for parent and F_child for child.).
+ * When the passed paremeter is NULL, then this function is effectively synchronous and blocks until child exits.
+ *
  * @param program_path
  *   The entire path to the program.
  * @param arguments
@@ -409,21 +429,28 @@ extern "C" {
  * @param signals
  *   (optional) A pointer to the set of signals.
  *   Set to 0 to disable.
+ * @param pipe
+ *   (optional) A pointer to the set of pipe desciptors (I/O) to be used by the child process.
+ *   When a non-zero address, the child process will assign these as the standard I/O file descriptors for piping to/from the parent/child.
+ *   For each pipe, setting a value of -1 means to use the default pipe.
+ *   Set to 0 to disable.
  * @param result
  *   The code returned after finishing execution of program_path.
  *
  * @return
  *   F_none on success.
- *   F_child on success but this is the child thread (this may happen when calling scripts rather than executing a binary).
- *   F_failure (with error bit) if result is non-zero.
- *   F_fork (with error bit) if fork failed.
+ *   F_child on success but this is the child thread.
+ *   F_parent on success but this is the parent thread and pipe is non-zero (function is not blocking).
+ *   F_failure (with error bit set) on execution failure.
+ *   F_fork (with error bit set) on fork failure.
  *
  *   Errors (with error bit) from: f_environment_set_dynamic().
  *   Errors (with error bit) from: f_file_exists().
  *   Errors (with error bit) from: f_signal_set_handle().
  *
- * @see execv()
  * @see clearenv()
+ * @see dup2()
+ * @see execv()
  * @see fork()
  * @see memcpy()
  * @see strnlen()
@@ -434,7 +461,7 @@ extern "C" {
  * @see f_signal_set_handle()
  */
 #ifndef _di_fll_execute_path_environment_
-  extern f_return_status fll_execute_path_environment(const f_string_t program_path, const f_string_statics_t arguments, const f_string_statics_t names, const f_string_statics_t values, const f_signal_how_t *signals, int *result);
+  extern f_return_status fll_execute_path_environment(const f_string_t program_path, const f_string_statics_t arguments, const f_string_statics_t names, const f_string_statics_t values, const f_signal_how_t *signals, f_execute_pipe_t * const pipe, int *result);
 #endif // _di_fll_execute_path_environment_
 
 /**
@@ -446,25 +473,38 @@ extern "C" {
  * Instead, this returns F_child and assigns the child's return code to result.
  * The caller is expected to handle the appropriate exit procedures and memory deallocation.
  *
+ * When the passed pipe parameter is not NULL, this function is effectively asynchronous and will not block.
+ * The caller is then expected to handle all read/write operations to/from the pipe.
+ * The caller is expected to appropriately call waitpid() or similar as needed.
+ * The caller is expected to handle both parent and child process (status is F_parent for parent and F_child for child.).
+ * When the passed paremeter is NULL, then this function is effectively synchronous and blocks until child exits.
+ *
  * @param program_name
  *   The name of the program.
  * @param arguments
  *   An array of strings representing the arguments.
- * @param set_signal
+ * @param signals
  *   (optional) A pointer to the set of signals.
  *   Set to 0 to disable.
+ * @param pipe
+ *   (optional) A pointer to the set of pipe desciptors (I/O) to be used by the child process.
+ *   When a non-zero address, the child process will assign these as the standard I/O file descriptors for piping to/from the parent/child.
+ *   For each pipe, setting a value of -1 means to use the default pipe.
+ *   Set to 0 to disable.
  * @param result
  *   The code returned after finishing execution of program.
  *
  * @return
  *   F_none on success.
- *   F_child on success but this is the child thread (this may happen when calling scripts rather than executing a binary).
- *   F_failure (with error bit) if result is non-zero.
- *   F_fork (with error bit) if fork failed.
+ *   F_child on success but this is the child thread.
+ *   F_parent on success but this is the parent thread and pipe is non-zero (function is not blocking).
+ *   F_failure (with error bit set) on execution failure.
+ *   F_fork (with error bit set) on fork failure.
  *
  *   Errors (with error bit) from: f_file_exists().
  *   Errors (with error bit) from: f_signal_set_handle().
  *
+ * @see dup2()
  * @see execvp()
  * @see fork()
  * @see strnlen()
@@ -474,7 +514,7 @@ extern "C" {
  * @see f_signal_set_handle()
  */
 #ifndef _di_fll_execute_program_
-  extern f_return_status fll_execute_program(const f_string_t program_name, const f_string_statics_t arguments, const f_signal_how_t *signals, int *result);
+  extern f_return_status fll_execute_program(const f_string_t program_name, const f_string_statics_t arguments, const f_signal_how_t *signals, f_execute_pipe_t * const pipe, int *result);
 #endif // _di_fll_execute_program_
 
 /**
@@ -490,6 +530,12 @@ extern "C" {
  * Instead, this returns F_child and assigns the child's return code to result.
  * The caller is expected to handle the appropriate exit procedures and memory deallocation.
  *
+ * When the passed pipe parameter is not NULL, this function is effectively asynchronous and will not block.
+ * The caller is then expected to handle all read/write operations to/from the pipe.
+ * The caller is expected to appropriately call waitpid() or similar as needed.
+ * The caller is expected to handle both parent and child process (status is F_parent for parent and F_child for child.).
+ * When the passed paremeter is NULL, then this function is effectively synchronous and blocks until child exits.
+ *
  * @param program_name
  *   The name of the program.
  * @param arguments
@@ -505,14 +551,20 @@ extern "C" {
  * @param signals
  *   (optional) A pointer to the set of signals.
  *   Set to 0 to disable.
+ * @param pipe
+ *   (optional) A pointer to the set of pipe desciptors (I/O) to be used by the child process.
+ *   When a non-zero address, the child process will assign these as the standard I/O file descriptors for piping to/from the parent/child.
+ *   For each pipe, setting a value of -1 means to use the default pipe.
+ *   Set to 0 to disable.
  * @param result
  *   The code returned after finishing execution of program.
  *
  * @return
  *   F_none on success.
- *   F_child on success but this is the child thread (this may happen when calling scripts rather than executing a binary).
- *   F_failure (with error bit) if result is non-zero.
- *   F_fork (with error bit) if fork failed.
+ *   F_child on success but this is the child thread.
+ *   F_parent on success but this is the parent thread and pipe is non-zero (function is not blocking).
+ *   F_failure (with error bit set) on execution failure.
+ *   F_fork (with error bit set) on fork failure.
  *
  *   Errors (with error bit) from: f_environment_get().
  *   Errors (with error bit) from: f_file_exists().
@@ -523,6 +575,8 @@ extern "C" {
  *   Errors (with error bit) from: fl_string_append().
  *   Errors (with error bit) from: fl_string_dynamic_terminate().
  *
+ * @see clearenv()
+ * @see dup2()
  * @see execvp()
  * @see fork()
  * @see memcpy()
@@ -537,7 +591,7 @@ extern "C" {
  * @see fl_string_dynamic_terminate()
  */
 #ifndef _di_fll_execute_program_environment_
-  extern f_return_status fll_execute_program_environment(const f_string_t program_name, const f_string_statics_t arguments, const f_string_statics_t names, const f_string_statics_t values, const f_signal_how_t *signals, int *result);
+  extern f_return_status fll_execute_program_environment(const f_string_t program_name, const f_string_statics_t arguments, const f_string_statics_t names, const f_string_statics_t values, const f_signal_how_t *signals, f_execute_pipe_t * const pipe, int *result);
 #endif // _di_fll_execute_program_environment_
 
 #ifdef __cplusplus
index 11e12dc4477985a6c6288f82911a2a3fe15b2ed4..7c9ebd70882bd9e916855a1b558e2fcc594a5f01 100644 (file)
@@ -111,7 +111,7 @@ extern "C" {
 #endif // !defined(_di_fll_execute_arguments_add_parameter_) || !defined(_di_fll_execute_arguments_add_parameter_set_) || !defined(_di_fll_execute_arguments_dynamic_add_parameter_) || !defined(_di_fll_execute_arguments_dynamic_add_parameter_set_)
 
 #if !defined(_di_fll_execute_path_) || !defined(_di_fll_execute_program_)
-  f_return_status private_fll_execute_fork(const f_string_t program_path, const f_string_t fixed_arguments[], const bool execute_program, const f_signal_how_t *signals, int *result) {
+  f_return_status private_fll_execute_fork(const f_string_t program_path, const f_string_t fixed_arguments[], const bool program_is, const f_signal_how_t *signals, f_execute_pipe_t * const pipe, int *result) {
 
     const pid_t process_id = fork();
 
@@ -119,15 +119,33 @@ extern "C" {
       return F_status_set_error(F_fork);
     }
 
-    // child process.
-    if (!process_id) {
+    if (process_id) {
+      if (pipe) {
+        return F_parent;
+      }
+    }
+    else {
 
       if (signals) {
         f_signal_set_handle(SIG_BLOCK, &signals->block);
         f_signal_set_handle(SIG_UNBLOCK, &signals->block_not);
       }
 
-      const int code = execute_program ? execvp(program_path, fixed_arguments) : execv(program_path, fixed_arguments);
+      if (pipe) {
+        if (pipe->input != -1) {
+          dup2(pipe->input, f_type_descriptor_input);
+        }
+
+        if (pipe->output != -1) {
+          dup2(pipe->input, f_type_descriptor_output);
+        }
+
+        if (pipe->error != -1) {
+          dup2(pipe->error, f_type_descriptor_error);
+        }
+      }
+
+      const int code = program_is ? execvp(program_path, fixed_arguments) : execv(program_path, fixed_arguments);
 
       if (result) {
         *result = code;
@@ -152,7 +170,7 @@ extern "C" {
 #endif // !defined(_di_fll_execute_path_) || !defined(_di_fll_execute_program_)
 
 #if !defined(_di_fll_execute_path_environment_) || !defined(_di_fll_execute_program_environment_)
-  f_return_status private_fll_execute_fork_environment(const f_string_t program_path, const f_string_t fixed_arguments[], const bool execute_program, const f_string_statics_t names, const f_string_statics_t values, const f_signal_how_t *signals, int *result) {
+  f_return_status private_fll_execute_fork_environment(const f_string_t program_path, const f_string_t fixed_arguments[], const bool program_is, const f_string_statics_t names, const f_string_statics_t values, const f_signal_how_t *signals, f_execute_pipe_t * const pipe, int *result) {
 
     const pid_t process_id = fork();
 
@@ -160,8 +178,12 @@ extern "C" {
       return F_status_set_error(F_fork);
     }
 
-    // child process.
-    if (!process_id) {
+    if (process_id) {
+      if (pipe) {
+        return F_parent;
+      }
+    }
+    else {
       if (signals) {
         f_signal_set_handle(SIG_BLOCK, &signals->block);
         f_signal_set_handle(SIG_UNBLOCK, &signals->block_not);
@@ -173,7 +195,21 @@ extern "C" {
         f_environment_set_dynamic(names.array[i], values.array[i], F_true);
       } // for
 
-      const int code = execute_program ? execvp(program_path, fixed_arguments) : execv(program_path, fixed_arguments);
+      if (pipe) {
+        if (pipe->input != -1) {
+          dup2(pipe->input, f_type_descriptor_input);
+        }
+
+        if (pipe->output != -1) {
+          dup2(pipe->input, f_type_descriptor_output);
+        }
+
+        if (pipe->error != -1) {
+          dup2(pipe->error, f_type_descriptor_error);
+        }
+      }
+
+      const int code = program_is ? execvp(program_path, fixed_arguments) : execv(program_path, fixed_arguments);
 
       if (result) {
         *result = code;
index 0b7df63a7a227ea9aba09073e33e008f3aa38cda..c8327e28e7f395081f2d6b0f1e3efbd95c29bd72 100644 (file)
@@ -115,20 +115,26 @@ extern "C" {
  *   The part of the path to the program representing the program name to copy from.
  * @param fixed_arguments
  *   A fixed array of strings representing the arguments.
- * @param execute_path
+ * @param program_is
  *   If TRUE then execvp() is called to perform execution.
  *   If FALSE then execv() is called to perform execution.
  * @param set_signal
  *   (optional) A pointer to the set of signals.
  *   Set to 0 to disable.
+ * @param pipe
+ *   (optional) A pointer to the set of pipe desciptors (I/O) to be used by the child process.
+ *   When a non-zero address, the child process will assign these as the standard I/O file descriptors for piping to/from the parent/child.
+ *   For each pipe, setting a value of -1 means to use the default pipe.
+ *   Set to 0 to disable.
  * @param result
  *   The code returned after finishing execution of program_path.
  *
  * @return
  *   F_none on success.
  *   F_child on success but this is the child thread.
- *   F_fork (with error bit set) on fork failure.
+ *   F_parent on success but this is the parent thread and pipe is non-zero (function is not blocking).
  *   F_failure (with error bit set) on execution failure.
+ *   F_fork (with error bit set) on fork failure.
  *
  * @see execv()
  * @see execvp()
@@ -136,7 +142,7 @@ extern "C" {
  * @see fll_execute_program()
  */
 #if !defined(_di_fll_execute_path_) || !defined(_di_fll_execute_program_)
-  extern f_return_status private_fll_execute_fork(const f_string_t program_path, const f_string_t fixed_arguments[], const bool execute_path, const f_signal_how_t *signals, int *result) f_gcc_attribute_visibility_internal;
+  extern f_return_status private_fll_execute_fork(const f_string_t program_path, const f_string_t fixed_arguments[], const bool program_is, const f_signal_how_t *signals, f_execute_pipe_t * const pipe, int *result) f_gcc_attribute_visibility_internal;
 #endif // !defined(_di_fll_execute_path_) || !defined(_di_fll_execute_program_)
 
 /**
@@ -146,7 +152,7 @@ extern "C" {
  *   The part of the path to the program representing the program name to copy from.
  * @param fixed_arguments
  *   A fixed array of strings representing the arguments.
- * @param execute_program
+ * @param program_is
  *   If TRUE then execvp() is called to perform execution.
  *   If FALSE then execv() is called to perform execution.
  * @param names
@@ -160,14 +166,20 @@ extern "C" {
  * @param signals
  *   (optional) A pointer to the set of signals.
  *   Set to 0 to disable.
+ * @param pipe
+ *   (optional) A pointer to the set of pipe desciptors (I/O) to be used by the child process.
+ *   When a non-zero address, the child process will assign these as the standard I/O file descriptors for piping to/from the parent/child.
+ *   For each pipe, setting a value of -1 means to use the default pipe.
+ *   Set to 0 to disable.
  * @param result
  *   The code returned after finishing execution of program_path.
  *
  * @return
  *   F_none on success.
  *   F_child on success but this is the child thread.
- *   F_fork (with error bit set) on fork failure.
+ *   F_parent on success but this is the parent thread and pipe is non-zero (function is not blocking).
  *   F_failure (with error bit set) on execution failure.
+ *   F_fork (with error bit set) on fork failure.
  *
  * @see execv()
  * @see execvpe()
@@ -175,7 +187,7 @@ extern "C" {
  * @see fll_execute_program_environment()
  */
 #if !defined(_di_fll_execute_path_environment_) || !defined(_di_fll_execute_program_environment_)
-  extern f_return_status private_fll_execute_fork_environment(const f_string_t program_path, const f_string_t fixed_arguments[], const bool execute_program, const f_string_statics_t names, const f_string_statics_t values, const f_signal_how_t *signals, int *result) f_gcc_attribute_visibility_internal;
+  extern f_return_status private_fll_execute_fork_environment(const f_string_t program_path, const f_string_t fixed_arguments[], const bool program_is, const f_string_statics_t names, const f_string_statics_t values, const f_signal_how_t *signals, f_execute_pipe_t * const pipe, int *result) f_gcc_attribute_visibility_internal;
 #endif // !defined(_di_fll_execute_path_environment_) || !defined(_di_fll_execute_program_environment_)
 
 /**
index b94e28a4594322d63a91862cdd2c149aad53fcf5..862211bfc4b56d238235431c41b1281d6bf2eaf4 100644 (file)
@@ -5,6 +5,7 @@ f_status
 f_memory
 f_string
 f_environment
+f_execute
 f_file
 f_path
 f_signal
index 6e6f91af0aade2e55f40bb9e385bb5a37e9f5f08..67fcb93f883d5410726de05820760f111056509c 100644 (file)
@@ -61,6 +61,7 @@
 #include <level_0/console.h>
 #include <level_0/directory.h>
 #include <level_0/environment.h>
+#include <level_0/execute.h>
 #include <level_0/file.h>
 #include <level_0/iki.h>
 #include <level_0/path.h>
index fcee29f7098738e70708aaf5969d232696d416f5..24e596846f423bbb5f374a544e74bdb888c34296 100644 (file)
@@ -664,7 +664,7 @@ extern "C" {
       f_signal_set_empty(&signals.block);
       f_signal_set_fill(&signals.block_not);
 
-      *status = fll_execute_path_environment(path.string, arguments, data_build.environment.names, data_build.environment.values, &signals, &return_code);
+      *status = fll_execute_path_environment(path.string, arguments, data_build.environment.names, data_build.environment.values, &signals, 0, &return_code);
 
       f_macro_string_dynamics_t_delete_simple(arguments);
 
index 9e56f0fcc1080613339b47ce8a6e39cf8f6626f8..e8c5601a3380cfed6e449f2ed1ea04107dc4a291 100644 (file)
@@ -41,7 +41,7 @@ extern "C" {
       f_signal_set_empty(&signals.block);
       f_signal_set_fill(&signals.block_not);
 
-      *status = fll_execute_program_environment(program.string, arguments, environment.names, environment.values, &signals, &return_code);
+      *status = fll_execute_program_environment(program.string, arguments, environment.names, environment.values, &signals, 0, &return_code);
 
       if (fake_signal_received(data)) {
         *status = F_status_set_error(F_signal);
index 67ce461ee83a9192e00ec285983dccd70623b1af..0ba2eb098197590b507c7a6cf6d8e268520fef53 100644 (file)
@@ -3847,10 +3847,10 @@ extern "C" {
     f_signal_set_fill(&signals.block_not);
 
     if (as_shell) {
-      status = fll_execute_path_environment(program.string, arguments, data_make->environment.names, data_make->environment.values, &signals, &return_code);
+      status = fll_execute_path_environment(program.string, arguments, data_make->environment.names, data_make->environment.values, &signals, 0, &return_code);
     }
     else {
-      status = fll_execute_program_environment(program.string, arguments, data_make->environment.names, data_make->environment.values, &signals, &return_code);
+      status = fll_execute_program_environment(program.string, arguments, data_make->environment.names, data_make->environment.values, &signals, 0, &return_code);
     }
 
     if (status == F_status_set_error(F_signal)) {
index 04a8d9441ffef6d661a46035a57af7c2e5115564..f10db60eec4589e6a5a3e41cfe905effc08ccd51 100644 (file)
@@ -11,6 +11,7 @@ f_console
 f_conversion
 f_directory
 f_environment
+f_execute
 f_fss
 f_file
 f_iki
index b2a2a90c40e464befefc9b20e0b7eae5dd28d3d4..2abbb7e9fc170c1da5aab1b1871b605b94684bd1 100644 (file)
@@ -251,7 +251,12 @@ extern "C" {
           parameters.array[4].used = 9;
           parameters.array[5].used = 6;
 
-          status = fll_execute_program((f_string_t) firewall_tool_iptables, parameters, 0, &return_code);
+          status = fll_execute_program((f_string_t) firewall_tool_iptables, parameters, 0, 0, &return_code);
+
+          // immediately exit child process, @todo this may require additional memory deallocation and relating changes.
+          if (status == F_child) {
+            exit(return_code);
+          }
 
           fprintf(data->output.stream, "\n");
           fflush(data->output.stream);
@@ -279,7 +284,12 @@ extern "C" {
           parameters.array[4].used = 9;
           parameters.array[5].used = 6;
 
-          status = fll_execute_program((f_string_t) firewall_tool_iptables, parameters, 0, &return_code);
+          status = fll_execute_program((f_string_t) firewall_tool_iptables, parameters, 0, 0, &return_code);
+
+          // immediately exit child process, @todo this may require additional memory deallocation and relating changes.
+          if (status == F_child) {
+            exit(return_code);
+          }
 
           fprintf(data->output.stream, "\n");
           fflush(data->output.stream);
@@ -303,7 +313,12 @@ extern "C" {
           parameters.array[2].used = 9;
           parameters.array[3].used = 6;
 
-          status = fll_execute_program((f_string_t) firewall_tool_iptables, parameters, 0, &return_code);
+          status = fll_execute_program((f_string_t) firewall_tool_iptables, parameters, 0, 0, &return_code);
+
+          // immediately exit child process, @todo this may require additional memory deallocation and relating changes.
+          if (status == F_child) {
+            exit(return_code);
+          }
 
           fprintf(data->output.stream, "\n");
           fflush(data->output.stream);
index 51b5a13e7c8db3a77394545d4f6ecf6318740450..2e193f917858eb0288c89e684b0a12a6fbede681 100644 (file)
@@ -26,6 +26,7 @@
 #include <level_0/utf.h>
 #include <level_0/console.h>
 #include <level_0/directory.h>
+#include <level_0/execute.h>
 #include <level_0/file.h>
 #include <level_0/pipe.h>
 #include <level_0/print.h>
index 6f8beb0c89e650d609d75f618533b3a9b92fa079..13f7b05c032e7514bcd2c7d797601f105eccbf3a 100644 (file)
@@ -752,7 +752,7 @@ f_return_status firewall_perform_commands(const firewall_local_data_t local, con
                       fprintf(f_type_debug, "\n");
                     }
 
-                    status = fll_execute_program((f_string_t) current_tool, arguments, 0, &return_code);
+                    status = fll_execute_program((f_string_t) current_tool, arguments, 0, 0, &return_code);
 
                     // immediately exit child process, @todo this may require additional memory deallocation and relating changes.
                     if (status == F_child) {
@@ -826,7 +826,7 @@ f_return_status firewall_perform_commands(const firewall_local_data_t local, con
             fprintf(f_type_debug, "\n");
           }
 
-          status = fll_execute_program(current_tool, arguments, 0, &return_code);
+          status = fll_execute_program(current_tool, arguments, 0, 0, &return_code);
 
           // immediately exit child process, @todo this may require additional memory deallocation and relating changes.
           if (status == F_child) {
@@ -1070,7 +1070,7 @@ f_return_status firewall_create_custom_chains(firewall_reserved_chains_t *reserv
         }
 
         tool = firewall_program_iptables;
-        status = fll_execute_program((f_string_t) firewall_tool_iptables, arguments, 0, &return_code);
+        status = fll_execute_program((f_string_t) firewall_tool_iptables, arguments, 0, 0, &return_code);
 
         // immediately exit child process, @todo this may require additional memory deallocation and relating changes.
         if (status == F_child) {
@@ -1091,7 +1091,7 @@ f_return_status firewall_create_custom_chains(firewall_reserved_chains_t *reserv
           }
 
           tool = firewall_program_ip6tables;
-          status = fll_execute_program((f_string_t) firewall_tool_ip6tables, arguments, 0, &return_code);
+          status = fll_execute_program((f_string_t) firewall_tool_ip6tables, arguments, 0, 0, &return_code);
 
           // immediately exit child process, @todo this may require additional memory deallocation and relating changes.
           if (status == F_child) {
@@ -1179,7 +1179,7 @@ f_return_status firewall_delete_chains(const firewall_data_t data) {
       fprintf(f_type_debug, "\n");
     }
 
-    status = fll_execute_program(tools[i], arguments, 0, &return_code);
+    status = fll_execute_program(tools[i], arguments, 0, 0, &return_code);
 
     // immediately exit child process, @todo this may require additional memory deallocation and relating changes.
     if (status == F_child) {
@@ -1239,7 +1239,7 @@ f_return_status firewall_delete_chains(const firewall_data_t data) {
       fprintf(f_type_debug, "\n");
     }
 
-    status = fll_execute_program(tools[i], arguments, 0, &return_code);
+    status = fll_execute_program(tools[i], arguments, 0, 0, &return_code);
 
     // immediately exit child process, @todo this may require additional memory deallocation and relating changes.
     if (status == F_child) {
@@ -1321,7 +1321,7 @@ f_return_status firewall_default_lock(const firewall_data_t data) {
         fprintf(f_type_debug, "\n");
       }
 
-      status = fll_execute_program(tools[j], arguments, 0, &return_code);
+      status = fll_execute_program(tools[j], arguments, 0, 0, &return_code);
 
       // immediately exit child process, @todo this may require additional memory deallocation and relating changes.
       if (status == F_child) {
index 66e5d36ed35907cb98e95efc113a63432e0abc54..f58c5d8090a2a05f75fb183542b486beab374491 100644 (file)
@@ -9,6 +9,7 @@ f_color
 f_console
 f_directory
 f_environment
+f_execute
 f_file
 f_fss
 f_path
index 7ce5951f542bdb5c4a749dbfa98059c0a102b28f..f8e2782c8854c66c4340cd24dfef3f2fbb4df221 100644 (file)
@@ -41,7 +41,6 @@
 
 // fll-2 includes
 #include <level_2/error.h>
-#include <level_2/execute.h>
 #include <level_2/file.h>
 #include <level_2/fss_basic_list.h>
 #include <level_2/program.h>
index 4f23c89867fd40c1e566be67d0a564287b302774..501975c80880cd965a35629f89538063e61104ca 100644 (file)
@@ -21,7 +21,6 @@ fl_print
 fl_status
 fl_string
 fll_error
-fll_execute
 fll_file
 fll_fss
 fll_program
index 87dd4dcf4cd0879eebe406ac17742506e973c95d..a4cc3f961d72602ce5f6f4c4a0f84c6bb16e3c6b 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_indexer ar
 build_language c
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_execute -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_print -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_basic_list_read.c private-fss_basic_list_read.c
index 35c97b5f8ef2732a3fc9ee41d6b2c1791583d54d..df503dc51bfd0c6ec89538ae5b4005e21297513d 100644 (file)
@@ -20,7 +20,6 @@ fl_fss
 fl_status
 fl_string
 fll_error
-fll_execute
 fll_file
 fll_fss
 fll_program
index 906aa1f57be1c527aae140e939bf2b3773640081..b866403f1f0ac0b0e8b23524fe24932e3299e07a 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_indexer ar
 build_language c
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_execute -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_fss -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_basic_list_write.c private-fss_basic_list_write.c
index c473b13e815d55904d4fd755f64976bf0b1acc78..e1df109c65f5d179875ca992613b3e5a655c3d46 100644 (file)
@@ -41,7 +41,6 @@
 
 // fll-2 includes
 #include <level_2/error.h>
-#include <level_2/execute.h>
 #include <level_2/file.h>
 #include <level_2/fss_basic.h>
 #include <level_2/program.h>
index 4f23c89867fd40c1e566be67d0a564287b302774..501975c80880cd965a35629f89538063e61104ca 100644 (file)
@@ -21,7 +21,6 @@ fl_print
 fl_status
 fl_string
 fll_error
-fll_execute
 fll_file
 fll_fss
 fll_program
index a9bb147ce6c4ff30a3cc015f2179ef2183af4939..66649093a1d561fa62481caf26cfb5131fe3f794 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_indexer ar
 build_language c
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_execute -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_print -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_basic_read.c private-fss_basic_read.c
index 35c97b5f8ef2732a3fc9ee41d6b2c1791583d54d..df503dc51bfd0c6ec89538ae5b4005e21297513d 100644 (file)
@@ -20,7 +20,6 @@ fl_fss
 fl_status
 fl_string
 fll_error
-fll_execute
 fll_file
 fll_fss
 fll_program
index 6635285e39fe58a4a26c9f87d6c78196cbe8fb79..e0b36dbf671afbb3cd8e4e7d27f75ef9a21f5b7f 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_indexer ar
 build_language c
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_execute -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_fss -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_basic_write.c private-fss_basic_write.c
index 09a09da55524e450225855c7b66484729f0d8816..1551fefaf250d3ec35104a6048299ec95cea92de 100644 (file)
@@ -41,7 +41,6 @@
 
 // fll-2 includes
 #include <level_2/error.h>
-#include <level_2/execute.h>
 #include <level_2/file.h>
 #include <level_2/fss_embedded_list.h>
 #include <level_2/program.h>
index 4f23c89867fd40c1e566be67d0a564287b302774..501975c80880cd965a35629f89538063e61104ca 100644 (file)
@@ -21,7 +21,6 @@ fl_print
 fl_status
 fl_string
 fll_error
-fll_execute
 fll_file
 fll_fss
 fll_program
index fd9b43ce56d6466c628613ff26611fafb0e377f1..3c36c6a9db19037608e2027a13188d059d9653f5 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_indexer ar
 build_language c
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_execute -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_print -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_embedded_list_read.c private-fss_embedded_list_read.c
index 35c97b5f8ef2732a3fc9ee41d6b2c1791583d54d..df503dc51bfd0c6ec89538ae5b4005e21297513d 100644 (file)
@@ -20,7 +20,6 @@ fl_fss
 fl_status
 fl_string
 fll_error
-fll_execute
 fll_file
 fll_fss
 fll_program
index 2ff7829515186d699ee13cfbd2f19087a71cb302..c2283be2fa15427df51c650e7bbd5dd932f9e734 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_indexer ar
 build_language c
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_execute -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_fss -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_embedded_list_write.c private-fss_embedded_list_write.c
index 62f9d89b9f3236f832f6e5e20c9d8e7bdf5c9782..79b2929622d4828cf951b7d7df3b916b407590da 100644 (file)
@@ -41,7 +41,6 @@
 
 // fll-2 includes
 #include <level_2/error.h>
-#include <level_2/execute.h>
 #include <level_2/file.h>
 #include <level_2/fss_extended_list.h>
 #include <level_2/program.h>
index 4f23c89867fd40c1e566be67d0a564287b302774..501975c80880cd965a35629f89538063e61104ca 100644 (file)
@@ -21,7 +21,6 @@ fl_print
 fl_status
 fl_string
 fll_error
-fll_execute
 fll_file
 fll_fss
 fll_program
index f2ed02020f8e91866a8f8ddfcb78f5ed244c3065..66bb70b15a6971f2fe1224eefd31ed993f3bb6f9 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_indexer ar
 build_language c
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_execute -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_print -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_extended_list_read.c private-fss_extended_list_read.c
index 35c97b5f8ef2732a3fc9ee41d6b2c1791583d54d..df503dc51bfd0c6ec89538ae5b4005e21297513d 100644 (file)
@@ -20,7 +20,6 @@ fl_fss
 fl_status
 fl_string
 fll_error
-fll_execute
 fll_file
 fll_fss
 fll_program
index 08f0016a4813bc2ae15eb50cf62ae041a331718a..f8eecf5c5edfb163bc2398e53bfb6dd2516b0e97 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_indexer ar
 build_language c
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_execute -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_fss -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_extended_list_write.c private-fss_extended_list_write.c
index 61263503a8f6500fa50b1d047c21947e9916e939..c9bd1dd3d3bd981f5c4be94ab5b87f5344d0a5ca 100644 (file)
@@ -41,7 +41,6 @@
 
 // fll-2 includes
 #include <level_2/error.h>
-#include <level_2/execute.h>
 #include <level_2/file.h>
 #include <level_2/fss_extended.h>
 #include <level_2/program.h>
index 9843cb6855a12df1d83fa2148660ffd496e0368f..de0c72730b87f66b7a1972a12a36a607f1f77856 100644 (file)
@@ -21,7 +21,6 @@ fl_print
 fl_status
 fl_string
 fll_error
-fll_execute
 fll_file
 fll_fss
 fll_program
index 3af122f688f6cd6e6ba8e37f2bdbb11e2ff95c42..a881b2b27e9a17845aefdd261bb6be0d5bb0bf38 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_indexer ar
 build_language c
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_execute -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_print -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_extended_read.c private-fss_extended_read.c
index 4346cadeb1073872f01dad0a8f37077b34cfd0a1..1f1706bbee18fe4428bb51ec6d51f601ef05b79a 100644 (file)
@@ -19,7 +19,6 @@ fl_fss
 fl_status
 fl_string
 fll_error
-fll_execute
 fll_file
 fll_fss
 fll_program
index 810c1ac3626f61c8ffd28360d9ad92476732a753..2073547add10c1cdf4aeab0960be3c278fa0ebf9 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_indexer ar
 build_language c
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_execute -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_program -lfl_color -lfl_conversion -lfl_directory -lfl_fss -lfl_status -lfl_string -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_extended_write.c private-fss_extended_write.c
index eaeb226d9230060e6bf4e8aa06d985572af747e1..6b134dd8256fdca482a23a0337ed53307d04b244 100644 (file)
@@ -22,7 +22,6 @@ fl_status
 fl_string
 fl_utf
 fll_error
-fll_execute
 fll_file
 fll_fss
 fll_program
index 01e1b2041caa3b6f25c9bcbc33d4b77a3a48d49a..2f83ad9d4d2da04b971491ba75cebe8e0a6ce5ef 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_indexer ar
 build_language c
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_execute -lfll_file -lfll_fss -lfll_program -lfll_status -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_status -lfl_string -lfl_utf -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_program -lfll_status -lfl_color -lfl_console -lfl_conversion -lfl_directory -lfl_fss -lfl_status -lfl_string -lfl_utf -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_status_code.c private-fss_status_code.c