1 /*
2 * This file is licensed under the GPL license. For the full content
3 * of this license, see the COPYING file at the top level of this
4 * source tree.
5 */
6
7 /*
8 * assertion:
9 * The function will copy the string pointed to by s1 (including the
10 * terminating NUL character) into the array pointed to by s2. And
11 * it will return s2.
12 *
13 * method:
14 * -Generate sample string s1 of variable lengths in a loop.
15 * -Use strcpy() to copy s1 into sample string s2 in each iteration.
16 * -Compare both strings(s1 and s2).
17 * -Also compare returned pointer with s2.
18 */
19
20 #include <stdio.h>
21 #include <string.h>
22 #include <stdlib.h>
23 #include <unistd.h>
24 #include <time.h>
25 #include "posixtest.h"
26
27 #define STRING_MAX_LEN 50000
28 #define STEP_COUNT 2000
29 #define TNAME "strcpy/1-1.c"
30
random_string(int len)31 static char *random_string(int len)
32 {
33 int i;
34 char *output_string;
35 output_string = malloc(len + 1);
36 if (output_string == NULL) {
37 printf(TNAME " Failed to allocate memory\n");
38 exit(PTS_UNRESOLVED);
39 }
40 for (i = 0; i < len; i++)
41 /* Limiting characters from 1-255 */
42 output_string[i] = rand() % 254 + 1;
43 output_string[len] = '\0';
44 return output_string;
45 }
46
main(void)47 int main(void)
48 {
49 char *ret_str;
50 int i;
51
52 for (i = 0; i < STRING_MAX_LEN; i += STEP_COUNT) {
53 char *sample_str_1;
54 char *sample_str_2 = malloc(i + 1);
55 if (sample_str_2 == NULL) {
56 printf(TNAME "Failed to allocate memory\n");
57 exit(PTS_UNRESOLVED);
58 }
59 sample_str_1 = random_string(i);
60 ret_str = strcpy(sample_str_2, sample_str_1);
61
62 if (strcmp(sample_str_1, sample_str_2) != 0) {
63 printf(TNAME " Test Failed, string copy failed. "
64 "Expected string: %s, But got: %s\n"
65 , sample_str_1, sample_str_2);
66 exit(PTS_FAIL);
67 } else if (ret_str != sample_str_2) {
68 printf(TNAME " Test Failed, return is not as expected. "
69 "Expected return: %p, But obtained: %p\n"
70 , sample_str_2, ret_str);
71 exit(PTS_FAIL);
72 }
73 free(sample_str_1);
74 free(sample_str_2);
75 }
76 printf(TNAME " Test Passed, string copied successfully\n");
77 exit(PTS_PASS);
78 }
79