#include <unistd.h>
#include <sys/time.h>
+#include <sys/wait.h>
#include <pthread.h>
#include <sys/stat.h>
#include <fcntl.h>
#endif
#ifdef __APPLE__
+#include <sys/syslimits.h> // PATH_MAX
#include <mach-o/dyld.h>
#endif
*buf = 0;
return path;
}
+ len = strlen(buf);
#else
ssize_t len;
len = readlink("/proc/self/exe", buf, size - 1);
return path;
}
+bool
+Path::exists(void) const
+{
+ struct stat st;
+ int err;
+
+ err = stat(str(), &st);
+ if (err) {
+ return false;
+ }
+
+ if (!S_ISREG(st.st_mode))
+ return false;
+
+ return true;
+}
+
+int execute(char * const * args)
+{
+ pid_t pid = fork();
+ if (pid == 0) {
+ // child
+ execvp(args[0], args);
+ fprintf(stderr, "error: failed to execute %s\n", args[0]);
+ exit(-1);
+ } else {
+ // parent
+ if (pid == -1) {
+ fprintf(stderr, "error: failed to fork\n");
+ return -1;
+ }
+ int status = -1;
+ waitpid(pid, &status, 0);
+ return status;
+ }
+}
+
void
log(const char *format, ...)
{