1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/security/cryptomgmtlibs/securityutils/source/sectcbutil/miscutil.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,100 @@
1.4 +/*
1.5 +* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
1.6 +* All rights reserved.
1.7 +* This component and the accompanying materials are made available
1.8 +* under the terms of the License "Eclipse Public License v1.0"
1.9 +* which accompanies this distribution, and is available
1.10 +* at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.11 +*
1.12 +* Initial Contributors:
1.13 +* Nokia Corporation - initial contribution.
1.14 +*
1.15 +* Contributors:
1.16 +*
1.17 +* Description:
1.18 +* Contains miscellaneous utility functions that can be used by any code in security component
1.19 +*
1.20 +*/
1.21 +
1.22 +
1.23 +/**
1.24 + @file
1.25 +*/
1.26 +
1.27 +#include "miscutil.h"
1.28 +
1.29 +namespace MiscUtil
1.30 +{
1.31 +/*
1.32 + * Function used to extract lines of text from a buffer. Note that this only works for non-unicode text. It skips
1.33 + * over blank lines and the characters '\n' or '\r' are treated as end-of-line markers.
1.34 + *
1.35 + * @param aBuffer Input buffer
1.36 + * @param aPos Starting index into aBuffer
1.37 + * @return ETrue if a line was successfully extracted from the buffer, EFalse if end of buffer reached
1.38 + */
1.39 +
1.40 +EXPORT_C TBool ReadNonEmptyLineL(const TDesC8& aBuffer, TInt& aPos, TPtrC8& aLine)
1.41 + {
1.42 + TBool lineIdentified = ETrue;
1.43 + aLine.Set(NULL, 0);
1.44 +
1.45 + TInt bufferLength = aBuffer.Length();
1.46 + __ASSERT_ALWAYS(aPos >=0 && aPos <= bufferLength, User::Leave(KErrArgument));
1.47 +
1.48 + // Skip blank lines
1.49 + while (aPos < bufferLength)
1.50 + {
1.51 + TChar c = aBuffer[aPos];
1.52 + if (c != '\r' && c != '\n')
1.53 + {
1.54 + break;
1.55 + }
1.56 + aPos++;
1.57 + }
1.58 +
1.59 + // Find the position of the next delimter
1.60 + TInt endPos = aPos;
1.61 + while (endPos < bufferLength)
1.62 + {
1.63 + TChar c = aBuffer[endPos];
1.64 + if (c == '\n' || c == '\r') // Find end of line
1.65 + {
1.66 + break;
1.67 + }
1.68 + endPos++;
1.69 + }
1.70 +
1.71 + if (endPos != aPos)
1.72 + {
1.73 + TInt tokenLen = endPos - aPos;
1.74 + aLine.Set(&aBuffer[aPos], tokenLen);
1.75 + }
1.76 + else
1.77 + {
1.78 + lineIdentified = EFalse; // End of buffer
1.79 + }
1.80 +
1.81 + aPos = endPos;
1.82 + return lineIdentified;
1.83 + }
1.84 +
1.85 +/*
1.86 + * Recursively deletes all folders in the path (as long as they are empty)
1.87 + *
1.88 + * @param aFs Connected filesystem session
1.89 + * @param aPath Fully qualified path to start the recursive delete
1.90 + */
1.91 +EXPORT_C void DeletePathIfEmpty(RFs& aFs, const TDesC& aPath)
1.92 + {
1.93 + TParse path;
1.94 + path.Set(aPath,NULL,NULL);
1.95 +
1.96 + if (path.PathPresent())
1.97 + {
1.98 + while ((aFs.RmDir(path.DriveAndPath()) == KErrNone) && (path.PopDir() == KErrNone))
1.99 + ;
1.100 + }
1.101 + }
1.102 +
1.103 +} // namespace MiscUtil