kconfig: add 'filename' and 'lineno' built-in variables
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Mon, 28 May 2018 09:21:54 +0000 (18:21 +0900)
committerChristian Lamparter <chunkeey@gmail.com>
Sun, 10 Feb 2019 21:13:37 +0000 (22:13 +0100)
The special variables, $(filename) and $(lineno), are expanded to a
file name and its line number being parsed, respectively.

Suggested-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
config/preprocess.c

index 5ee58eeb9a7d954d8d5b849211835147a88da8dc..0574039238c65cf1df6bb1dba86b9fff8c989375 100644 (file)
@@ -114,6 +114,11 @@ static char *do_error_if(int argc, char *argv[])
        return NULL;
 }
 
+static char *do_filename(int argc, char *argv[])
+{
+       return xstrdup(current_file->name);
+}
+
 static char *do_info(int argc, char *argv[])
 {
        printf("%s\n", argv[0]);
@@ -121,6 +126,15 @@ static char *do_info(int argc, char *argv[])
        return xstrdup("");
 }
 
+static char *do_lineno(int argc, char *argv[])
+{
+       char buf[16];
+
+       sprintf(buf, "%d", yylineno);
+
+       return xstrdup(buf);
+}
+
 static char *do_shell(int argc, char *argv[])
 {
        FILE *p;
@@ -173,7 +187,9 @@ static char *do_warning_if(int argc, char *argv[])
 static const struct function function_table[] = {
        /* Name         MIN     MAX     Function */
        { "error-if",   2,      2,      do_error_if },
+       { "filename",   0,      0,      do_filename },
        { "info",       1,      1,      do_info },
+       { "lineno",     0,      0,      do_lineno },
        { "shell",      1,      1,      do_shell },
        { "warning-if", 2,      2,      do_warning_if },
 };