aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/main.c b/main.c
index 06fdcce..752b4a2 100644
--- a/main.c
+++ b/main.c
@@ -7,15 +7,26 @@
#include <sys/wait.h>
#include <sys/types.h>
-int f1_newer(char *f1, char *f2) {
+typedef struct thread_data {
+ char *f1;
+ char *f2;
+} thread_data;
+
+void *f1_newer(void *arg) {
+ thread_data *files = (thread_data *) arg;
+ char *f1 = files->f1;
+ char *f2 = files->f2;
struct stat f1_attr;
struct stat f2_attr;
stat(f1, &f1_attr);
stat(f2, &f2_attr);
- if (difftime(f1_attr.st_mtime, f2_attr.st_mtime) <= 0) {
- return 0;
+ int diff = difftime(f1_attr.st_mtime, f2_attr.st_mtime);
+ int ret = 0;
+ if (diff <= 0) {
+ pthread_exit(&ret);
}
- return 1;
+ ret = 1;
+ pthread_exit(&ret);
}
void *create_make() {
@@ -30,17 +41,25 @@ void *create_make() {
int main() {
- pthread_t f_thread;
+ thread_data files;
+ files.f1 = "main.c";
+ files.f2 = "./bin/debug";
+
+ pthread_t f_thread, check_thread;
pthread_create(&f_thread, NULL, create_make, NULL);
+ pthread_create(&check_thread, NULL, f1_newer, (void *)&files);
mkdir("./bin", 0777);
char *source = "main.c";
char *bin = "./bin/debug";
+ void *newer;
pthread_join(f_thread, NULL);
+ pthread_join(check_thread, &newer);
+ int recomp = *(int *) newer;
- if (f1_newer(source, bin)) {
+ if (recomp) {
pid_t make_pid;
if ((make_pid = fork()) == 0) {
printf("Recompiling...\n");
@@ -51,7 +70,7 @@ int main() {
pid_t x_pid;
if ((x_pid = fork()) == 0) {
- execl("./bin/debug", "debug", NULL);
+ execl("./bin/tmp", "tmp", NULL);
}
waitpid(x_pid, NULL, 0);