--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/dbms/SPConv/cn_cmdparse.cpp Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,138 @@
+// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "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:
+// DBMS - security policy file tool
+//
+//
+
+#include "cn_cmdparse.h"
+
+/**
+*/
+inline CCommandLineArguments::CCommandLineArguments()
+ {
+ }
+
+/** 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* CCommandLineArguments::NewLC()
+ {
+ CCommandLineArguments* self=new (ELeave) CCommandLineArguments;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+/** Allocates and constructs a command line arguments parser. The function leaves
+if there is insufficient memory.
+
+@return The command line arguments parser. */
+CCommandLineArguments* CCommandLineArguments::NewL()
+ {
+ CCommandLineArguments* self=CCommandLineArguments::NewLC();
+ CleanupStack::Pop();
+ return self;
+ }
+
+/** Frees resources prior to destruction. */
+CCommandLineArguments::~CCommandLineArguments()
+ {
+ delete iArgs;
+ delete iCommandLine;
+ }
+
+/**
+Standard two-phase construction method.
+*/
+void CCommandLineArguments::ConstructL()
+ {
+ // allocate args array
+ iArgs=new (ELeave) CArrayFixFlat<TPtrC> (10);
+ // get raw command line
+ RProcess me;
+ iCommandLine=HBufC::NewL(User::CommandLineLength());
+ TPtr commandLine(iCommandLine->Des());
+ User::CommandLine(commandLine);
+ iFileName=me.FileName();
+ // scan for each argument
+ TText* out=CONST_CAST(TText*,iCommandLine->Ptr());
+ const TText* scan=out;
+ 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;
+ }
+ }
+ TPtr arg(start, out-start, out-start);
+ arg.UpperCase();
+ iArgs->AppendL(arg);
+ }
+ }
+
+
+/** 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. */
+TPtrC CCommandLineArguments::Arg(TInt aArg) const
+ {
+ if (aArg > 0 ) // a normal argument
+ return iArgs->operator[](aArg-1);
+ else // process name
+ return TPtrC(iFileName);
+ }
+
+/** 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. */
+TInt CCommandLineArguments::Count() const
+ {
+ return iArgs->Count()+1;
+ }