sbsv2/raptor/util/tmkdir/tmkdir.c
changeset 28 b8fa7dfeeaa1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/util/tmkdir/tmkdir.c	Wed Oct 06 15:13:17 2010 +0100
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+* Program for making directory hierarchies
+*
+*/
+
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <string.h>
+#include <errno.h>
+#include "log.h"
+#include "../config.h"
+
+
+
+int mkpath(char *path)
+{
+	int pathlen;
+	char *pathend;
+	char *p;
+	int ret = 255;
+
+	
+	pathlen=strlen(path);
+	pathend = path + pathlen;
+
+	p = path;
+
+	// Find the first level at which we *can* make a directory
+	// go down one level at a time until we make something that works
+	DEBUG(("down: %s\n", path));
+	while ( 0 != mkdir(path, 0777))
+	{
+		//  ENOENT means that the parent directory doesn't exist so it's ok
+		//  any other error is not ok and means that we must give up
+		if (errno != ENOENT)
+			return 1;	
+
+		p = strrchr(path,'/');
+		if (!p)
+			break;
+		*p = '\0';
+	}
+
+	// So we found the point at which a pre-existing tree starts
+	do
+	{
+		p = index(path, '\0');
+		if (p >= pathend)
+		{
+			ret = 0;
+			break;
+		}
+
+		*p = '/';
+		DEBUG(("up: %s\n", path));
+	}
+	while  (0 == mkdir(path, 0777));
+	
+	return ret;
+}
+
+int main(int argc, char *argv[])
+{
+	int i;
+
+	//loglevel=LOGDEBUG;
+	for (i=1; i < argc; i++)
+	{
+		if ( 0 != mkpath(argv[i]))
+			return 255;
+	}
+
+	return 0;
+}
+