--- cpukit/Makefile.am | 1 + cpukit/configure.ac | 1 + cpukit/inttypes/Makefile.am | 14 +++ cpukit/inttypes/imaxabs.c | 40 +++++++++ cpukit/inttypes/imaxdiv.c | 50 +++++++++++ cpukit/inttypes/strtoimax.c | 117 +++++++++++++++++++++++++ cpukit/inttypes/strtoumax.c | 116 +++++++++++++++++++++++++ cpukit/inttypes/wcstoimax.c | 125 +++++++++++++++++++++++++++ cpukit/inttypes/wcstoumax.c | 119 +++++++++++++++++++++++++ testsuites/samples/Makefile.am | 1 + testsuites/samples/configure.ac | 1 + testsuites/samples/psxinttypes01/Makefile.am | 22 +++++ testsuites/samples/psxinttypes01/init.c | 69 +++++++++++++++ testsuites/samples/psxinttypes01/psxid01.doc | 35 ++++++++ testsuites/samples/psxinttypes01/psxid01.scn | 38 ++++++++ 15 files changed, 749 insertions(+) create mode 100644 cpukit/inttypes/Makefile.am create mode 100644 cpukit/inttypes/imaxabs.c create mode 100644 cpukit/inttypes/imaxdiv.c create mode 100644 cpukit/inttypes/strtoimax.c create mode 100644 cpukit/inttypes/strtoumax.c create mode 100644 cpukit/inttypes/wcstoimax.c create mode 100644 cpukit/inttypes/wcstoumax.c create mode 100644 testsuites/samples/psxinttypes01/Makefile.am create mode 100644 testsuites/samples/psxinttypes01/init.c create mode 100644 testsuites/samples/psxinttypes01/psxid01.doc create mode 100644 testsuites/samples/psxinttypes01/psxid01.scn
diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am index ae5ed9b..045017e 100644 --- a/cpukit/Makefile.am +++ b/cpukit/Makefile.am @@ -7,6 +7,7 @@ include $(top_srcdir)/automake/multilib.am _SUBDIRS = . score rtems sapi posix _SUBDIRS += dev _SUBDIRS += dtc/libfdt +_SUBDIRS += inttypes _SUBDIRS += libcrypt _SUBDIRS += libcsupport libblock libfs _SUBDIRS += libdrvmgr diff --git a/cpukit/configure.ac b/cpukit/configure.ac index b0aa9a0..ad0865b 100644 --- a/cpukit/configure.ac +++ b/cpukit/configure.ac @@ -461,6 +461,7 @@ score/cpu/sparc64/Makefile score/cpu/v850/Makefile score/cpu/no_cpu/Makefile posix/Makefile +inttypes/Makefile libblock/Makefile libdrvmgr/Makefile libfs/Makefile diff --git a/cpukit/inttypes/Makefile.am b/cpukit/inttypes/Makefile.am new file mode 100644 index 0000000..c90b872 --- /dev/null +++ b/cpukit/inttypes/Makefile.am @@ -0,0 +1,14 @@ +include $(top_srcdir)/automake/multilib.am +include $(top_srcdir)/automake/compile.am + + +noinst_LIBRARIES = libinttypes.a + +libinttypes_a_SOURCES = imaxdiv.c imaxabs.c strtoimax.c strtoumax.c wcstoimax.c wcstoumax.c + +libinttypes_a_CPPFLAGS = $(AM_CPPFLAGS) + + +#include $(srcdir)/preinstall.am +include $(top_srcdir)/automake/subdirs.am +include $(top_srcdir)/automake/local.am diff --git a/cpukit/inttypes/imaxabs.c b/cpukit/inttypes/imaxabs.c new file mode 100644 index 0000000..525e9c0 --- /dev/null +++ b/cpukit/inttypes/imaxabs.c @@ -0,0 +1,40 @@ +/*- + * Copyright (c) 2001 Mike Barcroft <m...@freebsd.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdint.h> +#include <stdio.h> + +#include <rtems/inttypes.h> + + +intmax_t +imaxabs(intmax_t j) +{ + return (j < 0 ? -j : j); +} diff --git a/cpukit/inttypes/imaxdiv.c b/cpukit/inttypes/imaxdiv.c new file mode 100644 index 0000000..7992caa --- /dev/null +++ b/cpukit/inttypes/imaxdiv.c @@ -0,0 +1,50 @@ +/*- + * Copyright (c) 2001 Mike Barcroft <m...@freebsd.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdint.h> + +#include <rtems/inttypes.h> + +/* See comments in div.c for implementation details. */ +imaxdiv_t +imaxdiv(intmax_t numer, intmax_t denom) +{ + imaxdiv_t retval; + + retval.quot = numer / denom; + retval.rem = numer % denom; +#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) + if (numer >= 0 && retval.rem < 0) { + retval.quot++; + retval.rem -= denom; + } +#endif + return (retval); +} diff --git a/cpukit/inttypes/strtoimax.c b/cpukit/inttypes/strtoimax.c new file mode 100644 index 0000000..9971f73 --- /dev/null +++ b/cpukit/inttypes/strtoimax.c @@ -0,0 +1,117 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +/* + This source code was extracted from the Q8 package created and + placed in the PUBLIC DOMAIN by Doug Gwyn <g...@arl.mil> + last edit: 1999/11/05 g...@arl.mil + + Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E). + + This particular implementation requires the matching <inttypes.h>. + It also assumes that character codes for A..Z and a..z are in + contiguous ascending order; this is true for ASCII but not EBCDIC. +*/ +#include <stdlib.h> +#include <errno.h> +#include <ctype.h> +#include <inttypes.h> + +/* Helper macros */ + +/* convert digit character to number, in any base */ +#define ToNumber(c) (isdigit(c) ? (c) - '0' : \ + isupper(c) ? (c) - 'A' + 10 : \ + islower(c) ? (c) - 'a' + 10 : \ + -1 /* "invalid" flag */ \ + ) +/* validate converted digit character for specific base */ +#define valid(n, b) ((n) >= 0 && (n) < (b)) + +intmax_t +strtoimax(nptr, endptr, base) + register const char * __restrict__ nptr; + char ** __restrict__ endptr; + register int base; + { + register uintmax_t accum; /* accumulates converted value */ + register int n; /* numeral from digit character */ + int minus; /* set iff minus sign seen */ + int toobig; /* set iff value overflows */ + if ( endptr != NULL ) + *endptr = (char *)nptr; /* in case no conversion's performed */ + + if ( base < 0 || base == 1 || base > 36 ) + { + errno = EDOM; + return 0; /* unspecified behavior */ + } + + /* skip initial, possibly empty sequence of white-space characters */ + + while ( isspace(*nptr) ) + ++nptr; + + /* process subject sequence: */ + + /* optional sign */ + if ( (minus = *nptr == '-') || *nptr == '+' ) + ++nptr; + + if ( base == 0 ) { + if ( *nptr == '0' ) { + if ( nptr[1] == 'X' || nptr[1] == 'x' ) + base = 16; + else + base = 8; + } + else + base = 10; + } + /* optional "0x" or "0X" for base 16 */ + + if ( base == 16 && *nptr == '0' && (nptr[1] == 'X' || nptr[1] == 'x') ) + nptr += 2; /* skip past this prefix */ + + /* check whether there is at least one valid digit */ + + n = ToNumber(*nptr); + ++nptr; + + if ( !valid(n, base) ) + return 0; /* subject seq. not of expected form */ + + accum = n; + + for ( toobig = 0; n = ToNumber(*nptr), valid(n, base); ++nptr ) + if ( accum > (uintmax_t)(INTMAX_MAX / base + 2) ) /* major wrap-around */ + toobig = 1; /* but keep scanning */ + else + accum = base * accum + n; + + if ( endptr != NULL ) + *endptr = (char *)nptr; /* points to first not-valid-digit */ + + if ( minus ) + { + if ( accum > (uintmax_t)INTMAX_MAX + 1 ) + toobig = 1; + } + else + if ( accum > (uintmax_t)INTMAX_MAX ) + toobig = 1; + + if ( toobig ) + { + errno = ERANGE; + return minus ? INTMAX_MIN : INTMAX_MAX; + } + else + return (intmax_t)(minus ? -accum : accum); + } + +long long __attribute__ ((alias ("strtoimax"))) +strtoll (const char* __restrict__ nptr, char ** __restrict__ endptr, int base); + diff --git a/cpukit/inttypes/strtoumax.c b/cpukit/inttypes/strtoumax.c new file mode 100644 index 0000000..3612a23 --- /dev/null +++ b/cpukit/inttypes/strtoumax.c @@ -0,0 +1,116 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +/* + This source code was extracted from the Q8 package created and + placed in the PUBLIC DOMAIN by Doug Gwyn <g...@arl.mil> + last edit: 1999/11/05 g...@arl.mil + + Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E). + + This particular implementation requires the matching <inttypes.h>. + It also assumes that character codes for A..Z and a..z are in + contiguous ascending order; this is true for ASCII but not EBCDIC. +*/ +#include <stdlib.h> +#include <errno.h> +#include <ctype.h> +#include <inttypes.h> + +/* Helper macros */ + +/* convert digit character to number, in any base */ +#define ToNumber(c) (isdigit(c) ? (c) - '0' : \ + isupper(c) ? (c) - 'A' + 10 : \ + islower(c) ? (c) - 'a' + 10 : \ + -1 /* "invalid" flag */ \ + ) +/* validate converted digit character for specific base */ +#define valid(n, b) ((n) >= 0 && (n) < (b)) + +uintmax_t +strtoumax(nptr, endptr, base) + register const char * __restrict__ nptr; + char ** __restrict__ endptr; + register int base; + { + register uintmax_t accum; /* accumulates converted value */ + register uintmax_t next; /* for computing next value of accum */ + register int n; /* numeral from digit character */ + int minus; /* set iff minus sign seen (yes!) */ + int toobig; /* set iff value overflows */ + + if ( endptr != NULL ) + *endptr = (char *)nptr; /* in case no conversion's performed */ + + if ( base < 0 || base == 1 || base > 36 ) + { + errno = EDOM; + return 0; /* unspecified behavior */ + } + + /* skip initial, possibly empty sequence of white-space characters */ + + while ( isspace(*nptr) ) + ++nptr; + + /* process subject sequence: */ + + /* optional sign (yes!) */ + + if ( (minus = *nptr == '-') || *nptr == '+' ) + ++nptr; + + if ( base == 0 ) + { + if ( *nptr == '0' ) + { + if ( nptr[1] == 'X' || nptr[1] == 'x' ) + base = 16; + else + base = 8; + } + else + base = 10; + } + + /* optional "0x" or "0X" for base 16 */ + + if ( base == 16 && *nptr == '0' && (nptr[1] == 'X' || nptr[1] == 'x') ) + nptr += 2; /* skip past this prefix */ + + /* check whether there is at least one valid digit */ + + n = ToNumber(*nptr); + ++nptr; + + if ( !valid(n, base) ) + return 0; /* subject seq. not of expected form */ + + accum = n; + + for ( toobig = 0; n = ToNumber(*nptr), valid(n, base); ++nptr ) + if ( accum > UINTMAX_MAX / base + 1 /* major wrap-around */ + || (next = base * accum + n) < accum /* minor wrap-around */ + ) + toobig = 1; /* but keep scanning */ + else + accum = next; + + if ( endptr != NULL ) + *endptr = (char *)nptr; /* points to first not-valid-digit */ + + if ( toobig ) + { + errno = ERANGE; + return UINTMAX_MAX; + } + else + return minus ? -accum : accum; /* (yes!) */ + } + +unsigned long long __attribute__ ((alias ("strtoumax"))) +strtoull (const char* __restrict__ nptr, char ** __restrict__ endptr, int base); + diff --git a/cpukit/inttypes/wcstoimax.c b/cpukit/inttypes/wcstoimax.c new file mode 100644 index 0000000..24667bd --- /dev/null +++ b/cpukit/inttypes/wcstoimax.c @@ -0,0 +1,125 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +/* + This source code was extracted from the Q8 package created and + placed in the PUBLIC DOMAIN by Doug Gwyn <g...@arl.mil> + + last edit: 1999/11/05 g...@arl.mil + + Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E). + + This particular implementation requires the matching <inttypes.h>. + It also assumes that character codes for A..Z and a..z are in + contiguous ascending order; this is true for ASCII but not EBCDIC. +*/ + +#include <wchar.h> +#include <errno.h> +#include <ctype.h> +#include <inttypes.h> + +/* convert digit wide character to number, in any base */ + +#define ToWNumber(c) (iswdigit(c) ? (c) - L'0' : \ + iswupper(c) ? (c) - L'A' + 10 : \ + iswlower(c) ? (c) - L'a' + 10 : \ + -1 /* "invalid" flag */ \ + ) + +/* validate converted digit character for specific base */ +#define valid(n, b) ((n) >= 0 && (n) < (b)) + +intmax_t +wcstoimax(nptr, endptr, base) + register const wchar_t * __restrict__ nptr; + wchar_t ** __restrict__ endptr; + register int base; + { + register uintmax_t accum; /* accumulates converted value */ + register int n; /* numeral from digit character */ + int minus; /* set iff minus sign seen */ + int toobig; /* set iff value overflows */ + printf("In wcstoimax function \n"); + if ( endptr != NULL ) + *endptr = (wchar_t *)nptr; /* in case no conv performed */ + + if ( base < 0 || base == 1 || base > 36 ) + { + errno = EDOM; + return 0; /* unspecified behavior */ + } + + /* skip initial, possibly empty sequence of white-space w.characters */ + + while ( iswspace(*nptr) ) + ++nptr; + + /* process subject sequence: */ + + /* optional sign */ + + if ( (minus = *nptr == L'-') || *nptr == L'+' ) + ++nptr; + + if ( base == 0 ) + { + if ( *nptr == L'0' ) + { + if ( nptr[1] == L'X' || nptr[1] == L'x' ) + base = 16; + else + base = 8; + } + else + base = 10; + } + /* optional "0x" or "0X" for base 16 */ + + if ( base == 16 && *nptr == L'0' + && (nptr[1] == L'X' || nptr[1] == L'x') + ) + nptr += 2; /* skip past this prefix */ + + /* check whether there is at least one valid digit */ + + n = ToWNumber(*nptr); + ++nptr; + + if ( !valid(n, base) ) + return 0; /* subject seq. not of expected form */ + + accum = n; + + for ( toobig = 0; n = ToWNumber(*nptr), valid(n, base); ++nptr ) + if ( accum > (uintmax_t)(INTMAX_MAX / base + 2) ) /* major wrap-around */ + toobig = 1; /* but keep scanning */ + else + accum = base * accum + n; + + if ( endptr != NULL ) + *endptr = (wchar_t *)nptr; /* -> first not-valid-digit */ + + if ( minus ) + { + if ( accum > (uintmax_t)INTMAX_MAX + 1 ) + toobig = 1; + } + else + if ( accum > (uintmax_t)INTMAX_MAX ) + toobig = 1; + + if ( toobig ) + { + errno = ERANGE; + return minus ? INTMAX_MIN : INTMAX_MAX; + } + else + return (intmax_t)(minus ? -accum : accum); + } + +long long __attribute__ ((alias ("wcstoimax"))) +wcstoll (const wchar_t* __restrict__ nptr, wchar_t ** __restrict__ endptr, int base); + diff --git a/cpukit/inttypes/wcstoumax.c b/cpukit/inttypes/wcstoumax.c new file mode 100644 index 0000000..a796a62 --- /dev/null +++ b/cpukit/inttypes/wcstoumax.c @@ -0,0 +1,119 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +/* + This source code was extracted from the Q8 package created and + placed in the PUBLIC DOMAIN by Doug Gwyn <g...@arl.mil> + + last edit: 1999/11/05 g...@arl.mil + + Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E). + + This particular implementation requires the matching <inttypes.h>. + It also assumes that character codes for A..Z and a..z are in + contiguous ascending order; this is true for ASCII but not EBCDIC. +*/ + +#include <wchar.h> +#include <errno.h> +#include <ctype.h> +#include <inttypes.h> + +/* convert digit wide character to number, in any base */ + +#define ToWNumber(c) (iswdigit(c) ? (c) - L'0' : \ + iswupper(c) ? (c) - L'A' + 10 : \ + iswlower(c) ? (c) - L'a' + 10 : \ + -1 /* "invalid" flag */ \ + ) + +/* validate converted digit character for specific base */ +#define valid(n, b) ((n) >= 0 && (n) < (b)) + +uintmax_t +wcstoumax(nptr, endptr, base) + register const wchar_t * __restrict__ nptr; + wchar_t ** __restrict__ endptr; + register int base; + { + register uintmax_t accum; /* accumulates converted value */ + register uintmax_t next; /* for computing next value of accum */ + register int n; /* numeral from digit character */ + int minus; /* set iff minus sign seen (yes!) */ + int toobig; /* set iff value overflows */ + + if ( endptr != NULL ) + *endptr = (wchar_t *)nptr; /* in case no conv performed */ + + if ( base < 0 || base == 1 || base > 36 ) + { + errno = EDOM; + return 0; /* unspecified behavior */ + } + + /* skip initial, possibly empty sequence of white-space w.characters */ + + while ( iswspace(*nptr) ) + ++nptr; + + /* process subject sequence: */ + + /* optional sign */ + + if ( (minus = *nptr == L'-') || *nptr == L'+' ) + ++nptr; + + if ( base == 0 ) + { + if ( *nptr == L'0' ) + { + if ( nptr[1] == L'X' || nptr[1] == L'x' ) + base = 16; + else + base = 8; + } + else + base = 10; + } + /* optional "0x" or "0X" for base 16 */ + + if ( base == 16 && *nptr == L'0' + && (nptr[1] == L'X' || nptr[1] == L'x') + ) + nptr += 2; /* skip past this prefix */ + + /* check whether there is at least one valid digit */ + + n = ToWNumber(*nptr); + ++nptr; + + if ( !valid(n, base) ) + return 0; /* subject seq. not of expected form */ + + accum = n; + + for ( toobig = 0; n = ToWNumber(*nptr), valid(n, base); ++nptr ) + if ( accum > UINTMAX_MAX / base + 1 /* major wrap-around */ + || (next = base * accum + n) < accum /* minor wrap-around */ + ) + toobig = 1; /* but keep scanning */ + else + accum = next; + + if ( endptr != NULL ) + *endptr = (wchar_t *)nptr; /* -> first not-valid-digit */ + + if ( toobig ) + { + errno = ERANGE; + return UINTMAX_MAX; + } + else + return minus ? -accum : accum; /* (yes!) */ + } + +unsigned long long __attribute__ ((alias ("wcstoumax"))) +wcstoull (const wchar_t* __restrict__ nptr, wchar_t ** __restrict__ endptr, int base); + diff --git a/testsuites/samples/Makefile.am b/testsuites/samples/Makefile.am index 85e89a5..fd16f57 100644 --- a/testsuites/samples/Makefile.am +++ b/testsuites/samples/Makefile.am @@ -8,6 +8,7 @@ _SUBDIRS += hello _SUBDIRS += minimum _SUBDIRS += nsecs _SUBDIRS += paranoia +_SUBDIRS += psxinttypes01 _SUBDIRS += ticker _SUBDIRS += unlimited diff --git a/testsuites/samples/configure.ac b/testsuites/samples/configure.ac index ffe1bad..3d0ef5b 100644 --- a/testsuites/samples/configure.ac +++ b/testsuites/samples/configure.ac @@ -74,6 +74,7 @@ minimum/Makefile nsecs/Makefile paranoia/Makefile pppd/Makefile +psxinttypes01/Makefile ticker/Makefile unlimited/Makefile ]) diff --git a/testsuites/samples/psxinttypes01/Makefile.am b/testsuites/samples/psxinttypes01/Makefile.am new file mode 100644 index 0000000..56a85aa --- /dev/null +++ b/testsuites/samples/psxinttypes01/Makefile.am @@ -0,0 +1,22 @@ +AUTOMAKE_OPTIONS = subdir-objects +rtems_tests_PROGRAMS = psxinttypes01 +psxinttypes01_SOURCES = init.c + +##dist_rtems_tests_DATA = psxinttypes01.scn + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + + +AM_CPPFLAGS += -I$(top_srcdir)/include +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(psxinttypes01_OBJECTS) $(psxinttypes01_LDADD) +LINK_LIBS = $(psxinttypes01_LDLIBS) /home/aditya/development/b-sparc/sparc-rtems4.12/c/erc32/cpukit/inttypes/libinttypes.a + +psxinttypes01$(EXEEXT): $(psxinttypes01_OBJECTS) $(psxinttypes01_DEPENDENCIES) + @rm -f psxinttypes01$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/samples/psxinttypes01/init.c b/testsuites/samples/psxinttypes01/init.c new file mode 100644 index 0000000..bda6879 --- /dev/null +++ b/testsuites/samples/psxinttypes01/init.c @@ -0,0 +1,69 @@ +/*This is the test for inttypes library. It covers these functions : +imaxabs(), imaxdiv(), strtoimax(), strtoumax(), wcstoimax(), wcstoumax(). +*/ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems/inttypes.h> +#include <rtems/printer.h> +#include <rtems/test.h> +#include <stdlib.h> + +/* forward declarations to avoid warnings */ +rtems_task Init(rtems_task_argument argument); +const char rtems_test_name[] = "PSXINTTYPE 01"; +rtems_printer rtems_test_printer; +/* + * RTEMS Startup Task + */ +rtems_task Init( + rtems_task_argument ignored +) +{ + rtems_print_printer_printf(&rtems_test_printer); + rtems_test_begin(); + char* endptr; + uintmax_t j,k; + int base = 10; + char *nptr; + wchar_t *nptr1, *endptr1; + intmax_t m; + nptr1 = L"10110134932"; + nptr = "20690239864abc"; + m = wcstoimax(nptr1, &endptr1, base); + printf("string = %s\n", nptr); + j = strtoumax(nptr, &endptr, base); + printf("wcstoimax = %jd\n", m); + k = wcstoumax(nptr1, &endptr1, base); + printf("wcstoumax = %ju\n", k); + printf("strtoumax = %ju (base %d)\n", j, base); + printf("Stopped scan at %s\n\n", endptr); + imaxdiv_t retrival = imaxdiv(27, 4); + printf(" Strtoimax values \n"); + printf("%jd\n", strtoimax(" -123junk",&endptr,10)); /* base 10 */ + printf("%jd\n", strtoimax("11111111",&endptr,2)); /* base 2 */ + printf("%jd\n", strtoimax("XyZ",&endptr,36)); /* base 36 */ + printf("%jd\n", strtoimax("010",&endptr,0)); /* octal auto-detection */ + printf("%jd\n", strtoimax("10",&endptr,0)); /* decimal auto-detection */ + printf("%jd\n", strtoimax("0x10",&endptr,0)); /* hexadecimal auto-detection */ + printf( "imaxabs_value = %jd\n", imaxabs(-1234)); + printf("strtoimax value = %jd\n", strtoimax("11111111",&endptr,2)); + printf( "imax div value = %jd\n", retrival.rem); + rtems_test_end(); + exit( 0 ); +} + +/* NOTICE: the clock driver is explicitly disabled */ +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS 1 + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_INIT +#include <rtems/confdefs.h> + diff --git a/testsuites/samples/psxinttypes01/psxid01.doc b/testsuites/samples/psxinttypes01/psxid01.doc new file mode 100644 index 0000000..a8ce42a --- /dev/null +++ b/testsuites/samples/psxinttypes01/psxid01.doc @@ -0,0 +1,35 @@ +# COPYRIGHT (c) 1989-2010. +# On-Line Applications Research Corporation (OAR). +# +# The license and distribution terms for this file may be +# found in the file LICENSE in this distribution or at +# http://www.rtems.org/license/LICENSE. +# + +This file describes the directives and concepts tested by this test set. + +test set name: psxid01 + +directives: + + getegid + getgid + setgid + setpgid + geteuid + getuid + setuid + geteuid + getuid + getpid + __getpid + getppid + setsid + getpgrp + getgroups + getlogin + getlogin_r + +concepts: + ++ Fully exercise the above listed methods diff --git a/testsuites/samples/psxinttypes01/psxid01.scn b/testsuites/samples/psxinttypes01/psxid01.scn new file mode 100644 index 0000000..e0ea2a0 --- /dev/null +++ b/testsuites/samples/psxinttypes01/psxid01.scn @@ -0,0 +1,38 @@ +*** BEGIN OF TEST PSXID 1 *** +getegid = 0 +getgid = 0 +setgid(5) +getegid = 0 +getgid = 5 +setegid(5) +getegid = 5 +getgid = 5 +setgid(0) +setegid(0) +setpgid(getpid(), 10) - ENOSYS + +geteuid = 0 +getuid = 0 +setuid(5) +geteuid = 0 +getuid = 5 +seteuid(5) +geteuid = 5 +getuid = 5 +seteuid(0) +setuid(0) + +getpid = 1 +__getpid = 1 +getppid = 0 +setsid - EPERM +getpgrp - return local node - OK +getpgrp returned 1 + +setuid(5) +getlogin() -- () +setuid(0) +getlogin() -- (root) +getlogin_r(NULL, LOGIN_NAME_MAX) -- EFAULT +getlogin_r(buffer, 0) -- ERANGE +*** END OF TEST PSXID 1 *** -- 2.7.4 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel