• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2009-2022 Huawei Technologies Co., Ltd. All rights reserved.
3  *
4  * UniProton is licensed under Mulan PSL v2.
5  * You can use this software according to the terms and conditions of the Mulan PSL v2.
6  * You may obtain a copy of Mulan PSL v2 at:
7  *          http://license.coscl.org.cn/MulanPSL2
8  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
9  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
10  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
11  * See the Mulan PSL v2 for more details.
12  * Create: 2009-12-22
13  * Description: 错误处理头文件。
14  */
15 #ifndef PRT_ERR_H
16 #define PRT_ERR_H
17 
18 #include "prt_typedef.h"
19 
20 #ifdef __cplusplus
21 #if __cplusplus
22 extern "C" {
23 #endif /* __cpluscplus */
24 #endif /* __cpluscplus */
25 
26 /*
27  * @brief 错误处理钩子函数。
28  *
29  * @par 描述
30  * 错误处理的钩子函数,用户自定义的错误处理函数必须要符合该钩子函数的参数要求。
31  *
32  * @attention 无。
33  *
34  * @param fileName [IN]  类型#const char *,出错文件名。
35  * @param lineNo   [IN]  类型#U32,出错的行号。
36  * @param errorNo  [IN]  类型#U32,用户定义的错误码。
37  * @param paraLen  [IN]  类型#U32,入参para的长度。
38  * @param para     [IN]  类型#void *,记录用户对于错误的描述或其他。
39  *
40  * @retval 无
41  * @par 依赖
42  * <li>prt_err.h:该接口声明所在的头文件。</li>
43  * @see 无
44  */
45 typedef void (*ErrHandleFunc)(const char *fileName, U32 lineNo, U32 errorNo, U32 paraLen, void *para);
46 
47 /*
48  * @brief 处理错误。
49  *
50  * @par 描述
51  * 用户或者OS内部使用该函数回调#PRT_ErrRegHook中注册的钩子函数。另外,OS内部使用此接口时,还会记录相关错误码。
52  * @attention
53  * <ul>
54  * <li>系统不会做入参检测,用户PRT_ErrHandle会全部当做钩子入参输入。</li>
55  * <li>用户调用PRT_ErrHandle接口时,只会回调用户注册钩子函数,不会进行错误码记录
56  * (致命错误也不会记录Trace轨迹和触发异常)。</li>
57  * </ul>
58  *
59  * @param fileName [IN]  类型#const char *,错误发生的文件名,可以用__FILE__作为输入。
60  * @param lineNo   [IN]  类型#U32,错误发生所在的行号,可以用__LINE__作为输入。
61  * @param errorNo  [IN]  类型#U32,用户输入的错误码。
62  * @param paraLen  [IN]  类型#U32,入参para的长度。
63  * @param para     [OUT] 类型#void *,记录用户对于错误的描述或其他(地址)。
64  *
65  * @retval #OS_OK  0x00000000,处理错误成功。
66  * @par 依赖
67  * <li>prt_err.h: 该接口声明所在的头文件。</li>
68  * @see 无
69  */
70 extern U32 PRT_ErrHandle(const char *fileName, U32 lineNo, U32 errorNo, U32 paraLen, void *para);
71 
72 /*
73  * @brief 注册用户错误处理的钩子函数。
74  *
75  * @par 描述
76  * 注册hook作为用户钩子函数,在调用PRT_ErrHandle接口进行错误处理时对该钩子进行调用。
77  * @attention
78  * <ul>
79  * <li>若入参hook为NULL,则为取消钩子。</li>
80  * <li>不允许重复或覆盖注册。</li>
81  * <li>用户定义的钩子函数必须符合#PRT_ERRORHANDLE_FUNC定义的形式,而且只能定义一个钩子函数。</li>
82  * <li>用户调用PRT_ErrRegHook注册回调钩子函数时,钩子函数里面不能有调用PRT_ErrHandle
83  * 或者调用OS函数发生上报错误码的情况,否则可能会进入死循环,需由用户保证。</li>
84  * <li>用户调用PRT_ErrRegHook注册回调钩子函数时,钩子函数里面如有单次上报的错误信息(只有第一次调用会执行),
85  * 那么会先记录钩子中错误信息,再记录发生错误时的错误信息。</li>
86  * </ul>
87  *
88  * @param hook [IN]  类型#ErrHandleFunc,用户钩子函数的宏定义。
89  *
90  * @retval #OS_OK  0x00000000,注册成功。
91  * @retval #其它值,注册失败。
92  * @par 依赖
93  * <li>prt_err.h:该接口声明所在的头文件。</li>
94  * @see 无
95  */
96 extern U32 PRT_ErrRegHook(ErrHandleFunc hook);
97 
98 #ifdef __cplusplus
99 #if __cplusplus
100 }
101 #endif /* __cpluscplus */
102 #endif /* __cpluscplus */
103 
104 #endif /* PRT_ERR_H */
105