summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2025-05-08 00:13:07 +0200
committerEugen Wissner <belka@caraus.de>2025-05-08 00:13:07 +0200
commit3f11d63a0f86191f010bc0093ee8616c154d9a1b (patch)
tree24b2412bab652d6580c77f518806c7bfc1172f94 /tools
parent40701008f04f2242ab69bfb4bc4f376e6b75429a (diff)
downloadelna-3f11d63a0f86191f010bc0093ee8616c154d9a1b.tar.gz
Add builtin symbols
Diffstat (limited to 'tools')
-rw-r--r--tools/init.c204
1 files changed, 0 insertions, 204 deletions
diff --git a/tools/init.c b/tools/init.c
deleted file mode 100644
index f463bcd..0000000
--- a/tools/init.c
+++ /dev/null
@@ -1,204 +0,0 @@
-#include <stdio.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <sys/reboot.h>
-
-#define FILENAME_BUFFER_SIZE 256
-
-size_t read_command(int descriptor, char *command_buffer)
-{
- ssize_t bytes_read = 0;
- size_t read_so_far = 0;
-
- while ((bytes_read = read(descriptor, command_buffer + read_so_far, FILENAME_BUFFER_SIZE - read_so_far - 1)) > 0)
- {
- read_so_far += bytes_read;
- if (read_so_far >= FILENAME_BUFFER_SIZE - 1)
- {
- break;
- }
- }
- command_buffer[read_so_far] = 0;
- return read_so_far;
-}
-
-enum status
-{
- status_success,
- status_failure,
- status_warning,
- status_fatal
-};
-
-unsigned int make_path(char *destination, const char *directory, const char *filename, const char *extension)
-{
- unsigned int i = 0;
-
- for (; i < FILENAME_BUFFER_SIZE; i++)
- {
- if (directory[i] == 0)
- {
- break;
- }
- destination[i] = directory[i];
- }
- for (int j = 0; i < FILENAME_BUFFER_SIZE; i++, j++)
- {
- if (filename[j] == 0)
- {
- break;
- }
- destination[i] = filename[j];
- }
- if (extension == NULL)
- {
- goto done;
- }
- for (int j = 0; i < FILENAME_BUFFER_SIZE; i++, j++)
- {
- if (extension[j] == 0)
- {
- break;
- }
- destination[i] = extension[j];
- }
-done:
- destination[i] = 0;
-
- return i;
-}
-
-enum status run_test(const char *file_entry_name)
-{
- printf("Running %s. ", file_entry_name);
-
- char filename[FILENAME_BUFFER_SIZE];
- char command_buffer[FILENAME_BUFFER_SIZE];
- char file_buffer[256];
- int pipe_ends[2];
-
- if (pipe(pipe_ends) == -1)
- {
- perror("pipe");
- return status_fatal;
- }
- make_path(filename, "./tests/", file_entry_name, NULL);
-
- int child_pid = fork();
- if (child_pid == -1)
- {
- return status_fatal;
- }
- else if (child_pid == 0)
- {
- close(STDIN_FILENO);
- close(STDERR_FILENO);
- close(pipe_ends[0]); // Close the read end.
-
- if (dup2(pipe_ends[1], STDOUT_FILENO) == -1)
- {
- perror("dup2");
- }
- else
- {
- execl(filename, filename);
- perror("execl");
- }
- close(STDOUT_FILENO);
- close(pipe_ends[1]);
- _exit(1);
- }
- else
- {
- close(pipe_ends[1]); // Close the write end.
- read_command(pipe_ends[0], command_buffer);
- close(pipe_ends[0]);
-
- int wait_status = 0;
-
- make_path(filename, "./expectations/", file_entry_name, ".txt");
-
- FILE *expectation_descriptor = fopen(filename, "r");
-
- if (expectation_descriptor == NULL)
- {
- return status_warning;
- }
- size_t read_from_file = fread(file_buffer, 1, sizeof(file_buffer) - 1, expectation_descriptor);
- fclose(expectation_descriptor);
-
- file_buffer[read_from_file] = 0;
- for (unsigned int i = 0; ; ++i)
- {
- if (command_buffer[i] == 0 && file_buffer[i] == 0)
- {
- fwrite("\n", 1, 1, stdout);
- return status_success;
- }
- else if (command_buffer[i] != file_buffer[i])
- {
- printf("Failed. Got:\n%s", command_buffer);
- return status_failure;
- }
- }
- }
-}
-
-struct summary
-{
- size_t total;
- size_t failure;
- size_t success;
-};
-
-void walk()
-{
- DIR *directory_stream = opendir("./tests");
- struct dirent *file_entry;
-
- struct summary test_summary = { .total = 0, .failure = 0, .success = 0 };
-
- while ((file_entry = readdir(directory_stream)) != NULL)
- {
- if (file_entry->d_name[0] == '.')
- {
- continue;
- }
- ++test_summary.total;
- switch (run_test(file_entry->d_name))
- {
- case status_failure:
- ++test_summary.failure;
- break;
- case status_success:
- ++test_summary.success;
- break;
- case status_warning:
- break;
- case status_fatal:
- goto end_walk;
- }
- }
- printf("Successful: %lu, Failed: %lu, Total: %lu.\n",
- test_summary.success, test_summary.failure, test_summary.total);
-end_walk:
- closedir(directory_stream);
-}
-
-int main()
-{
- int dev_console = open("/dev/console", O_WRONLY);
- if (dev_console != -1)
- {
- dup2(dev_console, STDOUT_FILENO);
- walk();
- close(dev_console);
- }
- sync();
- reboot(RB_POWER_OFF);
-
- return 1;
-}