Lines Matching refs:arr
140 #define CHECK_ARRAY_FIELD_ASPACE(ptr, arr, arrlen, field, len, ...) \
142 if (ptr != NULL && ptr->arr != NULL) { \
144 CHECK_ASPACE(ptr->arr[i].field, ptr->arr[i].len, ##__VA_ARGS__); \
166 /* backup the arr to ptr##arr */
167 #define DUP_ARRAY_FIELD_FROM_USER_(ext, ptr, arr, arrlen, field, len, ...) \
168 __typeof(*ptr##_NONCONST) ptr##arr##cpy = ptr##cpybak, ptr##arr##cpybak = ptr##cpybak; \
169 __typeof(ptr##_NONCONST) ptr##arr = ptr ? &ptr##arr##cpy : NULL, ptr##arr##_NONCONST = NULL; \
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); \
177 FREE_DUP_ARRAY_FIELD(ptr, arr, i, field); \
183 #define DUP_ARRAY_FIELD_FROM_USER(ptr, arr, arrlen, field, len, ...) \
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, ...) \
187 DUP_ARRAY_FIELD_FROM_USER_(_NOCOPY, ptr, arr, arrlen, field, len, ##__VA_ARGS__)
197 /* use and free the backuped arr in ptr##arr */
198 #define FREE_DUP_ARRAY_FIELD(ptr, arr, arrlen, field) \
199 if (ptr != NULL && ptr->arr != NULL && arrlen != 0) { \
200 __typeof(ptr##cpybak.arr) tmp = ptr##cpybak.arr; \
201 ptr##cpybak.arr = ptr##arr->arr; \
203 FREE_DUP_FIELD(ptr, arr[j].field); \
205 ptr##cpybak.arr = tmp; \
207 FREE_DUP_FIELD(ptr##arr, arr);
230 /* use the backuped arr from ptr##arr */
231 #define DUP_ARRAY_FIELD_TO_USER(ptr, arr, arrlen, field, len, ...) \
232 if (ptr != NULL && ptr->arr != NULL) { \
233 __typeof(ptr##cpybak.arr) tmp = ptr##cpybak.arr; \
235 ptr##cpybak.arr = ptr##arr->arr; \
236 ptr##arr->arr = tmp; \
237 ptr##bak = ptr##arr; \
239 DUP_FIELD_TO_USER(ptr, arr[i].field, ptr->arr[i].len, ##__VA_ARGS__); \
242 ptr##arr->arr = ptr##cpybak.arr; \
243 ptr##cpybak.arr = tmp; \