summaryrefslogtreecommitdiffstats
path: root/src/runner.c
diff options
context:
space:
mode:
authorDetlev Casanova <detlev.casanova@gmail.com>2010-07-05 10:39:49 +0200
committerDetlev Casanova <detlev.casanova@gmail.com>2010-07-05 10:39:49 +0200
commit605ef77a507f23ef3e18072ae40870abb56f3364 (patch)
tree6990a38429d364fc945017bbbe185e1effbd70ee /src/runner.c
downloadlayman-605ef77a507f23ef3e18072ae40870abb56f3364.tar.gz
layman-605ef77a507f23ef3e18072ae40870abb56f3364.tar.bz2
layman-605ef77a507f23ef3e18072ae40870abb56f3364.zip
Base runner, not working yet.
Diffstat (limited to 'src/runner.c')
-rw-r--r--src/runner.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/runner.c b/src/runner.c
new file mode 100644
index 0000000..08433a6
--- /dev/null
+++ b/src/runner.c
@@ -0,0 +1,93 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#include "runner.h"
+
+void stdoutWritten(char*);
+
+struct Runner {
+ void *writeStdout;
+};
+
+int main(int argc, char* argv[])
+{
+ // Tries to compare 2 packages version.
+ if (argc < 3)
+ {
+ printf("Please provide 2 packages.\n");
+ return -1;
+ }
+
+ char *str = malloc((strlen(argv[1]) + strlen(argv[2]) + 2) * sizeof(char));
+
+ sprintf(str, "%s %s", argv[1], argv[2]);
+
+ Runner *r = createRunner();
+ r->writeStdout = stdoutWritten;
+ int ret = execute(r, str);
+ if (ret < 0)
+ printf("Execution error\n");
+
+ freeRunner(r);
+
+ return 0;
+}
+
+void stdoutWritten(char *data)
+{
+ printf("From program : %s\n", data);
+}
+
+Runner *createRunner()
+{
+ Runner *ret = malloc(sizeof(Runner));
+ return ret;
+}
+
+int execute(Runner *r, char *args)
+{
+ r = r;
+ int ret = fork();
+ if (ret > 0)
+ {
+ printf("New PID = %d\n", ret);
+ return ret;
+ }
+
+ //printf("args = %s\n", args);
+ //int fd = open("out.txt", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+
+ int fd = socket(AF_INET, SOCK_STREAM, 0);
+ if (fd < 0)
+ printf("ERROR opening socket\n");
+
+ struct sockaddr_in serv_addr;
+
+ memset(&serv_addr, 0, sizeof(serv_addr));
+ int portno = 5555;
+ serv_addr.sin_family = AF_INET;
+ serv_addr.sin_addr.s_addr = INADDR_ANY;
+ serv_addr.sin_port = htons(portno);
+ if (connect(fd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
+ printf("ERROR on connecting\n");
+
+ //listen(fd, 5);
+
+ dup2(fd, STDOUT_FILENO);
+ ret = execl("/home/detlev/src/c-portage/src/test.py", "test.py", "app-portage/kuroo4-4.2", "app-portage/kuroo4-4.3", NULL);
+ printf("execl: (%d) %s\n", errno, strerror(errno));
+ return ret;
+}
+
+void freeRunner(Runner *r)
+{
+ free(r);
+}