diff -r 000000000000 -r 2c201484c85f cryptomgmtlibs/securitytestfw/test/testhandler2/t_bacline.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cryptomgmtlibs/securitytestfw/test/testhandler2/t_bacline.cpp Wed Jul 08 11:25:26 2009 +0100 @@ -0,0 +1,132 @@ +/* +* Copyright (c) 1997-2009 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: +* +*/ + + +#include "t_bacline.h" + + +CCommandLineArguments* CCommandLineArguments::NewLC() +/** Allocates and constructs a command line arguments parser, putting the returned +pointer onto the cleanup stack. The function leaves if there is insufficient +memory. + +@return The command line arguments parser. */ + { + CCommandLineArguments* self=new (ELeave) CCommandLineArguments; + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +CCommandLineArguments* CCommandLineArguments::NewL() +/** Allocates and constructs a command line arguments parser. The function leaves +if there is insufficient memory. + +@return The command line arguments parser. */ + { + CCommandLineArguments* self=CCommandLineArguments::NewLC(); + CleanupStack::Pop(); + return self; + } + +CCommandLineArguments::~CCommandLineArguments() +/** Frees resources prior to destruction. */ + { + delete iArgs; + } + +CCommandLineArguments::CCommandLineArguments() + { + } + +void CCommandLineArguments::ConstructL() + { + // allocate args array + iArgs=new (ELeave) CArrayFixFlat (10); + RProcess me; + // get raw command line + User::CommandLine(iCommandLine); + iFileName=me.FileName(); + // scan for each argument + TText* out=(TText*) iCommandLine.Ptr(); + const TText* scan=iCommandLine.Ptr(); + const TText* end=scan+iCommandLine.Length(); + while (scan < end) // scan one argument + { + while (scan < end && *scan==' ') // skip leading space + scan++; + if (scan == end) // ignore if blank + break; + TBool quoted=*scan=='\"'; // note leading quote + if (quoted) + scan++; + TText* start=out; // note start in output + if (!quoted) // if not quoted, scan for blank + { + while (scan < end && *scan!=' ') + *out++ = *scan++; + } + else // quoted, scan for quote + { + for (;;) // one quote-or-double sequence + { + while (scan < end && *scan!='\"') // all up to quote + *out++ = *scan++; + if (scan < end) // skip quote + scan++; + if (scan < end && *scan=='\"') // transfer if quote is doubled + *out++ = *scan++; + else // finished this arg + break; + } + } + TPtrC arg(start, out-start); + iArgs->AppendL(arg); + } + } + + +TPtrC CCommandLineArguments::Arg(TInt aArg) const +/** Returns a non-modifiable pointer descriptor representing the specified command-line +argument. + +Arg(0) is the file name as specified on the command line. Arg(1), Arg(2) etc. +are the arguments specified to the command. + +The pointer descriptor is valid throughout the lifetime of the CCommandLineArguments +object. If you wish to retain argument values after the CCommandLineArguments +object is destroyed, you should copy the argument data into a different object. + +@param aArg The index of the desired argument. This number must be less than +Count(). Specify 0 for the name used to invoke the process. Specify 1, 2 etc. +for the arguments. +@return Non-modifiable pointer descriptor to the specified argument text. */ + { + if (aArg > 0 ) // a normal argument + return iArgs->operator[](aArg-1); + else // process name + return TPtrC(iFileName); + } + +TInt CCommandLineArguments::Count() const +/** Returns the number of command line arguments, including the program name. + +@return The number of command line arguments, plus one for the program name. +Returns 1, if no arguments are specified. */ + { + return iArgs->Count()+1; + }