genericopenlibs/openenvcore/libc/src/uname.cpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/genericopenlibs/openenvcore/libc/src/uname.cpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,107 @@
+// Copyright (c) 2005-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:
+// Name        : uname.cpp
+// Part of     : LIBC
+// Contains the source for fchdir
+// Version     : 1.0
+//
+
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/utsname.h>
+#include <e32std.h>
+#include <e32cmn.h>
+#include <string.h>
+#include <errno.h>
+
+#define KValBuf	15
+
+/*
+The  uname function stores  NUL -terminated strings of information
+identifying the current system into the structure referenced by buf.
+
+The utsname structure is defined in the 
+
+#include <sys/utsname.h> header file, and contains the following members:
+sysname 	Name of the operating system implementation.
+nodename 	Network name of this machine.
+release 	Release level of the operating system.
+version 	Version level of the operating system.
+machine 	Machine hardware platform.
+
+Upon successful completion, a non-negative value shall be returned. 
+Otherwise, -1 shall be returned and errno set to indicate the error.
+
+*/
+extern "C" {
+EXPORT_C int uname(struct utsname *buf)
+	{
+	
+	char name[KMaxFileName], buffer[KValBuf];
+	size_t len = KMaxFileName;
+	char* retDest2 = NULL;
+	char* retDest4 = NULL;
+	
+	if(buf)
+		{
+		//sysname
+		char* retDest1 = strcpy(buf->sysname, "Symbian");
+		
+		//nodename
+		int retGetHostName = gethostname(name, len);
+		
+		if( !retGetHostName )
+			{
+			 retDest2 = strncpy (buf->nodename , name, SYS_NMLN);
+			 buf->nodename[SYS_NMLN-1] = '\0';
+			}
+		
+		
+		//Release
+		char* retDest3 = strcpy (buf->release , "\0");
+		
+		//Version
+		TVersion rett = User::Version();
+		int retNoOfBytes = sprintf(buffer, "%d:%d:%d", rett.iMajor, rett.iMinor, rett.iBuild);
+		if(retNoOfBytes)
+			{
+			retDest4 = strcpy (buf->version , buffer);	
+			}
+		
+		
+		//Machine
+		char* retDest5 = strcpy (buf->machine , "\0");
+		
+		
+		if((retDest1!=NULL)&&(retDest2!=NULL)&&(retDest3!=NULL)&&(retDest4!=NULL)&&(retDest5!=NULL))
+			{
+			return 0;	
+			}
+		else
+			{
+			errno = EINVAL;
+			return -1;
+			}
+			
+		}
+	else
+		{
+		errno = EINVAL;
+		return -1;
+		}
+	}
+} //extern "C"