@@ -890,6 +890,18 @@ static bool is_desc_sym(char c)
890
890
return c == 'v' || c == 'V' || c == '.' || c == '!' || c == '_' ;
891
891
}
892
892
893
+ static char * rtrim (char * str )
894
+ {
895
+ int i ;
896
+
897
+ for (i = strlen (str ) - 1 ; i > 0 ; -- i ) {
898
+ if (!isspace (str [i ]))
899
+ break ;
900
+ str [i ] = '\0' ;
901
+ }
902
+ return str ;
903
+ }
904
+
893
905
static int parse_stat (const char * stat_name , struct stat_specs * specs )
894
906
{
895
907
int id ;
@@ -1666,7 +1678,7 @@ static int append_preset_atom(struct var_preset *preset, char *value, bool is_in
1666
1678
static int parse_var_atoms (const char * full_var , struct var_preset * preset )
1667
1679
{
1668
1680
char expr [256 ], var [256 ], * name , * saveptr ;
1669
- int n , len , off ;
1681
+ int n , len , off , err ;
1670
1682
1671
1683
snprintf (expr , sizeof (expr ), "%s" , full_var );
1672
1684
preset -> atom_count = 0 ;
@@ -1677,15 +1689,19 @@ static int parse_var_atoms(const char *full_var, struct var_preset *preset)
1677
1689
fprintf (stderr , "Can't parse %s\n" , name );
1678
1690
return - EINVAL ;
1679
1691
}
1680
- append_preset_atom (preset , var , false);
1692
+ err = append_preset_atom (preset , var , false);
1693
+ if (err )
1694
+ return err ;
1681
1695
1682
1696
/* parse optional array indexes */
1683
1697
while (off < len ) {
1684
1698
if (sscanf (name + off , " [ %[a-zA-Z0-9_] ] %n" , var , & n ) != 1 ) {
1685
1699
fprintf (stderr , "Can't parse %s as index\n" , name + off );
1686
1700
return - EINVAL ;
1687
1701
}
1688
- append_preset_atom (preset , var , true);
1702
+ err = append_preset_atom (preset , var , true);
1703
+ if (err )
1704
+ return err ;
1689
1705
off += n ;
1690
1706
}
1691
1707
}
@@ -1697,7 +1713,7 @@ static int append_var_preset(struct var_preset **presets, int *cnt, const char *
1697
1713
void * tmp ;
1698
1714
struct var_preset * cur ;
1699
1715
char var [256 ], val [256 ];
1700
- int n , err , i ;
1716
+ int n , err ;
1701
1717
1702
1718
tmp = realloc (* presets , (* cnt + 1 ) * sizeof (* * presets ));
1703
1719
if (!tmp )
@@ -1712,11 +1728,7 @@ static int append_var_preset(struct var_preset **presets, int *cnt, const char *
1712
1728
return - EINVAL ;
1713
1729
}
1714
1730
/* Remove trailing spaces from var, as scanf may add those */
1715
- for (i = strlen (var ) - 1 ; i > 0 ; -- i ) {
1716
- if (!isspace (var [i ]))
1717
- break ;
1718
- var [i ] = '\0' ;
1719
- }
1731
+ rtrim (var );
1720
1732
1721
1733
err = parse_rvalue (val , & cur -> value );
1722
1734
if (err )
@@ -1869,7 +1881,7 @@ static int adjust_var_secinfo_array(struct btf *btf, int tid, struct field_acces
1869
1881
if (err )
1870
1882
return err ;
1871
1883
if (idx < 0 || idx >= barr -> nelems ) {
1872
- fprintf (stderr , "Array index %lld is out of bounds [0, %u] : %s\n" ,
1884
+ fprintf (stderr , "Array index %lld is out of bounds [0, %u) : %s\n" ,
1873
1885
idx , barr -> nelems , array_name );
1874
1886
return - EINVAL ;
1875
1887
}
@@ -1928,7 +1940,7 @@ static int adjust_var_secinfo_member(const struct btf *btf,
1928
1940
}
1929
1941
}
1930
1942
1931
- return - EINVAL ;
1943
+ return - ESRCH ;
1932
1944
}
1933
1945
1934
1946
static int adjust_var_secinfo (struct btf * btf , const struct btf_type * t ,
@@ -1955,6 +1967,8 @@ static int adjust_var_secinfo(struct btf *btf, const struct btf_type *t,
1955
1967
break ;
1956
1968
case FIELD_NAME :
1957
1969
err = adjust_var_secinfo_member (btf , base_type , 0 , atom -> name , sinfo );
1970
+ if (err == - ESRCH )
1971
+ fprintf (stderr , "Can't find '%s'\n" , atom -> name );
1958
1972
prev_name = atom -> name ;
1959
1973
break ;
1960
1974
default :
0 commit comments