2 STRXFRM: size_t strxfrm (char *s1, const char *s2, size_t n)
5 #define TST_FUNCTION strxfrm
7 #include "tsp_common.c"
8 #include "dat_strxfrm.c"
12 tst_strxfrm (FILE * fp
, int debug_flg
)
14 TST_DECL_VARS (size_t);
15 const char *org1
, *org2
;
16 char frm1
[MBSSIZE
], frm2
[MBSSIZE
];
18 int ret_coll
, ret_cmp
;
22 TST_HEAD_LOCALE (strxfrm
, S_STRXFRM
);
25 TST_GET_ERRET (strxfrm
);
26 org1
= TST_INPUT (strxfrm
).org1
;
27 org2
= TST_INPUT (strxfrm
).org2
;
28 n1
= TST_INPUT (strxfrm
).n1
;
29 n2
= TST_INPUT (strxfrm
).n2
;
31 if (n1
< 0 || sizeof (frm1
) < n1
|| sizeof (frm2
) < n2
)
33 Result (C_IGNORED
, S_STRXFRM
, CASE_9
,
34 "input data n1 or n2 is invalid");
38 /* An errno and a return value are checked
39 only for 2nd strxfrm() call.
40 A result of 1st call is used for comparing
41 those 2 values by using strcmp().
47 ret
= strxfrm (frm1
, org1
, n1
);
52 fprintf (stdout
, "strxfrm() [ %s : %d ] ( 1st call )\n", locale
,
54 fprintf (stdout
, " : err = %d | %s\n", errno_save
,
56 fprintf (stdout
, " : ret = %zu\n", ret
);
57 fprintf (stdout
, " : org = %s\n", org1
);
60 if (ret
>= n1
|| errno
!= 0)
62 Result (C_INVALID
, S_STRXFRM
, CASE_8
,
63 "got an error in fist strxfrm() call");
70 ret
= strxfrm (((n2
== 0) ? NULL
: frm2
), org2
, n2
);
75 fprintf (stderr
, " ..............( 2nd call )\n");
76 fprintf (stdout
, " : err = %d | %s\n", errno
,
78 fprintf (stdout
, " : ret = %zu\n", ret
);
79 fprintf (stdout
, " : org = %s\n", org2
);
82 TST_IF_RETURN (S_STRXFRM
)
86 if (n2
== 0 || ret
>= n2
|| errno
!= 0)
90 Result (C_IGNORED
, S_STRXFRM
, CASE_7
, "did not get a result");
95 /*-- strcoll & strcmp --*/
98 /* Depends on strcoll() ... not good though ... */
99 ret_coll
= strcoll (org1
, org2
);
103 /* bug * bug may get correct results ... */
104 Result (C_INVALID
, S_STRXFRM
, CASE_6
,
105 "got an error in strcoll() call");
109 ret_cmp
= strcmp (frm1
, frm2
);
111 if ((ret_coll
== 0 && ret_cmp
== 0)
112 || (ret_coll
< 0 && ret_cmp
< 0) || (ret_coll
> 0 && ret_cmp
> 0))
114 Result (C_SUCCESS
, S_STRXFRM
, CASE_3
,
115 MS_PASSED
"(depends on strcoll & strcmp)");
120 Result (C_FAILURE
, S_STRXFRM
, CASE_3
,
121 "results from strcoll & strcmp() do not match");
126 fprintf (stdout
, ".......... strcoll = %d <-> %d = strcmp\n",