genericopenlibs/openenvcore/libc/src/creat.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 04 Oct 2010 02:56:42 +0300
changeset 68 ff3fc7722556
parent 0 e4d67989cc36
permissions -rw-r--r--
Revision: 201039 Kit: 201039

// 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 "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 <sys/errno.h>
#include <stdlib.h>
#include <fcntl.h>
#include "sysreent.h"

// -----------------------------------------------------------------------------
// Creat  :  Function that stub which 
 
// This function takes the system call number and that transforms
// controll to the respective routines that performs the task 
// requested .                                          
// Returns: -1: if the requested task fails 
//           0: if the requested task successfull
//  0x7FFFFFFF: if invalid system call.                   
// -----------------------------------------------------------------------------
//

extern "C" {

#define	MAXPATHLEN	260	/* E32STD.H: KMaxFullName + 4 to avoid data loss */
	
EXPORT_C int creat(const char* file, mode_t mode)
	{
	wchar_t _widename[MAXPATHLEN+1];
	
	if(!file)
		{
		errno = EFAULT ;
		return -1 ;//null file pointer
		}

	if ((size_t)-1 != mbstowcs(_widename, file, MAXPATHLEN))
		{
		return _open_r(&errno , _widename , O_CREAT | O_WRONLY | O_TRUNC , mode);  
		}
	else
		{
		errno = EILSEQ;
		return -1;	// Illegal Sequence of wide characters
		}
	}


EXPORT_C int wcreat(const wchar_t* file, mode_t mode)
	{
	if (file)
		{
		return _wopen_r(&errno , file , O_CREAT | O_WRONLY | O_TRUNC , mode);  
		}
	else
		{
		errno = EFAULT;
		return -1;	//null file pointer
		}
	}
}