lkml.org 
[lkml]   [2020]   [Jun]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 10/24] dyndbg: refactor parse_linerange out of ddebug_parse_query
    Date
    make the code-block reusable to later handle "file foo.c:101-200" etc.
    This should be a 90%+ code-move, with minimal adaptations; reindent,
    and scafolding.
    ---
    lib/dynamic_debug.c | 61 +++++++++++++++++++++++++--------------------
    1 file changed, 34 insertions(+), 27 deletions(-)

    diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
    index 20b712652ee4..f87a7bef4204 100644
    --- a/lib/dynamic_debug.c
    +++ b/lib/dynamic_debug.c
    @@ -292,6 +292,39 @@ static inline int parse_lineno(const char *str, unsigned int *val)
    return 0;
    }

    +static int parse_linerange(struct ddebug_query *query, const char *first)
    +{
    + char *last = strchr(first, '-');
    +
    + if (query->first_lineno || query->last_lineno) {
    + pr_err("match-spec: line used 2x\n");
    + return -EINVAL;
    + }
    + if (last)
    + *last++ = '\0';
    + if (parse_lineno(first, &query->first_lineno) < 0)
    + return -EINVAL;
    + if (last) {
    + /* range <first>-<last> */
    + if (parse_lineno(last, &query->last_lineno) < 0)
    + return -EINVAL;
    +
    + /* special case for last lineno not specified */
    + if (query->last_lineno == 0)
    + query->last_lineno = UINT_MAX;
    +
    + if (query->last_lineno < query->first_lineno) {
    + pr_err("last-line:%d < 1st-line:%d\n",
    + query->last_lineno,
    + query->first_lineno);
    + return -EINVAL;
    + }
    + } else {
    + query->last_lineno = query->first_lineno;
    + }
    + return 0;
    +}
    +
    static int check_set(const char **dest, char *src, char *name)
    {
    int rc = 0;
    @@ -350,34 +383,8 @@ static int ddebug_parse_query(char *words[], int nwords,
    UNESCAPE_SPECIAL);
    rc = check_set(&query->format, words[i+1], "format");
    } else if (!strcmp(words[i], "line")) {
    - char *first = words[i+1];
    - char *last = strchr(first, '-');
    - if (query->first_lineno || query->last_lineno) {
    - pr_err("match-spec: line used 2x\n");
    - return -EINVAL;
    - }
    - if (last)
    - *last++ = '\0';
    - if (parse_lineno(first, &query->first_lineno) < 0)
    + if (parse_linerange(query, words[i+1]))
    return -EINVAL;
    - if (last) {
    - /* range <first>-<last> */
    - if (parse_lineno(last, &query->last_lineno) < 0)
    - return -EINVAL;
    -
    - /* special case for last lineno not specified */
    - if (query->last_lineno == 0)
    - query->last_lineno = UINT_MAX;
    -
    - if (query->last_lineno < query->first_lineno) {
    - pr_err("last-line:%d < 1st-line:%d\n",
    - query->last_lineno,
    - query->first_lineno);
    - return -EINVAL;
    - }
    - } else {
    - query->last_lineno = query->first_lineno;
    - }
    } else {
    pr_err("unknown keyword \"%s\"\n", words[i]);
    return -EINVAL;
    --
    2.26.2
    \
     
     \ /
      Last update: 2020-06-13 17:59    [W:18.113 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site