• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <signal.h>
17 #include <stdio.h>
18 #include <stdlib.h>
19 #include <wchar.h>
20 
21 #include "filepath_util.h"
22 
handler(int sig)23 void handler(int sig)
24 {
25     exit(t_status);
26 }
27 
28 /**
29  * @tc.name      : ungetwc_0100
30  * @tc.desc      : push back a wide character
31  * @tc.level     : Level 0
32  */
ungetwc_0100(void)33 void ungetwc_0100(void)
34 {
35     char path[PATH_MAX] = {0};
36     FILE_ABSOLUTE_PATH(STR_FILE_TXT, path);
37     FILE *file = fopen(path, "a+");
38     if (!file) {
39         t_error("%s failed: fopen\n", __func__);
40         return;
41     }
42 
43     wint_t wc = L'a';
44     wint_t result = ungetwc(wc, file);
45     if (result != wc) {
46         remove(path);
47 
48         t_error("%s failed: ungetwc\n", __func__);
49         return;
50     }
51 
52     result = getwc(file);
53     if (result != wc) {
54         remove(path);
55 
56         t_error("%s failed: getwc\n", __func__);
57         return;
58     }
59 }
60 
61 /**
62  * @tc.name      : ungetwc_0200
63  * @tc.desc      : push back a wide character with an invalid FILE stream
64  * @tc.level     : Level 2
65  */
ungetwc_0200(void)66 void ungetwc_0200(void)
67 {
68     signal(SIGSEGV, handler);
69 
70     wint_t wc = L'a';
71     ungetwc(wc, NULL);
72 }
73 
main(int argc,char * argv[])74 int main(int argc, char *argv[])
75 {
76     ungetwc_0100();
77     ungetwc_0200();
78 
79     return t_status;
80 }
81