diff -r f70b728ea30c -r a1925fb7753a sbsv2/raptor/util/tmkdir/tmkdir.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/util/tmkdir/tmkdir.c Thu Aug 12 09:00:16 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 +#include +#include +#include +#include +#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; +} +