--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/genericopenlibs/openenvcore/libc/test/testsysunistd/src/tsysunistdblocks.cpp Fri Jun 04 16:20:51 2010 +0100
@@ -0,0 +1,1488 @@
+/*
+* Copyright (c) 2002-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 "tsysunistd.h"
+
+// -----------------------------------------------------------------------------
+//Function Name :ftruncate_fileL
+//API Tested :ftruncate
+//API Description:Truncates the given file (using file descriptor) to the
+//length specified.
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::ftruncate_file( )
+ {
+ // Print to UI
+ _LIT( KFailed, "Failed" );
+ _LIT( KFtruncate, "In ftruncate" );
+ // Print to log file
+ INFO_PRINTF1( KFtruncate );
+ char array[KMAXCHARS];
+
+ char ch = 'h';
+ TInt i = 0;
+ TInt retVal=KErrGeneral;
+ TInt retVal2;
+ off_t retSize;
+ TInt retrn = KErrGeneral;
+
+ struct stat buf;
+
+ for(i = 0; i < KMAXCHARS - 1; i++)
+ {
+ array[i] = ch;
+ }
+
+ array[i] = '\0';
+
+ int fp = open("C:\\test_ftruncate.txt", O_RDWR|O_CREAT);
+ int fd;
+ if(fp != -1)
+ {
+ INFO_PRINTF2(_L("fp: %d"),fp );
+ size_t size = write( fp, array, KMAXCHARS );
+ INFO_PRINTF2(_L("Size of file after writing : %d"),size );
+ INFO_PRINTF2(_L("fp: %d"),fp);
+ if((fp != -1) && (size == KMAXCHARS))
+ {
+ int sizebytwo = size/2;
+ INFO_PRINTF2(_L("sizebytwo before ftruncate %d"),sizebytwo );
+ retVal = ftruncate( fp, sizebytwo );
+ INFO_PRINTF2(_L("retVal from ftruncate %d"),retVal);
+ close(fp);
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ INFO_PRINTF1(_L("else for retVal couldn open file"));
+ retrn = KErrGeneral;
+ }
+ fd = open("C:\\test_ftruncate.txt", O_RDONLY);
+ if((fd != -1) && (!retVal))
+ {
+ INFO_PRINTF2(_L("fd: %d"),fd );
+ retVal2 = fstat( fd, &buf );
+ if ( !retVal2 )
+ {
+ retSize = buf.st_size;
+ if( retSize == (size/2 ) )
+ {
+ INFO_PRINTF2(_L("Passed -> retSize = %d"),retSize);
+ INFO_PRINTF2(_L("The errno value is %d\n"),errno);
+ retrn = KErrNone;
+ }
+ else
+ {
+ INFO_PRINTF2(_L("Failed -> retSize = %d"),retSize);
+ INFO_PRINTF2(_L("The errno value is %d\n"),errno);
+ retrn = KErrGeneral;
+ }
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ INFO_PRINTF1(_L("fstat failed"));
+ retrn = KErrGeneral;
+ }
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ INFO_PRINTF1(_L("Couldn open file after truncate"));
+ INFO_PRINTF2(_L("The errno value is %d\n"),errno);
+ retrn = KErrGeneral;
+ }
+ close(fd);
+ int ret = remove("C:\\test_ftruncate.txt");
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Couldn create/open"));
+ INFO_PRINTF2(_L("The errno value is %d\n"),errno);
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+
+ return retrn ;
+ }
+
+
+// -----------------------------------------------------------------------------
+//Function Name :ftruncate_dirL
+//API Tested :ftruncate
+//API Description:Truncates the given file (using file descriptor) to the
+//length specified.
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::ftruncate_dir( )
+ {
+
+ // Print to UI
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KFtruncate, "In ftruncate" );
+ INFO_PRINTF1( KFtruncate );
+ TInt retrn = KErrGeneral;
+
+ int mkdr = mkdir("C:\\test1", S_IWUSR);
+ if( !mkdr )
+ {
+ int fp = open("C:\\test1", O_RDONLY);
+ if( fp != -1 )
+ {
+ TInt retVal;
+ size_t size = 10;
+
+ retVal = ftruncate( fp, size );
+
+ int cls = close(fp);
+ if( !cls )
+ {
+ int rmdr = rmdir("C:\\test1");
+ }
+ if( !retVal )
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ else
+ {
+ INFO_PRINTF1( KPassed);
+ retrn = KErrNone;
+ }
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ INFO_PRINTF2(_L("The errno value is %d\n"),errno);
+ retrn = KErrGeneral;
+ }
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ INFO_PRINTF2(_L("The errno value is %d\n"),errno);
+ retrn = KErrGeneral;
+ }
+ return retrn ;
+ }
+
+// -----------------------------------------------------------------------------
+//Function Name :ftruncate_numL
+//API Tested :ftruncate
+//API Description:Truncates the given file (using file descriptor) to the
+//length specified.
+// -----------------------------------------------------------------------------
+
+
+TInt CTestSysunistd::ftruncate_num( )
+ {
+
+ // Print to UI
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KFtruncate, "In ftruncate" );
+ INFO_PRINTF1( KFtruncate );
+ TInt retrn = KErrGeneral;
+
+ TInt retVal;
+ size_t size = 10;
+
+ retVal = ftruncate( 3, size );
+
+ if( !retVal )
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ else
+ {
+ INFO_PRINTF1( KPassed );
+ retrn = KErrNone;
+ }
+ return retrn ;
+ }
+
+// -----------------------------------------------------------------------------
+//Function Name :ftruncate_sizL
+//API Tested :ftruncate
+//API Description:Truncates the given file (using file descriptor) to the
+//length specified.
+// -----------------------------------------------------------------------------
+
+
+TInt CTestSysunistd::ftruncate_siz( )
+ {
+
+ // Print to UI
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KFtruncate, "In ftruncate" );
+ INFO_PRINTF1( KFtruncate );
+
+ char array[KMAXCHARS];
+
+ char ch = 'h';
+ TInt i = 0;
+ TInt retVal;
+ TInt retrn = KErrGeneral;
+
+ for(i = 0; i < KMAXCHARS - 1; i++)
+ {
+ array[i] = ch;
+ }
+
+ array[i] = '\0';
+
+ int fp = open("C:\\test_siz.txt", O_RDWR|O_CREAT);
+ if(fp != -1)
+ {
+ size_t size = write( fp, array, KMAXCHARS );
+ retVal = ftruncate( fp, size*2 );
+ if(retVal == -1 )
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ else
+ {
+ INFO_PRINTF1( KPassed );
+ retrn = KErrNone;
+ }
+ close(fp);
+ int ret = remove("C:\\test_siz.txt");
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ INFO_PRINTF2(_L("The errno value is %d\n"),errno);
+ retrn = KErrGeneral;
+ }
+ return retrn ;
+ }
+// -----------------------------------------------------------------------------
+//Function Name :fchdir_dirL
+//API Tested :fchdir
+//API Description:The fchdir() function shall be equivalent to chdir() except that
+//the directory that is to be the new current working directory is
+//specified by the file descriptor fildes.
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::fchdir_dir( )
+ {
+
+ // Print to UI
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KFchdir, "In fchdir" );
+ INFO_PRINTF1( KFchdir );
+ TInt retrn = KErrGeneral;
+
+ TInt retVal;
+
+ int mkdr = mkdir("C:\\test_dir", S_IWUSR);
+ if( !mkdr )
+ {
+ int opn = open("C:\\test_dir", O_RDONLY);
+ if( opn != -1 )
+ {
+ retVal = fchdir( opn );
+
+ if( !retVal )
+ {
+ INFO_PRINTF1( KPassed );
+ retrn = KErrNone ;
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ int cls = close(opn);
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ INFO_PRINTF2(_L("The errno value is %d\n"),errno);
+ retrn = KErrGeneral;
+ }
+ rmdir("C:\\test_dir");
+
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ INFO_PRINTF2(_L("The errno value is %d\n"),errno);
+ retrn = KErrGeneral;
+ }
+ return retrn ;
+ }
+// -----------------------------------------------------------------------------
+//Function Name :fchdir_fileL
+//API Tested :fchdir
+//API Description:The fchdir() function shall be equivalent to chdir() except that
+//the directory that is to be the new current working directory is
+//specified by the file descriptor fildes.
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::fchdir_file( )
+ {
+
+ // Print to UI
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KFchdir, "In fchdir" );
+ INFO_PRINTF1( KFchdir );
+ TInt retrn = KErrGeneral;
+
+ TInt retVal;
+
+ int opn = open("C:\\test_fchdir.txt", O_RDWR|O_CREAT);
+ if( opn != -1 )
+ {
+
+ retVal = fchdir( opn );
+
+ if( !retVal )
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ else
+ {
+ INFO_PRINTF1( KPassed );
+ retrn = KErrNone;
+ }
+ close( opn );
+ int ret = remove("C:\\test_fchdir.txt");
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ return retrn ;
+ }
+// -----------------------------------------------------------------------------
+//Function Name :fchdir_numL
+//API Tested :fchdir
+//API Description:The fchdir() function shall be equivalent to chdir() except that
+//the directory that is to be the new current working directory is
+//specified by the file descriptor fildes.
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::fchdir_num( )
+ {
+
+ // Print to UI
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KFchdir, "In fchdir" );
+ // Print to log file
+ INFO_PRINTF1( KFchdir );
+ TInt retrn = KErrGeneral;
+
+ TInt retVal;
+
+ retVal = fchdir( 2 );
+
+ if( !retVal )
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ else
+ {
+ INFO_PRINTF1( KPassed );
+ retrn = KErrNone;
+ }
+ return retrn ;
+ }
+// -----------------------------------------------------------------------------
+//Function Name :fdatasync_fileL
+//API Tested :fdatasync
+//API Description:The fdatasync() function shall force all currently queued I/O
+//operations associated with the file indicated by file descriptor fildes to the
+//synchronized I/O completion state.
+// -----------------------------------------------------------------------------
+
+
+TInt CTestSysunistd::fdatasync_file( )
+ {
+
+ int fd ;
+ TBuf8<50> string ;
+ TPtrC String ;
+ TInt Expected ;
+ _LIT( KString, "Parameter1" );
+ TBool res = GetStringFromConfig(ConfigSection(), KString, String );
+ if(!res)
+ {
+ _LIT(Kerr , " Failed to read input file name from ini file ") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+
+ string.Copy(String) ;
+
+ char *file = (char *) string.Ptr() ;
+ file[string.Length()] = '\0' ;
+
+
+ _LIT( KExpected, "Parameter2" );
+ res = GetIntFromConfig(ConfigSection(), KExpected, Expected);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read expected value from ini file.") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+
+ _LIT( KFdatasync, "In fdatasync" );
+ INFO_PRINTF1( KFdatasync );
+
+ if(Expected < 0)
+ {
+ fdatasync(-1) ;
+
+ if(errno != EBADF)
+ {
+ _LIT(Kerr , "Failed to set errno value ") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ return KErrNone ;
+ }
+
+ if((fd = open(file , O_CREAT | O_RDWR , 0666)) < 0)
+ {
+ _LIT(Kopen , "Failed to create file ") ;
+ INFO_PRINTF1(Kopen) ;
+ return KErrGeneral ;
+ }
+
+ if(fdatasync(fd) < 0)
+ {
+ _LIT(Kerr , "Fdatasync failed ") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ close(fd);
+ remove(file);
+ return KErrNone ;
+ }
+// -----------------------------------------------------------------------------
+//Function Name :getpagesizeL
+//API Tested :getpagesize
+//API Description:The function getpagesize() returns the number of bytes in a
+//page, where "page" defines the unit of data that is brought into memory at once
+//(ex: files are mapped in page-sized units).
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::getpagesizeL( )
+ {
+
+ // Print to UI
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KGetpagesize, "In getpagesize" );
+ INFO_PRINTF1( KGetpagesize );
+
+ int retVal = 0;
+ TInt retrn;
+
+ retVal = getpagesize();
+
+ if( retVal >= 0)
+ {
+ INFO_PRINTF1( KPassed );
+ retrn = KErrNone;
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ return retrn ;
+ }
+
+// -----------------------------------------------------------------------------
+//Function Name :getpriorityL
+//API Tested :getpriority
+//API Description:This function checks if the which and who parameters sent
+//are 'the process priority' and 'the current process' respectively,i.e. PROC_PROCESS
+//and 0 respectively. The function getpriority() shall ignore the values PRIO_PGRP,
+//PRIO_USER as the argument 'which' and any other value other than 0 for 'who' shall
+//not be considered.
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::getpriorityL( )
+ {
+
+ // Print to UI
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KGetpriority, "In getpriority" );
+ INFO_PRINTF1( KGetpriority );
+
+ int retVal = 0;
+ TInt retrn;
+ errno = 0;
+ retVal = getpriority(PRIO_PROCESS, 0);
+
+ if((retVal == -1) && (errno))
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ else
+ {
+ INFO_PRINTF1( KPassed );
+ retrn = KErrNone;
+ }
+
+ return retrn ;
+
+ }
+// -----------------------------------------------------------------------------
+//Function Name :getpriority_otherL
+//API Tested :getpriority
+//API Description:This function checks if the which and who parameters sent
+//are 'the process priority' and 'the current process' respectively,i.e. PROC_PROCESS
+//and 0 respectively. The function getpriority() shall ignore the values PRIO_PGRP,
+//PRIO_USER as the argument 'which' and any other value other than 0 for 'who' shall
+//not be considered.
+// -----------------------------------------------------------------------------
+
+
+TInt CTestSysunistd::getpriority_other( )
+ {
+
+ // Print to UI
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KGetpriority, "In getpriority" );
+ INFO_PRINTF1( KGetpriority );
+
+ int retVal = 0;
+ TInt retrn;
+ errno = 0;
+ TInt which;
+ TInt who;
+ _LIT( Kwhich, "Parameter1" );
+ TBool res = GetIntFromConfig(ConfigSection(), Kwhich, which);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read first parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ _LIT( Kwho, "Parameter2" );
+ res = GetIntFromConfig(ConfigSection(), Kwho, who);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read second parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+
+ retVal = getpriority(which, who);
+ if((retVal == -1) && (errno))
+ {
+ INFO_PRINTF1( KPassed );
+ retrn = KErrNone;
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ return retrn ;
+
+ }
+// -----------------------------------------------------------------------------
+//Function Name :setpriority_getL
+//API Tested :setpriority
+//API Description:This function setpriority() checks if the which and who
+//parameters sent are 'the process priority' and 'the current process' respectively,
+//i.e. PROC_PROCESS and 0 respectively.The function setpriority() shall ignore the
+//values PRIO_PGRP, PRIO_USER as the argument 'which' and any other value other than
+//0 for 'who' shall not be considered.
+// -----------------------------------------------------------------------------
+
+
+TInt CTestSysunistd::setpriority_get( )
+ {
+
+ // Print to UI
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KSetpriority, "In setpriority" );
+ INFO_PRINTF1( KSetpriority );
+ TInt prio_high, prio_low;
+ int retVal, retSet;
+ int retVal2 = -1, i;
+ TInt retrn=KErrNone;
+ errno = 0;
+
+ retVal = getpriority(PRIO_PROCESS, 0);
+
+ _LIT( Kprio_high, "Parameter1" );
+ TBool res = GetIntFromConfig(ConfigSection(), Kprio_high, prio_high);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read first parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ _LIT( Kprio_low, "Parameter2" );
+ res = GetIntFromConfig(ConfigSection(), Kprio_low, prio_low);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read second parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ for(i = prio_low;i> prio_high;i--)
+ {
+ if((retVal == -1) && (errno))
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ else
+ {
+ retSet = setpriority(PRIO_PROCESS, 0, retVal+i);
+ if(!retSet)
+ {
+ retVal2 = getpriority(PRIO_PROCESS, 0);
+ if(retVal2 == retVal+i)
+ {
+ INFO_PRINTF1( KPassed );
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ }
+ }
+ retrn = KErrNone;
+ return retrn ;
+ }
+
+// -----------------------------------------------------------------------------
+//Function Name :setpriority_highL
+//API Tested :setpriority
+//API Description:This function setpriority() checks if the which and who
+//parameters sent are 'the process priority' and 'the current process' respectively,
+//i.e. PROC_PROCESS and 0 respectively.The function setpriority() shall ignore the
+//values PRIO_PGRP, PRIO_USER as the argument 'which' and any other value other than
+//0 for 'who' shall not be considered.
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::setpriority_high( )
+ {
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KSetpriority, "In setpriority" );
+ INFO_PRINTF1( KSetpriority );
+ int retVal = 0, i;
+ TInt retrn;
+ errno = 0;
+ TInt prio_high_end;
+ TInt prio_high_start;
+
+ _LIT( Kprio_high_start, "Parameter1" );
+ TBool res = GetIntFromConfig(ConfigSection(), Kprio_high_start, prio_high_start);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read first parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ _LIT( Kprio_high_end, "Parameter2" );
+ res = GetIntFromConfig(ConfigSection(), Kprio_high_end, prio_high_end);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read second parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ for (i = prio_high_start; i >= prio_high_end; i--)
+ {
+ retVal = setpriority(PRIO_PROCESS, 0, i);
+ if((retVal == -1) && (errno == ENOSYS))
+ {
+ INFO_PRINTF1( KPassed );
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ }
+ retrn = KErrNone;
+ return retrn ;
+ }
+
+// -----------------------------------------------------------------------------
+//Function Name :setpriority_other_lowerL
+//API Tested :setpriority
+//API Description:This function setpriority() checks if the which and who
+//parameters sent are 'the process priority' and 'the current process' respectively,
+//i.e. PROC_PROCESS and 0 respectively.The function setpriority() shall ignore the
+//values PRIO_PGRP, PRIO_USER as the argument 'which' and any other value other than
+//0 for 'who' shall not be considered.
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::setpriority_other_lower( )
+ {
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KSetpriority, "In setpriority" );
+
+ INFO_PRINTF1( KSetpriority );
+ int retVal = 0, i;
+ TInt retrn;
+ errno = 0;
+ TInt prio_low_end;
+ TInt prio_low_start;
+
+ _LIT( Kprio_low_start, "Parameter1" );
+ TBool res = GetIntFromConfig(ConfigSection(), Kprio_low_start, prio_low_start);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read first parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ _LIT( Kprio_low_end, "Parameter2" );
+ res = GetIntFromConfig(ConfigSection(), Kprio_low_end, prio_low_end);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read second parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ for (i = prio_low_start; i <= prio_low_end; i++)
+ {
+ retVal = setpriority(PRIO_PROCESS, 0, i);
+ if(retVal == 0)
+ {
+ int retGet = getpriority(PRIO_PROCESS, 0);
+ if (retGet == LOWER_LIMIT_PRIORITY_LOWEST )
+ {
+ INFO_PRINTF1( KPassed );
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ }
+ retrn = KErrNone;
+ return retrn ;
+ }
+
+// -----------------------------------------------------------------------------
+//Function Name :setpriority_other_higherL
+//API Tested :setpriority
+//API Description:This function setpriority() checks if the which and who
+//parameters sent are 'the process priority' and 'the current process' respectively,
+//i.e. PROC_PROCESS and 0 respectively.The function setpriority() shall ignore the
+//values PRIO_PGRP, PRIO_USER as the argument 'which' and any other value other than
+//0 for 'who' shall not be considered.
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::setpriority_other_higher( )
+ {
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KSetpriority, "In setpriority" );
+
+ INFO_PRINTF1( KSetpriority );
+ int retVal = 0, i;
+ TInt retrn;
+ errno = 0;
+ TInt prio_high_end;
+ TInt prio_high_start;
+
+ _LIT( Kprio_high_start, "Parameter1" );
+ TBool res = GetIntFromConfig(ConfigSection(), Kprio_high_start, prio_high_start);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read first parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ _LIT( Kprio_high_end, "Parameter2" );
+ res = GetIntFromConfig(ConfigSection(), Kprio_high_end, prio_high_end);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read second parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ for (i = prio_high_start; i >= prio_high_end; i--)
+ {
+ retVal = setpriority(PRIO_PROCESS, 0, i);
+ if(retVal == 0)
+ {
+ int retGet = getpriority(PRIO_PROCESS, 0);
+ if (retGet == UPPER_LIMIT_PRIORITY_ABOVE_NORMAL )
+ {
+ INFO_PRINTF1( KPassed );
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ }
+ retrn = KErrNone;
+ return retrn ;
+ }
+
+// -----------------------------------------------------------------------------
+//Function Name :setpriority_other
+//API Tested :setpriority
+//API Description:This function setpriority() checks if the which and who
+//parameters sent are 'the process priority' and 'the current process' respectively,
+//i.e. PROC_PROCESS and 0 respectively.The function setpriority() shall ignore the
+//values PRIO_PGRP, PRIO_USER as the argument 'which' and any other value other than
+//0 for 'who' shall not be considered.
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::setpriority_other( )
+ {
+
+ // Print to UI
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KSetpriority, "In setpriority" );
+
+ INFO_PRINTF1( KSetpriority );
+
+ int retVal = 0, value;
+ TInt retrn;
+ errno = 0;
+ TInt which;
+ TInt who;
+
+ _LIT( Kwhich, "Parameter1" );
+ TBool res = GetIntFromConfig(ConfigSection(), Kwhich, which);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read first parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ _LIT( Kwho, "Parameter2" );
+ res = GetIntFromConfig(ConfigSection(), Kwho, who);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read second parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ _LIT( Kvalue, "Parameter3" );
+ res = GetIntFromConfig(ConfigSection(), Kvalue, value);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read third parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ retVal = setpriority(which, who, value);
+ if((retVal == -1) && (errno))
+ {
+ INFO_PRINTF1( KPassed );
+ retrn = KErrNone;
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ return retrn ;
+ }
+// -----------------------------------------------------------------------------
+//Function Name :nice_less_than_lowestL
+//API Tested :nice
+//API Description:The function nice() increases or decreases the priority value
+//by adding the value 'incr' to the current priority.It internally uses getpriority and
+//setpriority to set the priority to new value.
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::nice_less_than_lowest( )
+ {
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KSetpriority, "In setpriority" );
+
+ INFO_PRINTF1( KSetpriority );
+ int retVal = 0, i;
+ TInt retrn;
+ errno = 0;
+ TInt prio_low_end;
+ TInt prio_low_start;
+
+ _LIT( Kprio_low_start, "Parameter1" );
+ TBool res = GetIntFromConfig(ConfigSection(), Kprio_low_start, prio_low_start);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read first parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ _LIT( Kprio_low_end, "Parameter2" );
+ res = GetIntFromConfig(ConfigSection(), Kprio_low_end, prio_low_end);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read second parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ errno = 0;
+ for (i = prio_low_start; i >= prio_low_end; i--)
+ {
+ retVal = nice(i);
+ if((retVal == -1)&&(errno))
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ else
+ {
+ INFO_PRINTF1( KPassed );
+ }
+ }
+ retrn = KErrNone;
+ return retrn ;
+ }
+
+// -----------------------------------------------------------------------------
+//Function Name :nice_within_rangeL
+//API Tested :nice
+//API Description:The function nice() increases or decreases the priority value
+//by adding the value 'incr' to the current priority.It internally uses getpriority and
+//setpriority to set the priority to new value.
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::nice_within_range( )
+ {
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KSetpriority, "In nice" );
+
+ INFO_PRINTF1( KSetpriority );
+ int retVal = 0, i;
+ TInt retrn;
+ errno = 0;
+ TInt prio_end;
+ TInt prio_start;
+
+ _LIT( Kprio_start, "Parameter1" );
+ TBool res = GetIntFromConfig(ConfigSection(), Kprio_start, prio_start);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read first parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ _LIT( Kprio_end, "Parameter2" );
+ res = GetIntFromConfig(ConfigSection(), Kprio_end, prio_end);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read second parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ errno = 0;
+ for (i = prio_start; i >= prio_end; i--)
+ {
+ retVal = nice(i);
+ if((retVal == -1)&&(errno))
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ else
+ {
+ INFO_PRINTF1( KPassed );
+ }
+ }
+ retrn = KErrNone;
+ return retrn ;
+ }
+// -----------------------------------------------------------------------------
+//Function Name :nice_more_than_highestL
+//API Tested :nice
+//API Description:The function nice() increases or decreases the priority value
+//by adding the value 'incr' to the current priority.It internally uses getpriority and
+//setpriority to set the priority to new value.
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::nice_more_than_highest( )
+ {
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KSetpriority, "In nice" );
+ INFO_PRINTF1( KSetpriority );
+ int retVal = 0, i;
+ TInt retrn;
+ errno = 0;
+ TInt prio_high_end;
+ TInt prio_high_start;
+
+ _LIT( Kprio_high_start, "Parameter1" );
+ TBool res = GetIntFromConfig(ConfigSection(), Kprio_high_start, prio_high_start);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read first parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ _LIT( Kprio_high_end, "Parameter2" );
+ res = GetIntFromConfig(ConfigSection(), Kprio_high_end, prio_high_end);
+ if(!res)
+ {
+ _LIT(Kerr , "Failed to read second parameter from ini file") ;
+ INFO_PRINTF1(Kerr) ;
+ return KErrGeneral ;
+ }
+ errno = 0;
+
+ for (i = prio_high_start; i >= prio_high_end; i--)
+ {
+ retVal = nice(i);
+ if((retVal == -1)&&(errno))
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ else
+ {
+ INFO_PRINTF1( KPassed );
+ }
+ }
+ retrn = KErrNone;
+ return retrn ;
+ }
+
+// -----------------------------------------------------------------------------
+//Function Name :pathconf_validL
+//API Tested :pathconf
+//API Description:pathconf returns configuration option name
+//input --> _PC_XXXX_XXXX constants
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::pathconf_valid()
+ {
+ _LIT( KFailed, "Failed" );
+ TInt ret = KErrNone;
+
+ INFO_PRINTF1(_L("In pathconf_Test0L"));
+
+ int fp = open("C:\\test_pathconf1.txt", O_RDWR|O_CREAT);
+ if(fp != -1)
+ {
+ int n = pathconf("C:\\test_pathconf1.txt", _PC_LINK_MAX);
+
+ INFO_PRINTF2(_L("{Expected: (> _POSIX_LINK_MAX) } %d"), n);
+
+ if( n < _POSIX_LINK_MAX )
+ {
+ ret = KErrGeneral;
+ }
+
+ n = pathconf("C:\\test_pathconf1.txt", _PC_NAME_MAX);
+
+ INFO_PRINTF2(_L("{Expected: (> _POSIX_NAME_MAX) } %d"), n);
+
+ if( n < _POSIX_NAME_MAX )
+ {
+ ret = KErrGeneral;
+ }
+
+ n = pathconf("C:\\test_pathconf1.txt", _PC_PATH_MAX);
+
+ INFO_PRINTF2(_L("{Expected: (> _POSIX_PATH_MAX) } %d"), n);
+
+ if( n < _POSIX_PATH_MAX )
+ {
+ ret = KErrGeneral;
+ }
+
+ n = pathconf("C:\\test_pathconf1.txt", _PC_PIPE_BUF);
+
+ INFO_PRINTF2(_L("{Expected: (> _POSIX_PIPE_BUF) } %d"), n);
+
+ if( n < _POSIX_PIPE_BUF )
+ {
+
+ ret = KErrGeneral;
+ }
+
+ close(fp);
+ int retVal = remove("C:\\test_pathconf1.txt");
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ ret = KErrGeneral;
+ }
+ return ret;
+ }
+
+
+// -----------------------------------------------------------------------------
+//Function Name :pathconf_invalidL
+//API Tested :pathconf
+//API Description:pathconf sets EINVAL when invalid constant is the input
+//input --> _PC_XXXX_XXXX constants
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::pathconf_invalid()
+ {
+ TInt ret = KErrNone;
+ _LIT( KFailed, "Failed" );
+ INFO_PRINTF1(_L("In pathconf_Test1L"));
+
+
+ #define _PC_INV_CONST 100
+
+ errno = 0;
+ int fp = open("C:\\test_pathconf.txt", O_RDWR|O_CREAT);
+ if(fp != -1)
+ {
+ int n = pathconf("C:\\test_pathconf.txt", _PC_INV_CONST);
+
+ INFO_PRINTF2(_L("{Expected: -1 } %d"), n);
+
+ if( n != -1 || errno != EINVAL)
+ {
+ INFO_PRINTF2(_L("errno was set to - %d"), errno);
+ ret = KErrGeneral;
+ }
+ close(fp);
+ int retVal = remove("C:\\test_pathconf.txt");
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ INFO_PRINTF2(_L("The errno value is %d\n"),errno);
+ ret = KErrGeneral;
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+//Function Name :unameL
+//API Tested :uname
+//API Description:The uname function stores NUL -terminated strings of
+//information identifying the current system into the structure referenced by
+//utsname structure( that consists sysname, nodename, release, version, machine).
+// -----------------------------------------------------------------------------
+
+TInt CTestSysunistd::unameL( )
+ {
+
+ // Print to UI
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KFtruncate, "In uname" );
+ // Print to log file
+ INFO_PRINTF1( KFtruncate );
+ TInt retrn = KErrGeneral;
+
+ TInt retVal;
+ struct utsname name;
+
+
+ retVal = uname( &name );
+
+ if( !retVal )
+ {
+ INFO_PRINTF1( KPassed );
+ retrn = KErrNone;
+ }
+ else
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+
+ return retrn ;
+
+ }
+
+// -----------------------------------------------------------------------------
+//Function Name :uname_nullL
+//API Tested :uname
+//API Description:The uname function stores NUL -terminated strings of
+//information identifying the current system into the structure referenced by
+//utsname structure( that consists sysname, nodename, release, version, machine).
+// -----------------------------------------------------------------------------
+TInt CTestSysunistd::uname_null( )
+ {
+
+ // Print to UI
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+
+ _LIT( KFtruncate, "In uname_null" );
+ // Print to log file
+ INFO_PRINTF1( KFtruncate );
+ TInt retrn = KErrGeneral;
+
+ TInt retVal;
+ struct utsname* name = NULL;
+ errno = 0;
+
+ retVal = uname( name );
+
+ if( !retVal )
+ {
+ INFO_PRINTF1( KFailed );
+ retrn = KErrGeneral;
+ }
+ else
+ {
+ INFO_PRINTF1( KPassed );
+ retrn = KErrNone;
+ }
+
+ return retrn ;
+ }
+
+/*Test Case Name :ftruncate_fileL
+ *API Tested :ftruncate()
+ *Test case Description :To Check the error condtion by using a large value (off_t) which are greater than TInt(32 bit).
+ */
+
+TInt CTestSysunistd::ftruncate_negTest( )
+ {
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+ TInt retrn = KErrGeneral;
+ TInt retval = 0;
+#if defined(SYMBIAN_OE_LARGE_FILE_SUPPORT) && !defined(SYMBIAN_OE_NO_LFS)
+ off_t offval = ULLONG_MAX;
+#else
+ off_t offval = UINT_MAX;
+#endif /* SYMBIAN_OE_LARGE_FILE_SUPPORT && !SYMBIAN_OE_NO_LFS */
+ int fp = open("C:\\truncate.txt", O_RDWR|O_CREAT);
+ if(fp != -1)
+ {
+ retval = ftruncate( fp,offval);
+ INFO_PRINTF2(_L("Value returned by truncate in this case is : %d"), retval);
+ INFO_PRINTF2(_L("errno was set to : %d"), errno);
+ if(retval == -1 && errno == 22)
+ {
+ INFO_PRINTF1( KPassed);
+ retrn = KErrNone;
+ }
+ else
+ {
+ INFO_PRINTF1(KFailed);
+ }
+ }
+ close(fp);
+ unlink("C:\\truncate.txt");
+ return retrn ;
+ }
+
+/*Test Case Name :truncate_fileL
+ *API Tested :truncate()
+ * Test case Description:To Check the error condtion by using a large value (off_t) which are greater than TInt(32 bit).
+ */
+
+TInt CTestSysunistd::truncate_negTest( )
+ {
+ _LIT( KPassed, "Passed" );
+ _LIT( KFailed, "Failed" );
+ TInt retrn = KErrGeneral;
+ TInt retval = 0;
+#if defined(SYMBIAN_OE_LARGE_FILE_SUPPORT) && !defined(SYMBIAN_OE_NO_LFS)
+ off_t offval = ULLONG_MAX;
+#else
+ off_t offval = UINT_MAX;
+#endif /* SYMBIAN_OE_LARGE_FILE_SUPPORT && !SYMBIAN_OE_NO_LFS */
+ char file[15] = "C:\\input.txt";
+ int fp = open("c:\\input.txt", O_RDWR|O_CREAT);
+ if(fp ==-1)
+ {
+ INFO_PRINTF2(_L("File opening failed with errno =%d\n"),errno);
+ return KErrGeneral;
+ }
+ retval = truncate(file, offval);
+ INFO_PRINTF2(_L("Value returned by truncate in this case is : %d"), retval);
+ INFO_PRINTF2(_L("errno was set to : %d"), errno);
+ if(retval == -1 && errno == 22)
+ {
+ INFO_PRINTF1( KPassed);
+ retrn = KErrNone;
+ }
+ else
+ {
+ INFO_PRINTF1(KFailed);
+ }
+ close(fp);
+ unlink("C:\\input.txt");
+ return retrn ;
+ }
+
+
+/*Test Case Name :fcntl_largefileTest
+ *API Tested :fcntl()
+ *Test case Description:To Check whether fcntl() call returns the correct fd when F_DUPFD is passed.
+ */
+
+TInt CTestSysunistd::fcntl_largefileTest( )
+ {
+ int retVal = KErrNone;
+ char* filedir = "c:\\largefile.txt";
+ off_t length = 0xFF;//255
+ int fd = open(filedir, O_CREAT|O_RDWR, 0666);
+ int val = ftruncate(fd, length);
+ int thirdarg = 7;
+
+ int ret;
+ int fd2 = fcntl(fd, F_DUPFD, thirdarg);
+ INFO_PRINTF2(_L("first fcntl call returns = %d"), fd2);
+ if(fd2 >= thirdarg)
+ {
+ INFO_PRINTF2(_L("Passed, the file descriptor is >= third argument i.e %d"), thirdarg);
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Failed, the file descriptor is < third argument i.e %d"), thirdarg);
+ retVal = -1;
+ close(fd);
+ close(fd2);
+ unlink(filedir);
+ return retVal;
+ }
+ thirdarg = 10;
+ int fd3 = fcntl(fd, F_DUPFD, thirdarg);
+ INFO_PRINTF2(_L("second fcntl call returns = %d"), fd3);
+ if(fd3 >= thirdarg)
+ {
+ INFO_PRINTF2(_L("Passed, the file descriptor is >= third argument i.e %d"), thirdarg);
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Failed, the file descriptor is < third argument i.e %d"), thirdarg);
+ retVal = -1;
+ goto cleanup;
+ }
+ //making use of the duplicate fd3 obtained by the fcntl call
+ ret = write(fd3, "merlyn", 6);
+ if (6 == ret)
+ {
+ INFO_PRINTF2(_L("write returns = %d"), ret);
+ }
+ else
+ {
+ ERR_PRINTF3(_L("write returns = %d and errno = %d\n"), ret, errno);
+ retVal = -1;
+ goto cleanup;
+ }
+ ret = lseek(fd3, -255, SEEK_END);//seek to begining of file
+ if (0 == ret)
+ {
+ INFO_PRINTF2(_L("lseek returns = %d"), ret);
+ }
+ else
+ {
+ ERR_PRINTF3(_L("lseek returns = %d and errno = %d"), ret, errno);
+ retVal = -1;
+ goto cleanup;
+ }
+ char buf[20];
+ ret = read(fd3, buf, 6);
+ if ((6 == ret) && (strncmp(buf, "merlyn", 6) == 0))
+ {
+ INFO_PRINTF2(_L("read returns = %d"), ret);
+ }
+ else
+ {
+ ERR_PRINTF3(_L("read returns = %d and errno = %d"), ret, errno);
+ retVal = -1;
+ goto cleanup;
+ }
+cleanup:
+ close(fd);
+ close(fd2);
+ close(fd3);
+ unlink(filedir);
+ return retVal;
+ }
+
+// -----------------------------------------------------------------------------
+// CTestSysunistd::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+// None
+
+// End of File