glib/glibbackend/src/getProgPath.cpp
author William Roberts <williamr@symbian.org>
Thu, 22 Jul 2010 16:48:56 +0100
branchGCC_SURGE
changeset 45 4b03adbd26ca
parent 18 47c74d1534e1
parent 31 ce057bb09d0b
permissions -rw-r--r--
Catchup to latest Symbian^4

/*
* Copyright (c) 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: 
*
*/


#include "glibbackend.h"
#include <e32std.h>
#include <string.h>
#include <stdlib.h>

extern "C" EXPORT_C char *getProgPath(char *progName)
{
	TText16 iName16[KMaxFileName];
	char *progPath;
	int pathLength;
	RProcess iProcess;
	char replacePath[KMaxFileName];
	
	/* replace / with // */
	strcpy(replacePath,progName);
	char *temp = strchr(replacePath,'/');
	while (temp)
	{
		*temp = '\\';
		temp = strchr(replacePath,'/');
	} // end while
	
	//convert narrow chars to wide chars
	mbstowcs((wchar_t *)iName16, replacePath, strlen(replacePath)+1);
	
	//create TDesC to pass to RProcess.Create()
	TBuf16<KMaxFileName> iCmdName16(iName16);
	_LIT(KArg,"");
	
	// Check if Create if successful. If not successful
	// the executable by that name does not exits. Hence,
	// return NULL. 
	if(iProcess.Create(iCmdName16,KArg))
		progPath = NULL;
	else
	{
		// If successful, convert from TDesC to narrow chars and 
		// return.
		TFileName fileName = iProcess.FileName();
		iProcess.Kill(0);
		iProcess.Close();
		
		pathLength = fileName.Length();
		
		progPath = (char *)malloc(pathLength + 1);
		
		if(progPath == NULL)
			return NULL;
		
		for(int i=0;i < pathLength;i++)
		{
			progPath[i] = fileName[i];
		} // end for 
		
		progPath[pathLength] = '\0';
	
	} // end if
	return progPath;
}