diff options
author | axtloss <axtlos@disroot.org> | 2024-10-16 12:40:35 +0200 |
---|---|---|
committer | axtloss <axtlos@disroot.org> | 2024-10-16 12:40:35 +0200 |
commit | 75c0f16b22d549a8dad5b638a8132a266859bb70 (patch) | |
tree | 39fa7f6eeb8191debd5869428be39204d9078aac | |
parent | 67c9dd6877386040174662c311f27d3413b9ec4a (diff) | |
download | runc-main.tar.gz runc-main.tar.bz2 |
-rw-r--r-- | src/config.c | 48 | ||||
-rw-r--r-- | src/main.c | 9 |
2 files changed, 21 insertions, 36 deletions
diff --git a/src/config.c b/src/config.c index 66f53d6..dbc6830 100644 --- a/src/config.c +++ b/src/config.c @@ -18,6 +18,8 @@ */ #define _XOPEN_SOURCE 500 +#define _POSIX_C_SOURCE 200809L +#define _DEFAULT_SOURCE #include <stdlib.h> #include <extlib.h> #include <ftw.h> @@ -41,12 +43,9 @@ compile_cmd_init () void compile_cmd_free (struct compile_cmd_t *self) { - if (self->cmd) - free (self->cmd); - if (self->args) - free (self->args); - if (self->fileext) - free (self->fileext); + free (self->cmd); + free (self->args); + free (self->fileext); free (self); } @@ -56,12 +55,13 @@ parse_config (const char *fpath, const struct stat *sb, { if (!S_ISREG (sb->st_mode)) return 0; - if (sb->st_size < 12) // config file that doesnt even include "compiler=xx" can be ignored + if (sb->st_size < 21) // config file that doesnt include "compiler=x" and "fileext=x" can be ignored return 0; struct compile_cmd_t *ccmd = compile_cmd_init (); struct compile_cmd_t **ccmds_tmp = realloc (*ccmds, sizeof (ccmds) + sizeof (struct compile_cmd_t)); + if (ccmds_tmp) *ccmds = ccmds_tmp; @@ -72,52 +72,36 @@ parse_config (const char *fpath, const struct stat *sb, int filled = 0; while (filled != (CMD_SET | FILEEXT_SET)) { - char *line = strdup (""); - int tmp_char = '\0'; - while ((tmp_char = fgetc (cfg))) { - char *line_tmp = realloc (line, strlen (line) + 8); - if (line_tmp) - line = line_tmp; - sprintf (line, "%s%c", line, tmp_char); - if (tmp_char == '\n' || tmp_char == '\0') - break; - } - char *seperator_fnd = strstr (line, "="); - if (!seperator_fnd) + char *line = NULL; + size_t lineBufSize = 0; + getline (&line, &lineBufSize, cfg); + char *identifier = strsep (&line, "="); + if (!line) fprintf (stderr, "warn: invalid configuration: %s\n", fpath); else { - char *value = strdup (seperator_fnd + 1); - int identifier_len = strlen (line) - strlen (value) - 1; - char *identifier = malloc (identifier_len + 1); - strncpy (identifier, line, identifier_len); - identifier[identifier_len] = '\0'; if (strcmp (identifier, "compiler") == 0 && !(filled & CMD_SET)) { - ccmd->cmd = trim (value, NULL, NULL); + ccmd->cmd = trim (line, NULL, NULL); filled = filled | CMD_SET; } else if (strcmp (identifier, "args") == 0) { free (ccmd->args); - ccmd->args = trim (value, NULL, NULL); + ccmd->args = trim (line, NULL, NULL); } else if (strcmp (identifier, "fileext") == 0 && !(filled & FILEEXT_SET)) { - ccmd->fileext = trim (value, NULL, NULL); + ccmd->fileext = trim (line, NULL, NULL); filled = filled | FILEEXT_SET; } else { fprintf (stderr, "warn: invalid configuration: %s\n", fpath); free (identifier); - free (value); free (line); fclose (cfg); free (ccmd); return 1; } - - free (identifier); - free (value); } - free (line); + free (identifier); } fclose (cfg); ccmds_tmp[ccmds_size] = ccmd; @@ -31,9 +31,8 @@ find_cmd (char *file_extension, struct compile_cmd_t **ccmds, size_t ccmds_len) { for (int i = 0; i < ccmds_len; i++) { - if (strcmp (ccmds[i]->fileext, file_extension) == 0) { + if (strcmp (ccmds[i]->fileext, file_extension) == 0) return ccmds[i]; - } } return NULL; } @@ -46,12 +45,14 @@ remove_shebang (char **file, char *tmpdir, char *file_extension) sprintf (new_file_path, "%s/source.%s", tmpdir, file_extension); FILE *new_file = fopen (new_file_path, "w"); FILE *old_file = fopen (*file, "r"); - char buffer[1024]; - fgets (buffer, 1024, old_file); + char *buffer = NULL; + size_t shebangSize = 0; + getline (&buffer, &shebangSize, old_file); fcopy (old_file, new_file); fclose (new_file); fclose (old_file); free (*file); + free (buffer); *file = strdup (new_file_path); free (new_file_path); } |