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
)
34 Result (C_IGNORED
, S_STRXFRM
, CASE_9
,
35 "input data n1 or n2 is invalid");
39 /* An errno and a return value are checked
40 only for 2nd strxfrm() call.
41 A result of 1st call is used for comparing
42 those 2 values by using strcmp().
48 ret
= strxfrm (frm1
, org1
, n1
);
53 fprintf (stdout
, "strxfrm() [ %s : %d ] ( 1st call )\n", locale
,
55 fprintf (stdout
, " : err = %d | %s\n", errno_save
,
57 fprintf (stdout
, " : ret = %u\n", ret
);
58 fprintf (stdout
, " : org = %s\n", org1
);
61 if (ret
>= n1
|| errno
!= 0)
64 Result (C_INVALID
, S_STRXFRM
, CASE_8
,
65 "got an error in fist strxfrm() call");
72 ret
= strxfrm (((n2
== 0) ? NULL
: frm2
), org2
, n2
);
77 fprintf (stderr
, " ..............( 2nd call )\n");
78 fprintf (stdout
, " : err = %d | %s\n", errno
,
80 fprintf (stdout
, " : ret = %u\n", ret
);
81 fprintf (stdout
, " : org = %s\n", org2
);
84 TST_IF_RETURN (S_STRXFRM
)
88 if (n2
== 0 || ret
>= n2
|| errno
!= 0)
92 Result (C_IGNORED
, S_STRXFRM
, CASE_7
, "did not get a result");
97 /*-- strcoll & strcmp --*/
100 /* Depends on strcoll() ... not good though ... */
101 ret_coll
= strcoll (org1
, org2
);
105 /* bug * bug may get correct results ... */
107 Result (C_INVALID
, S_STRXFRM
, CASE_6
,
108 "got an error in strcoll() call");
112 ret_cmp
= strcmp (frm1
, frm2
);
114 if ((ret_coll
== 0 && ret_cmp
== 0)
115 || (ret_coll
< 0 && ret_cmp
< 0) || (ret_coll
> 0 && ret_cmp
> 0))
117 Result (C_SUCCESS
, S_STRXFRM
, CASE_3
,
118 MS_PASSED
"(depends on strcoll & strcmp)");
123 Result (C_FAILURE
, S_STRXFRM
, CASE_3
,
124 "results from strcoll & strcmp() do not match");
129 fprintf (stdout
, ".......... strcoll = %d <-> %d = strcmp\n",