|
@@ -0,0 +1,62 @@
|
|
|
+/*
|
|
|
+ * StarPU
|
|
|
+ * Copyright (C) INRIA 2008-2010 (see AUTHORS file)
|
|
|
+ *
|
|
|
+ * This program is free software; you can redistribute it and/or modify
|
|
|
+ * it under the terms of the GNU Lesser General Public License as published by
|
|
|
+ * the Free Software Foundation; either version 2.1 of the License, or (at
|
|
|
+ * your option) any later version.
|
|
|
+ *
|
|
|
+ * This program is distributed in the hope that it will be useful, but
|
|
|
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
+ *
|
|
|
+ * See the GNU Lesser General Public License in COPYING.LGPL for more details.
|
|
|
+ */
|
|
|
+
|
|
|
+#include <starpu.h>
|
|
|
+#include <common/config.h>
|
|
|
+#include <common/utils.h>
|
|
|
+#include <libgen.h>
|
|
|
+
|
|
|
+/* Function with behaviour like `mkdir -p'. This function was adapted from
|
|
|
+ * http://niallohiggins.com/2009/01/08/mkpath-mkdir-p-alike-in-c-for-unix/ */
|
|
|
+
|
|
|
+int starpu_mkpath(const char *s, mode_t mode)
|
|
|
+{
|
|
|
+ char *q, *r = NULL, *path = NULL, *up = NULL;
|
|
|
+ int rv;
|
|
|
+
|
|
|
+ rv = -1;
|
|
|
+ if (strcmp(s, ".") == 0 || strcmp(s, "/") == 0)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ if ((path = strdup(s)) == NULL)
|
|
|
+ STARPU_ABORT();
|
|
|
+
|
|
|
+ if ((q = strdup(s)) == NULL)
|
|
|
+ STARPU_ABORT();
|
|
|
+
|
|
|
+ if ((r = dirname(q)) == NULL)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ if ((up = strdup(r)) == NULL)
|
|
|
+ STARPU_ABORT();
|
|
|
+
|
|
|
+ if ((starpu_mkpath(up, mode) == -1) && (errno != EEXIST))
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ if ((mkdir(path, mode) == -1) && (errno != EEXIST))
|
|
|
+ rv = -1;
|
|
|
+ else
|
|
|
+ rv = 0;
|
|
|
+
|
|
|
+out:
|
|
|
+ if (up)
|
|
|
+ free(up);
|
|
|
+
|
|
|
+ free(q);
|
|
|
+ free(path);
|
|
|
+ return rv;
|
|
|
+}
|
|
|
+
|