| 264 | } |
| 265 | |
| 266 | static rt_err_t at_check_args(const char *args, const char *args_format) |
| 267 | { |
| 268 | rt_size_t left_sq_bracket_num = 0, right_sq_bracket_num = 0; |
| 269 | rt_size_t left_angle_bracket_num = 0, right_angle_bracket_num = 0; |
| 270 | rt_size_t comma_mark_num = 0; |
| 271 | rt_size_t i = 0; |
| 272 | |
| 273 | RT_ASSERT(args); |
| 274 | RT_ASSERT(args_format); |
| 275 | |
| 276 | for (i = 0; i < strlen(args_format); i++) |
| 277 | { |
| 278 | switch (args_format[i]) |
| 279 | { |
| 280 | case AT_CMD_L_SQ_BRACKET: |
| 281 | left_sq_bracket_num++; |
| 282 | break; |
| 283 | |
| 284 | case AT_CMD_R_SQ_BRACKET: |
| 285 | right_sq_bracket_num++; |
| 286 | break; |
| 287 | |
| 288 | case AT_CMD_L_ANGLE_BRACKET: |
| 289 | left_angle_bracket_num++; |
| 290 | break; |
| 291 | |
| 292 | case AT_CMD_R_ANGLE_BRACKET: |
| 293 | right_angle_bracket_num++; |
| 294 | break; |
| 295 | |
| 296 | default: |
| 297 | break; |
| 298 | } |
| 299 | } |
| 300 | |
| 301 | if (left_sq_bracket_num != right_sq_bracket_num || left_angle_bracket_num != right_angle_bracket_num |
| 302 | || left_sq_bracket_num > left_angle_bracket_num) |
| 303 | { |
| 304 | return -RT_ERROR; |
| 305 | } |
| 306 | |
| 307 | for (i = 0; i < strlen(args); i++) |
| 308 | { |
| 309 | if (args[i] == AT_CMD_COMMA_MARK) |
| 310 | { |
| 311 | comma_mark_num++; |
| 312 | } |
| 313 | } |
| 314 | |
| 315 | if ((comma_mark_num + 1 < left_angle_bracket_num - left_sq_bracket_num) |
| 316 | || comma_mark_num + 1 > left_angle_bracket_num) |
| 317 | { |
| 318 | return -RT_ERROR; |
| 319 | } |
| 320 | |
| 321 | return RT_EOK; |
| 322 | } |
| 323 | |