From c6ef89664b8c0d7aa85bddd5c7014aa6df82cbe7 Mon Sep 17 00:00:00 2001 From: tcsullivan Date: Sat, 17 Nov 2018 13:02:57 -0500 Subject: added pdclib, removed sash --- .../platform/example/functions/stdlib/getenv.c | 45 +++++++++++++++++ .../platform/example/functions/stdlib/system.c | 57 ++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 src/pdclib/platform/example/functions/stdlib/getenv.c create mode 100644 src/pdclib/platform/example/functions/stdlib/system.c (limited to 'src/pdclib/platform/example/functions/stdlib') diff --git a/src/pdclib/platform/example/functions/stdlib/getenv.c b/src/pdclib/platform/example/functions/stdlib/getenv.c new file mode 100644 index 0000000..72bbcd2 --- /dev/null +++ b/src/pdclib/platform/example/functions/stdlib/getenv.c @@ -0,0 +1,45 @@ +/* getenv( const char * ) + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +/* This is an example implementation of getenv() fit for use with POSIX kernels. +*/ + +#include +#include + +#ifndef REGTEST + +extern char * * environ; + +char * getenv( const char * name ) +{ + size_t len = strlen( name ); + size_t index = 0; + while ( environ[ index ] != NULL ) + { + if ( strncmp( environ[ index ], name, len ) == 0 ) + { + return environ[ index ] + len + 1; + } + index++; + } + return NULL; +} + +#endif + +#ifdef TEST + +#include "_PDCLIB_test.h" + +int main( void ) +{ + TESTCASE( strcmp( getenv( "SHELL" ), "/bin/bash" ) == 0 ); + /* TESTCASE( strcmp( getenv( "SHELL" ), "/bin/sh" ) == 0 ); */ + return TEST_RESULTS; +} + +#endif diff --git a/src/pdclib/platform/example/functions/stdlib/system.c b/src/pdclib/platform/example/functions/stdlib/system.c new file mode 100644 index 0000000..15603c3 --- /dev/null +++ b/src/pdclib/platform/example/functions/stdlib/system.c @@ -0,0 +1,57 @@ +/* system( const char * ) + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#include + +/* This is an example implementation of system() fit for use with POSIX kernels. +*/ + +extern int fork( void ); +extern int execve( const char * filename, char * const argv[], char * const envp[] ); +extern int wait( int * status ); + +int system( const char * string ) +{ + const char * argv[] = { "sh", "-c", NULL, NULL }; + argv[2] = string; + if ( string != NULL ) + { + int pid = fork(); + if ( pid == 0 ) + { + execve( "/bin/sh", (char * * const)argv, NULL ); + } + else if ( pid > 0 ) + { + while( wait( NULL ) != pid ); + } + } + return -1; +} + +#ifdef TEST + +#include "_PDCLIB_test.h" + +#define SHELLCOMMAND "echo 'SUCCESS testing system()'" + +int main( void ) +{ + FILE * fh; + char buffer[25]; + buffer[24] = 'x'; + TESTCASE( ( fh = freopen( testfile, "wb+", stdout ) ) != NULL ); + TESTCASE( system( SHELLCOMMAND ) ); + rewind( fh ); + TESTCASE( fread( buffer, 1, 24, fh ) == 24 ); + TESTCASE( memcmp( buffer, "SUCCESS testing system()", 24 ) == 0 ); + TESTCASE( buffer[24] == 'x' ); + TESTCASE( fclose( fh ) == 0 ); + TESTCASE( remove( testfile ) == 0 ); + return TEST_RESULTS; +} + +#endif -- cgit v1.2.3