]> git.karo-electronics.de Git - karo-tx-redboot.git/blob - packages/language/c/libc/string/v2_0/tests/strncpy1.c
Initial revision
[karo-tx-redboot.git] / packages / language / c / libc / string / v2_0 / tests / strncpy1.c
1 //=================================================================
2 //
3 //        strncpy1.c
4 //
5 //        Testcase for C library strncpy()
6 //
7 //=================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
12 //
13 // eCos is free software; you can redistribute it and/or modify it under
14 // the terms of the GNU General Public License as published by the Free
15 // Software Foundation; either version 2 or (at your option) any later version.
16 //
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
20 // for more details.
21 //
22 // You should have received a copy of the GNU General Public License along
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
25 //
26 // As a special exception, if other files instantiate templates or use macros
27 // or inline functions from this file, or you compile this file and link it
28 // with other works to produce a work based on this file, this file does not
29 // by itself cause the resulting work to be covered by the GNU General Public
30 // License. However the source code for this file must still be made available
31 // in accordance with section (3) of the GNU General Public License.
32 //
33 // This exception does not invalidate any other reasons why a work based on
34 // this file might be covered by the GNU General Public License.
35 //
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
37 // at http://sources.redhat.com/ecos/ecos-license/
38 // -------------------------------------------
39 //####ECOSGPLCOPYRIGHTEND####
40 //=================================================================
41 //#####DESCRIPTIONBEGIN####
42 //
43 // Author(s):     ctarpy, jlarmour
44 // Contributors:  
45 // Date:          2000-04-30
46 // Description:   Contains testcode for C library strncpy() function
47 //
48 //
49 //####DESCRIPTIONEND####
50
51 // INCLUDES
52
53 #include <string.h>
54 #include <cyg/infra/testcase.h>
55
56
57 // FUNCTIONS
58
59 // Functions to avoid having to use libc strings
60
61 static int my_strlen(const char *s)
62 {
63     const char *ptr;
64
65     ptr = s;
66     for ( ptr=s ; *ptr != '\0' ; ptr++ )
67         ;
68
69     return (int)(ptr-s);
70 } // my_strlen()
71
72
73 static int my_strncmp(const char *s1, const char *s2, size_t n)
74 {
75     if (n==0)
76         return 0;
77     
78     while (n-- != 0 && *s1 == *s2)
79     {
80         if (n == 0 || *s1 == '\0' || *s2 == '\0')
81             break;
82         s1++;
83         s2++;
84     }
85     
86     return (*s1 - *s2);
87 } // my_strncmp()
88
89
90 static int my_strcmp(const char *s1, const char *s2)
91 {
92     for ( ; *s1 == *s2 ; s1++,s2++ )
93     {
94         if ( *s1 == '\0' )
95             break;
96     } // for
97
98     return (*s1 - *s2);
99 } // my_strcmp()
100
101
102 static char *my_strcpy(char *s1, const char *s2)
103 {
104     while (*s2 != '\0') {
105         *(s1++) = *(s2++);
106     }
107     *s1 = '\0';
108
109     return s1; 
110 } // my_strcpy()
111
112
113 int
114 main( int argc, char *argv[] )
115 {
116     char x[300];
117     char y[300];
118     char *ret;
119
120     CYG_TEST_INIT();
121
122     CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library "
123                   "strncpy() function");
124     CYG_TEST_INFO("This testcase provides simple basic tests");
125
126     // Check 1
127     my_strcpy(x, "Nine rings for men doomed to die");
128     ret = strncpy(y, "Nine rings for men doomed to die", my_strlen(x));
129     CYG_TEST_PASS_FAIL( (my_strncmp(x, y, my_strlen(x)) == 0),
130                         "Simple copy" );
131     // Check return value
132     CYG_TEST_PASS_FAIL( (y == ret), "Simple copy return value" );
133
134
135     // Check 2
136     my_strcpy(x, "");
137     my_strcpy(y, "Seven rings for the dwarves in their halls of stone");
138     ret = strncpy(y, x, 1);
139     CYG_TEST_PASS_FAIL( (my_strcmp(y, "") == 0), "Copy empty string" );
140     // Check return value
141     CYG_TEST_PASS_FAIL( (y == ret), "Copy empty string return value" );
142
143     // Check 3
144     my_strcpy(x, "");
145     my_strcpy(y, "Seven rings for the dwarves in their halls of stone");
146     ret = strncpy(y, x, 0);
147     if (my_strcmp(y, "Seven rings for the dwarves "
148                      "in their halls of stone") == 0)
149         CYG_TEST_PASS("Copy 0 characters");
150     else
151         CYG_TEST_FAIL("Copy 0 characters");
152     // Check return value
153     CYG_TEST_PASS_FAIL( (y == ret), "Copy empty string return value" );
154
155 //    CYG_TEST_NA("Testing is not applicable to this configuration");
156
157     CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library "
158                     "strncpy() function");
159
160 } // main()
161
162 // EOF strncpy1.c