genericopenlibs/cstdlib/INC/SYSIF.H
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/genericopenlibs/cstdlib/INC/SYSIF.H	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,228 @@
+// Copyright (c) 1998-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 <e32std.h>
+#include <e32base.h>
+#include <f32file.h>
+#include <es_sock.h>
+#include "ENVIRON.H"
+#include <stdlib.h>
+#include <c32comm.h>
+
+
+class MSystemInterface
+/**
+@internalComponent
+*/
+	{
+public:
+	virtual MSystemInterface& Clone()=0;
+	virtual void Release()=0;
+	virtual void TerminateProcess(int status)=0;
+
+	virtual int dup (int fid, int& anErrno)=0;
+	virtual int dup2 (int fid, int fid2, int& anErrno)=0;
+	virtual int open (const wchar_t* name, int mode, int perms, int& anErrno)=0;
+	virtual int read (int fid, char* buf, unsigned long len, int& anErrno)=0;
+	virtual int write (int fid, const char* buf, unsigned long len, int& anErrno)=0;
+	virtual int fsync (int fid, int& anErrno)=0;
+	virtual int close (int fid, int& anErrno)=0;
+	virtual int lseek (int fid, int offset, int whence, int& anErrno)=0;
+	virtual int fstat (int fid, struct stat* st, int& anErrno)=0;
+	virtual int ioctl (int fid, int cmd, void* param, int& anErrno)=0;
+	virtual int ioctl (int fid, int cmd, void* param, TRequestStatus& aStatus, int& anErrno)=0;
+	virtual int ioctl_complete (int fid, int cmd, void* param, TRequestStatus& aStatus, int& anErrno)=0;
+	virtual int ioctl_cancel (int fid, int& anErrno)=0;
+
+	virtual wchar_t * getcwd (wchar_t * buf, unsigned long len, int& anErrno)=0;
+	virtual int chdir (const wchar_t* path, int& anErrno)=0;
+	virtual int mkdir (const wchar_t* path, int perms, int& anErrno)=0;
+	virtual int rmdir (const wchar_t* path, int& anErrno)=0;
+	virtual int chmod (const wchar_t* path, int perms, int& anErrno)=0;
+	virtual int unlink (const wchar_t* path, int& anErrno)=0;
+	virtual int stat (const wchar_t* name, struct stat* st, int& anErrno)=0;
+	virtual int rename (const wchar_t* oldname, const wchar_t* newname, int& anErrno)=0;
+
+	virtual TInt ResolvePath (TParse& aResult, const wchar_t* path, TDes* aFilename)=0;
+
+	virtual int socket (int family, int style, int protocol, int& anErrno)=0;
+	virtual int recvfrom (int fd, char* buf, unsigned long cnt, int flags, struct sockaddr* from, unsigned long* fromsize, int& anErrno)=0;
+	virtual int sendto (int fd, const char* buf, unsigned long cnt, int flags, struct sockaddr* to, unsigned long tosize, int& anErrno)=0;
+	virtual int shutdown (int fd, int how, int& anErrno)=0;
+	virtual int listen (int fd, int n, int& anErrno)=0;
+	virtual int accept (int fd, int& anErrno)=0;
+	virtual int bind (int fd, struct sockaddr* addr, unsigned long size, int& anErrno)=0;
+	virtual int connect (int fd, struct sockaddr* addr, unsigned long size, int& anErrno)=0;
+	virtual int sockname (int fd, struct sockaddr* addr, unsigned long* size, int anEnd, int& anErrno)=0;
+	virtual int getsockopt (int fd, int level, int opt, void* buf, unsigned long* len, int& anErrno)=0;
+	virtual int setsockopt (int fd, int level, int opt, void* buf, unsigned long len, int& anErrno)=0;
+
+	virtual wchar_t* getenv (const wchar_t* name)=0; 
+	virtual void unsetenv (const wchar_t* name)=0;
+	virtual int setenv (const wchar_t* name, const wchar_t* value, int rewrite, int& anErrno)=0;
+
+	virtual int popen3 (const wchar_t *file, const wchar_t *cmd, const wchar_t *mode, wchar_t** envp, int fids[3], int& anErrno)=0;
+	virtual int waitpid (int pid, int* status, int options, int& anErrno)=0;
+	};
+
+class CFileDescBase;
+class CFileTable
+/**
+@internalComponent
+*/
+	{
+public:
+	CFileTable();
+	~CFileTable();
+
+	void InitL();
+	void Close();
+	void Default(CFileDescBase* aConsole);
+	TInt Reserve();
+	TInt Attach(TInt aFid, CFileDescBase* aFile);
+	TInt Detach(TInt aFid, CFileDescBase*& aDetached);
+	TInt At(TInt aFid, CFileDescBase*& aFound) const;
+	TInt Reserve(TInt aFids[3]);
+	TInt Detach(TInt aFids[3]);
+
+	int dup (int fid, int& anErrno);
+	int dup2 (int fid, int fid2, int& anErrno);
+//	int open (const wchar_t* name, int mode, int perms, int& anErrno, RFs& aFs);
+	int open (const wchar_t* name, int mode, int perms, int& anErrno, RSessionBase& aFs);
+	int close (int fid, int& anErrno);
+	
+	int userclose (int fid, int& anErrno);
+
+	int lseek (int fid, int offset, int whence, int& anErrno);
+	int fstat (int fid, struct stat* st, int& anErrno);
+	int socket (int family, int style, int protocol, int& anErrno, RSocketServ& aSs);
+	int listen (int fd, int n, int& anErrno);
+	int bind (int fd, TSockAddr& address, int& anErrno);
+	int sockname (int fd, TSockAddr& address, int anEnd, int& anErrno);
+	int getsockopt (int fd, int level, int opt, void* buf, unsigned long* len, int& anErrno);
+	int setsockopt (int fd, int level, int opt, void* buf, unsigned long len, int& anErrno);
+	int ioctlcomplete (int fid, int cmd, void* param, TRequestStatus& aStatus, int& anErrno);
+	int ioctlcancel (int fid, int& anErrno);
+
+	TInt Asynch (int fid, CFileDescBase*& aFile);
+	
+private:
+	CArrayPtrSeg<CFileDescBase> iFids;
+	TInt Dup(TInt& aFid);
+	TInt Dup2(TInt aFid, TInt aFid2);
+	void Release(TInt aFid);
+	};
+
+class PosixFilesystem
+/**
+@internalComponent
+*/
+	{
+public:
+	static wchar_t* getcwd (RFs& aFs, wchar_t* buf, unsigned long len, int& anErrno);
+	static int chdir (RFs& aFs, const wchar_t* path, int& anErrno);
+	static int mkdir (RFs& aFs, const wchar_t* path, int perms, int& anErrno);
+	static int rmdir (RFs& aFs, const wchar_t* path, int& anErrno);
+	static int chmod (RFs& aFs, const wchar_t* path, int perms, int& anErrno);
+	static int unlink (RFs& aFs, const wchar_t* path, int& anErrno);
+	static int stat (RFs& aFs, const wchar_t* name, struct stat* st, int& anErrno);
+	static int rename (RFs& aFs, const wchar_t* oldname, const wchar_t* newname, int& anErrno);
+	static TInt ResolvePath (RFs& aFs, TParse& aResult, const wchar_t* path, TDes* aFilename);
+	static TInt SetDefaultDir (RFs& aFs);
+	};
+
+NONSHARABLE_CLASS(CLocalSystemInterface) : public CBase, public MSystemInterface
+/**
+To make CleanupStack::PushL() and CleanupStack::Pop() work properly in the 2-phase constructor, 
+derivation order must be: public CBase, public MSystemInterface.
+
+@internalComponent
+*/
+	{
+public:
+	static CLocalSystemInterface* NewL();	
+	~CLocalSystemInterface();
+
+	virtual MSystemInterface& Clone();
+	virtual void Release();
+	virtual void TerminateProcess(int status);
+
+	virtual int dup (int fid, int& anErrno);
+	virtual int dup2 (int fid, int fid2, int& anErrno);
+	virtual int open (const wchar_t* name, int mode, int perms, int& anErrno);
+	virtual int read (int fid, char* buf, unsigned long len, int& anErrno);
+	virtual int write (int fid, const char* buf, unsigned long len, int& anErrno);
+	virtual int fsync (int fid, int& anErrno);
+	virtual int close (int fid, int& anErrno);
+	virtual int lseek (int fid, int offset, int whence, int& anErrno);
+	virtual int fstat (int fid, struct stat* st, int& anErrno);
+	virtual int ioctl (int fid, int cmd, void* param, int& anErrno);
+	virtual int ioctl (int fid, int cmd, void* param, TRequestStatus& aStatus, int& anErrno);
+	virtual int ioctl_complete (int fid, int cmd, void* param, TRequestStatus& aStatus, int& anErrno);
+	virtual int ioctl_cancel (int fid, int& anErrno);
+
+	virtual wchar_t* getcwd (wchar_t* buf, unsigned long len, int& anErrno);
+
+
+	virtual int chdir (const wchar_t* path, int& anErrno);
+	virtual int mkdir (const wchar_t* path, int perms, int& anErrno);
+	virtual int rmdir (const wchar_t* path, int& anErrno);
+	virtual int chmod (const wchar_t* path, int perms, int& anErrno);
+	virtual int unlink (const wchar_t* path, int& anErrno);
+	virtual int stat (const wchar_t* name, struct stat* st, int& anErrno);
+	virtual int rename (const wchar_t* oldname, const wchar_t* newname, int& anErrno);
+
+	virtual TInt ResolvePath (TParse& aResult, const wchar_t* path, TDes* aFilename);
+
+	virtual int socket (int family, int style, int protocol, int& anErrno);
+	virtual int recvfrom (int fd, char* buf, unsigned long cnt, int flags, struct sockaddr* from, unsigned long* fromsize, int& anErrno);
+	virtual int sendto (int fd, const char* buf, unsigned long cnt, int flags, struct sockaddr* to, unsigned long tosize, int& anErrno);
+	virtual int shutdown (int fd, int how, int& anErrno);
+	virtual int listen (int fd, int n, int& anErrno);
+	virtual int accept (int fd, int& anErrno);
+	virtual int bind (int fd, struct sockaddr* addr, unsigned long size, int& anErrno);
+	virtual int connect (int fd, struct sockaddr* addr, unsigned long size, int& anErrno);
+	virtual int sockname (int fd, struct sockaddr* addr, unsigned long* size, int anEnd, int& anErrno);
+	virtual int getsockopt (int fd, int level, int opt, void* buf, unsigned long* len, int& anErrno);
+	virtual int setsockopt (int fd, int level, int opt, void* buf, unsigned long len, int& anErrno);
+
+	virtual wchar_t* getenv (const wchar_t* name); 
+	virtual void unsetenv (const wchar_t* name);
+	virtual int setenv (const wchar_t* name, const wchar_t* value, int rewrite, int& anErrno);
+
+	virtual int popen3 (const wchar_t *file, const wchar_t *cmd, const wchar_t *mode, wchar_t** envp, int fids[3], int& anErrno);
+	virtual int waitpid (int pid, int* status, int options, int& anErrno);
+	
+private: 
+	CLocalSystemInterface();	
+	void ConstructL();		
+	
+private:
+	TInt iUseCount;
+	CFileTable iFids;
+	RFs iFs;
+	RSocketServ iSs;
+
+	RCommServ	iCs;
+	
+	CEnvironment iEnv;
+	};
+
+#include <sys/reent.h>
+/**
+@internalComponent
+*/
+inline MSystemInterface& Interface(struct _reent* r)
+	{ return (*REINTERPRET_CAST(MSystemInterface*,r->_system)); }