author | sl |
Tue, 10 Jun 2014 14:32:02 +0200 | |
changeset 1 | 260cb5ec6c19 |
permissions | -rw-r--r-- |
sl@0 | 1 |
// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). |
sl@0 | 2 |
// All rights reserved. |
sl@0 | 3 |
// This component and the accompanying materials are made available |
sl@0 | 4 |
// under the terms of "Eclipse Public License v1.0" |
sl@0 | 5 |
// which accompanies this distribution, and is available |
sl@0 | 6 |
// at the URL "http://www.eclipse.org/legal/epl-v10.html". |
sl@0 | 7 |
// |
sl@0 | 8 |
// Initial Contributors: |
sl@0 | 9 |
// Nokia Corporation - initial contribution. |
sl@0 | 10 |
// |
sl@0 | 11 |
// Contributors: |
sl@0 | 12 |
// |
sl@0 | 13 |
// Description: |
sl@0 | 14 |
// Name : system.cpp |
sl@0 | 15 |
// Part of : libc library |
sl@0 | 16 |
// executes a given command/executable. |
sl@0 | 17 |
// |
sl@0 | 18 |
|
sl@0 | 19 |
|
sl@0 | 20 |
|
sl@0 | 21 |
#include <stdlib_r.h> //mbstowcs |
sl@0 | 22 |
#include "sysreent.h" //_wsystem_r |
sl@0 | 23 |
#include <errno.h> |
sl@0 | 24 |
#include <string.h> |
sl@0 | 25 |
|
sl@0 | 26 |
extern "C" { |
sl@0 | 27 |
|
sl@0 | 28 |
#define MAXPATHLEN 260 /* E32STD.H: KMaxFullName + 4 to avoid data loss */ |
sl@0 | 29 |
|
sl@0 | 30 |
int _system_r (struct _reent *r, const char* cmd); |
sl@0 | 31 |
|
sl@0 | 32 |
/* |
sl@0 | 33 |
Execute command. |
sl@0 | 34 |
*/ |
sl@0 | 35 |
|
sl@0 | 36 |
EXPORT_C int system (const char* cmd) |
sl@0 | 37 |
{ |
sl@0 | 38 |
return _system_r (_REENT,cmd); |
sl@0 | 39 |
} |
sl@0 | 40 |
|
sl@0 | 41 |
/* |
sl@0 | 42 |
A reentrant version of system(). |
sl@0 | 43 |
*/ |
sl@0 | 44 |
int _system_r (struct _reent *r, const char* cmd) |
sl@0 | 45 |
{ |
sl@0 | 46 |
wchar_t wcmd[MAXPATHLEN+1]; |
sl@0 | 47 |
|
sl@0 | 48 |
if (cmd==0) |
sl@0 | 49 |
{ |
sl@0 | 50 |
return 1; // special case, says that we do support system(). |
sl@0 | 51 |
} |
sl@0 | 52 |
|
sl@0 | 53 |
if(strlen(cmd) > MAXPATHLEN) |
sl@0 | 54 |
{ |
sl@0 | 55 |
errno = ENAMETOOLONG; |
sl@0 | 56 |
return -1; |
sl@0 | 57 |
} |
sl@0 | 58 |
|
sl@0 | 59 |
if (((size_t)-1 != mbstowcs(wcmd, cmd, MAXPATHLEN))) |
sl@0 | 60 |
return _wsystem_r(&r->_errno, wcmd); |
sl@0 | 61 |
r->_errno = EILSEQ; |
sl@0 | 62 |
return -1; |
sl@0 | 63 |
} |
sl@0 | 64 |
|
sl@0 | 65 |
} // extern "C" |