• Home
  • Raw
  • Download

Lines Matching +full:len +full:- +full:or +full:- +full:define

2  * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without modification,
12 * of conditions and the following disclaimer in the documentation and/or other materials
16 * to endorse or promote products derived from this software without specific prior written
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
32 #define _SYSCALL_PUB_H
43 extern int CheckRegion(const LosVmSpace *space, VADDR_T ptr, size_t len);
44 extern void *DupUserMem(const void *ptr, size_t len, int needCopy);
48 #define CHECK_ASPACE(ptr, len, ...) \ argument
50 if (ptr != NULL && len != 0) { \
51 if (!LOS_IsUserAddressRange((VADDR_T)(UINTPTR)ptr, len)) { \
54 return -get_errno(); \
56 LosVmSpace *__aspace = OsCurrProcessGet()->vmSpace; \
57 (VOID)LOS_MuxAcquire(&__aspace->regionMux); \
58 if (CheckRegion(__aspace, (VADDR_T)(UINTPTR)ptr, len) == -1) { \
59 (VOID)LOS_MuxRelease(&__aspace->regionMux); \
62 return -get_errno(); \
64 (VOID)LOS_MuxRelease(&__aspace->regionMux); \
68 #define LEN(ptr) ((ptr) ? *(ptr) : 0) macro
70 #define DUP_FROM_USER_(ptr, size, copy, ...) \
77 return -get_errno(); \
85 #define DUP_FROM_USER(ptr, size, ...) \
88 #define DUP_FROM_USER_NOCOPY(ptr, size, ...) \
91 #define DUP_TO_USER(ptr, size, ...) \
97 return -get_errno(); \
102 #define FREE_DUP(ptr) \
110 #define CPY_FROM_USER(ptr) \
115 return -get_errno(); \
120 #define CPY_TO_USER(ptr, ...) \
125 return -get_errno(); \
131 #define CONST_CAST(ptr) ((__typeof(ptr##_NONCONST))ptr)
133 #define CHECK_FIELD_ASPACE(ptr, field, len) \ argument
136 CHECK_ASPACE(ptr->field, len); \
140 #define CHECK_ARRAY_FIELD_ASPACE(ptr, arr, arrlen, field, len, ...) \ argument
142 if (ptr != NULL && ptr->arr != NULL) { \
144 CHECK_ASPACE(ptr->arr[i].field, ptr->arr[i].len, ##__VA_ARGS__); \
149 #define DUP_FIELD_FROM_USER_(ptr, field, size, copy, ...) \
151 if (ptr != NULL && ptr->field != NULL && (size) != 0) { \
152 CONST_CAST(ptr)->field = DupUserMem(ptr->field, size, copy); \
153 if (ptr->field == NULL) { \
155 return -get_errno(); \
160 #define DUP_FIELD_FROM_USER(ptr, field, size, ...) \
163 #define DUP_FIELD_FROM_USER_NOCOPY(ptr, field, size, ...) \
167 #define DUP_ARRAY_FIELD_FROM_USER_(ext, ptr, arr, arrlen, field, len, ...) \ argument
170 DUP_FIELD_FROM_USER(ptr##arr, arr, arrlen * sizeof(ptr->arr[0]), ##__VA_ARGS__); \
171 if (ptr != NULL && ptr->arr != NULL) { \
174 DUP_FIELD_FROM_USER##ext(ptr, arr[i].field, ptr->arr[i].len, break); \
179 return -get_errno(); \
183 #define DUP_ARRAY_FIELD_FROM_USER(ptr, arr, arrlen, field, len, ...) \ argument
184 DUP_ARRAY_FIELD_FROM_USER_(, ptr, arr, arrlen, field, len, ##__VA_ARGS__)
186 #define DUP_ARRAY_FIELD_FROM_USER_NOCOPY(ptr, arr, arrlen, field, len, ...) \ argument
187 DUP_ARRAY_FIELD_FROM_USER_(_NOCOPY, ptr, arr, arrlen, field, len, ##__VA_ARGS__)
189 #define FREE_DUP_FIELD(ptr, field) \
191 if (ptr != NULL && ptr->field != ptr##cpybak.field) { \
192 LOS_MemFree(OS_SYS_MEM_ADDR, (void*)ptr->field); \
193 CONST_CAST(ptr)->field = ptr##cpybak.field; \
198 #define FREE_DUP_ARRAY_FIELD(ptr, arr, arrlen, field) \
199 if (ptr != NULL && ptr->arr != NULL && arrlen != 0) { \
201 ptr##cpybak.arr = ptr##arr->arr; \
209 #define CPY_FROM_CONST_USER(NonConstType, ptr) \
214 #define CPY_FROM_NONCONST_USER(ptr) \
218 #define DUP_FIELD_TO_USER(ptr, field, size, ...) \
220 if (ptr != NULL && ptr->field != NULL && (size) != 0) { \
221 if (LOS_ArchCopyToUser(ptr##cpybak.field, ptr->field, size) != 0 || \
222 …LOS_ArchCopyToUser(&ptr##bak->field, &ptr##cpybak.field, sizeof(__typeof(ptr##cpybak.field))) != 0…
225 return -get_errno(); \
231 #define DUP_ARRAY_FIELD_TO_USER(ptr, arr, arrlen, field, len, ...) \ argument
232 if (ptr != NULL && ptr->arr != NULL) { \
235 ptr##cpybak.arr = ptr##arr->arr; \
236 ptr##arr->arr = tmp; \
239 DUP_FIELD_TO_USER(ptr, arr[i].field, ptr->arr[i].len, ##__VA_ARGS__); \
242 ptr##arr->arr = ptr##cpybak.arr; \
246 #define PointerFree(ptr) \