Kevin Day [Wed, 17 Jul 2024 04:21:46 +0000 (23:21 -0500)]
Progress: Add initial stand alone builds for both controller and init programs.
Bring in the stand alone build that includes the FLL source files in a build settings file.
The associated fakefile will be updated and tested later.
The config.h files are currently incomplete.
Currently to test the stand alone builds:
- Use an empty config.h file.
- Copy the sources from the monolithic FLL package into the sources directory under sources/c/fll/.
- Build the controller stand alone program via:
# fake -s data/build/stand_alone/settings.controller build
- Build the init stand alone program via:
# fake -s data/build/stand_alone/settings.init build
Due to using an empty config.h file the resulting binary is oversized due to including unneeded code.
This will change once the controller.config.h and init.config.h are appropriately updated.
Kevin Day [Wed, 17 Jul 2024 04:17:39 +0000 (23:17 -0500)]
Update: Restructure the project to make it easy to switch to or from stand alone builds, and other fixes.
Move the sources for the program to be under the program/controller directory.
This makes the structure more one to one with how it is installed.
This then makes a drop in place stand alone build easier.
Update the git ignore file:
- Add the FLL directory so that a drop in place stand alone build is unlikely to be accidentally added to this repository.
- Add the config.c and config.h to prevent accidental inclusion of local configuration source file and header file.
Fix incorrect dependencies, adding missing ones and removing non-existent ones.
Kevin Day [Tue, 16 Jul 2024 01:43:33 +0000 (20:43 -0500)]
Update: Finish migrating the project.
The project appears to work as far as basic testing and code reviewing goes.
I imagine that once I put this to regular use I will fine additional problems.
Commits after this point will be normal commits rather than migration progress commits.
Kevin Day [Fri, 12 Jul 2024 03:27:43 +0000 (22:27 -0500)]
Progress: Continue migrating the project, and do some restructuring.
Don't provide default examples as the settings.
Move all of these into an examples directory.
The examples directory is placed under a data directory that is intended to be for files such as those under the /usr/share directory.
This shows that the Featureless Make build settings specification is missing the "build_sources_data" which is a /usr/share equivalent of "-build_sources_setting" (aka /etc).
Kevin Day [Thu, 11 Jul 2024 05:48:49 +0000 (00:48 -0500)]
Progress: Continue migrating the project, updating documentation and fixing some bugs.
Update the specifications and documentation.
Drop the "/var" default in "/var/run" to just be "/run".
This is nice and newer systems are following this.
The process flags should actually be on a flag variable inside the process structure.
This flag variable got lost in migration and is now back.
Provide additional lock structural changes.
Make stronger attempts to re-establish the read locks.
(There will likely be more updates to follow regarding F_lock_read and F_lock_write.)
The need to release a read lock to get a write lock within the same thread is unideal.
I do not like how this is.
It has probably annoyed me in the past and it annoys me yet again.
The POSIX thread documentation man pages are quite lacking in some critical information in this area.
I will have to do a lot of research.
Maybe at some point in the future I might depend on a different threading system that is more sane.
I accidentally had the instance action lock being locked when the regular instance lock should be grabbed.
This caused the utility execution (or anything that executes based on a PID file) to just sit there after the first run.
This is a migration mistake that is now fixed.
I did notice that on PID file error this thread still does not exit but the 0.6 version does exit.
This is likely another migration bug that needs to be fixed.
Or this is a problem resulting from adding the F_lock_read and F_lock_write return values without getting the time to go and have the callers expect this return result.
Add some new functions for returning a pointer so that I can make the pointer a constant in the execute functions.
Kevin Day [Tue, 9 Jul 2024 04:13:43 +0000 (23:13 -0500)]
Progress: Continue migrating the project, possibly wrapping up the migration.
Additional review and tests are still required but this fixes some additional problems encountered during testing.
Try to improve grammar by treating special variables as proper nouns, such as Entry, Exit, Rule, Item, etc...
Move the environment map onto the Instance.
I decided not to put it on the cache but I might change my mind as this is being added for cache purposes.
This should help reduce repeated allocations on every execute.
I may want to add features to the Controller program to better control when to clear or deallocate memory for more security at the cost of resources and performance.
This would allow for post-compile-time configuration.
A mistake exposed a lack of error reporting for when Items is an empty array.
Add controller_print_error_rule_item_execute_none() to account for this.
The bug is that "object" and "content" in controller_rule_parameters_read() are actually optional.
I was returning a parameter error when these were not defined.
Reduce the local allocation of f_state_t and pass it along as a parameter.
These particular functions should be being called sequentially and should be able to safely pass along the state between them.
The settings for the IKI read state is temporarily modified as appropriate and then restored when finished.
Don't assign enabled variable on lock failure to avoid potential race condition.
Kevin Day [Mon, 8 Jul 2024 00:42:31 +0000 (19:42 -0500)]
Progress: Continue migrating the project, getting close to wrapping up migration.
The program appears to run and work for simple scripts.
I have not done an extensive code review.
I have not done an extensive runtime test.
This reduces the small allocation down from 16 to 8 which shows a closer allocation level to that of the 0.6 version of Controller.
The number of allocations is still fewer even with this change, so that is real good.
Add some missing code and handle other problems such as allocation problems.
An incorrect lock is being used on the execution.
I need to look out for other accidental lock migration mistakes.
This performs the time calculation changes that I recently added as a separate commit in the 0.6 version of Controller.
Kevin Day [Sat, 6 Jul 2024 23:58:47 +0000 (18:58 -0500)]
Progress: Continue migrating the project, addressing instances double-pointer.
I forgot that instances is a double-pointer.
Adjust the code to ensure that the double-pointer is handled and that the locks are allocated and de-allocated.
Add additional comments regarding things that need to be done.
Kevin Day [Wed, 3 Jul 2024 04:56:55 +0000 (23:56 -0500)]
Cleanup: Add time based version in each of the documentation and specification files where it is missing.
I am just setting the current date rather than trying to figure out the date of last change.
I also noticed that the documents/time.txt file has an incorrect license specified.
The original files from the 0.6 and 0.7 branches of the FLL project already show the open-standard-license-1.0-or-later as the license.
Make sure the documents/time.txt correctly identifies the license as open-standard-license-1.0-or-later to avoid confusion.
Kevin Day [Thu, 27 Jun 2024 02:56:23 +0000 (21:56 -0500)]
Progress: Continue migrating the project, where the code now compiles without error.
The migration is not complete.
This simply has all of the compilation problems addressed.
There are still several print functions that need to be migrated.
There are probably a lot of out of date comments, which will be fixed as discovered.
I need to walk through each and every function, from a start to finish perspective, and make sure that all the logic is still valid.
I have good reason to believe that there are a lot of things to correct.
Kevin Day [Sun, 2 Jun 2024 23:51:58 +0000 (18:51 -0500)]
Progress: Continue migrating the project, notably refactoring out controller_global_t.
A lot of the changes made it possible to remove th controller_global_t.
Restructure the code to do this.
Most of the compile errors are fixed.
I still need to go over the logic and fix things.
I still need to copy over some functions.
I still need to move the print functions around.
I still need to do runtime tests once all of the above is completed.
Kevin Day [Thu, 23 May 2024 04:41:32 +0000 (23:41 -0500)]
Update: Remove the ++first and ++last parameters and relating logic.
I have used this for a while and have decided these are not worth the effort.
The addition is very nice but the additional code and logic is just extra maintenance and complexity for very little gain.
Kevin Day [Thu, 9 May 2024 01:51:11 +0000 (20:51 -0500)]
Security: Potential buffer overflow on 0 length array.
The length_name_item variable can potentially be zero.
The assignment of "name_item[length_name_item] = 0;" will then result in an assignment on a 0 length array.
Kevin Day [Thu, 11 Apr 2024 03:46:56 +0000 (22:46 -0500)]
Progress: Continue migrating the project.
Start brining in the enumerations and types.
There is still a lot of inconsistency in the type delete functions to deal with.
Many of the "delete" functions may end up being replaced with a "resize" method.
This removes the "--init" parameter.
I figure I might as well simplify the design a little and have the init and controller be more separate.
Kevin Day [Tue, 9 Apr 2024 01:37:34 +0000 (20:37 -0500)]
Update: Better utilize functionality of C for extern types.
I am creating a string pointer and passing it through a structure to dynamically pass different progam names for each program.
This is fine for many languages that are not C/C++.
For C/C++, this can be done in a cleaner and more efficient way.
The extern type can be declared in the main project and use that.
Then, the final binary is the only case where the actual implementation of the extern variable must exist.
That means each program (init and controller) will define their own program name string.
No extra memory in the structure needs to be used.
This is cleaner, simpler, and more maintainable.
Kevin Day [Thu, 4 Apr 2024 03:20:54 +0000 (22:20 -0500)]
Progress: Begin migrating the project, doing some initial preparations.
Tweak the fakefile structure.
Remove the "as_init" fakefile mode.
Use library instead of object so that both controller and init may use the same library.
I may want to create a custon "init only" mode where init uses libinit.so rather than libcontroller.so.
Have the build settings pass "-D_controller_as_init_" directly for the init fakefile.
Add the child process exit code.
I may end up changing this again, but I wanted to start off very consistent with other projects design.
Finish the help printing process.
The program name is moved into the specific programs.
Add missing control group header file include.
Fix a mistake whee the main thread signal function is calling itself rather than the main signal handler.
This bad behavior results in a segfault.
Kevin Day [Thu, 4 Apr 2024 00:33:18 +0000 (19:33 -0500)]
Update: Remove bootstrap script.
This doesn't need to exist here now that this is in a separate project.
The bootstrap script is also very limited in design and the Controller project uses a lot more advanced functionality.