函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:kernel\trace\trace_events_filter.c Create Date:2022-07-27 13:33:33
Last Modify:2022-05-22 20:19:57 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:Read the filter string once to calculate the number of predicates* as well as how deep the parentheses go.* Returns:* 0 - everything is fine (err is undefined)* -1 - too many ')'* -2 - too many '('* -3 - No matching quote

函数原型:static int calc_stack(const char *str, int *parens, int *preds, int *err)

返回类型:int

参数:

类型参数名称
const char *str
int *parens
int *preds
int *err
1410  bool is_pred = false
1411  nr_preds等于0
1412  open等于1
1413  last_quote等于0
1414  max_open等于1
1415  quote等于0
1418  err等于0
1420 str[i]循环
1421  如果Note: isspace() must return false for %NUL-terminator (str[i])则继续下一循环
1423  如果quote
1424  如果str[i]恒等于quotequote等于0
1426  继续下一循环
1430  :str[i]恒等于'\''
1431  :str[i]恒等于'"'
1432  quote等于str[i]
1433  last_quote等于i
1434  退出
1435  :str[i]恒等于'|'
1436  :str[i]恒等于'&'
1437  如果str[i + 1]不等于str[i]则退出
1439  is_pred = false
1440  继续下一循环
1441  :str[i]恒等于'('
1442  is_pred = false
1443  open自加
1444  如果open大于max_openmax_open等于open
1446  继续下一循环
1447  :str[i]恒等于')'
1448  is_pred = false
1449  如果open恒等于1则
1450  err等于i
1451  返回:TOO_MANY_CLOSE
1453  open自减
1454  继续下一循环
1456  如果非is_pred
1457  nr_preds自加
1458  is_pred = true
1462  如果quote
1463  err等于last_quote
1464  返回:MISSING_QUOTE
1467  如果open不等于1则
1468  level等于open
1471 i循环
1472  如果quote
1473  如果str[i]恒等于quotequote等于0
1475  继续下一循环
1478  :str[i]恒等于'('
1479  如果level恒等于open
1480  err等于i
1481  返回:TOO_MANY_OPEN
1483  level自减
1484  退出
1485  :str[i]恒等于')'
1486  level自加
1487  退出
1488  :str[i]恒等于'\''
1489  :str[i]恒等于'"'
1490  quote等于str[i]
1491  退出
1495  err等于0
1496  返回:TOO_MANY_OPEN
1500  parens等于max_open
1501  preds等于nr_preds
1502  返回:0
调用者
名称描述
process_preds