aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authoraxtloss <axtlos@getcryst.al>2024-07-08 15:47:05 +0200
committeraxtloss <axtlos@getcryst.al>2024-07-08 15:47:05 +0200
commit7f0cf8ec2b21da8bf049a83e08a7dfb03ca536cb (patch)
tree3ab90546b8c1f7e9b575355bce66ae788b19cb3d /src/main.c
parenta3377b0606c708efdc5656532676038c28a5c444 (diff)
downloadrunc-7f0cf8ec2b21da8bf049a83e08a7dfb03ca536cb.tar.gz
runc-7f0cf8ec2b21da8bf049a83e08a7dfb03ca536cb.tar.bz2
add config parsing
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c65
1 files changed, 56 insertions, 9 deletions
diff --git a/src/main.c b/src/main.c
index d714ebe..fc1a8c2 100644
--- a/src/main.c
+++ b/src/main.c
@@ -2,34 +2,81 @@
#include <stdio.h>
#include <string.h>
#include <errno.h>
+#include <unistd.h>
#define _XOPEN_SOURCE 500
#include <extlib.h>
#include "config.h"
+
+struct compile_cmd_t *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) {
+ return ccmds[i];
+ }
+ }
+ return NULL;
+}
+
int main (int argc, char *argv[]) {
- char *compiler = "gcc";
+ struct compile_cmd_t **ccmds;
+ size_t ccmds_len;
+
+ ccmds_len = get_commands(&ccmds);
+
+ size_t arglength = strlen (argv[argc-1]);
+ char **ap, *fileparts[arglength], *inputstring;
+ inputstring = strdup (argv[argc-1]);
+ size_t parts_len = 0;
+ for (ap = fileparts; (*ap = strsep (&inputstring, ".")) != NULL;) {
+ if (**ap != '\0') {
+ if (++ap >= &inputstring)
+ break;
+ parts_len += 1;
+ }
+ }
+
+ struct compile_cmd_t *matching_cmd = find_cmd(fileparts[parts_len-1], ccmds, ccmds_len);
+ if (!matching_cmd) {
+ puts ("error: no complier for file extension found");
+ return 1;
+ }
+
char *tmplate = strdup ("/tmp/XXXXXX");
if (!tmplate)
exit (1);
char *tmpdir = mkdtemp(tmplate);
if (!tmpdir)
exit (1);
- char *cmd = malloc (strlen (compiler)+strlen(argv[argc-1])+strlen (" -o ")+strlen (tmpdir)+strlen ("/meow")+1);
- char *excmd = malloc (strlen (tmplate)+strlen ("/meow")+1);
+ char *cmd = malloc (strlen (matching_cmd->cmd)+strlen(matching_cmd->args)+strlen(argv[argc-1])+strlen (" -o ")+strlen (tmpdir)+strlen ("/exec")+1);
+ char *excmd = malloc (strlen (tmplate)+strlen ("/exec")+1);
if (!cmd)
exit (1);
if (!excmd)
exit (1);
puts (tmpdir);
- sprintf (cmd, "%s %s -o %s/meow", compiler, argv[argc-1], tmpdir);
- system (cmd);
- sprintf (excmd, "%s/meow", tmpdir);
- system (excmd);
- int rtrn = rrmdir (tmpdir);
+ sprintf (cmd, "%s %s %s -o %s/exec", matching_cmd->cmd, matching_cmd->args, argv[argc-1], tmpdir);
+ int cmp_rtrn = system (cmd);
+ if (cmp_rtrn != 0) {
+ fprintf(stderr, "error: compiler failed");
+ return 1;
+ }
+ sprintf (excmd, "%s/exec", tmpdir);
+ puts (cmd);
+ puts (excmd);
+ int sys_rtrn = system (excmd);
+ if (sys_rtrn != 0) {
+ fprintf (stderr, "error: binary failed");
+ }
+ /* int rtrn = rrmdir (tmpdir);
if (rtrn != 0)
printf ("%d %d\n", rtrn, errno);
- get_commands();
+ */
+ for (int i = 0; i < ccmds_len; i++) {
+ free (ccmds[i]->cmd);
+ free (ccmds[i]);
+ }
+ free (ccmds);
free (tmpdir);
free (cmd);
free (excmd);