diff options
Diffstat (limited to 'scripts/kconfig/expr.c')
-rw-r--r-- | scripts/kconfig/expr.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/scripts/kconfig/expr.c b/scripts/kconfig/expr.c index edd3f39a080a..d83f2322893a 100644 --- a/scripts/kconfig/expr.c +++ b/scripts/kconfig/expr.c | |||
@@ -1097,9 +1097,32 @@ void expr_fprint(struct expr *e, FILE *out) | |||
1097 | 1097 | ||
1098 | static void expr_print_gstr_helper(void *data, struct symbol *sym, const char *str) | 1098 | static void expr_print_gstr_helper(void *data, struct symbol *sym, const char *str) |
1099 | { | 1099 | { |
1100 | str_append((struct gstr*)data, str); | 1100 | struct gstr *gs = (struct gstr*)data; |
1101 | const char *sym_str = NULL; | ||
1102 | |||
1103 | if (sym) | ||
1104 | sym_str = sym_get_string_value(sym); | ||
1105 | |||
1106 | if (gs->max_width) { | ||
1107 | unsigned extra_length = strlen(str); | ||
1108 | const char *last_cr = strrchr(gs->s, '\n'); | ||
1109 | unsigned last_line_length; | ||
1110 | |||
1111 | if (sym_str) | ||
1112 | extra_length += 4 + strlen(sym_str); | ||
1113 | |||
1114 | if (!last_cr) | ||
1115 | last_cr = gs->s; | ||
1116 | |||
1117 | last_line_length = strlen(gs->s) - (last_cr - gs->s); | ||
1118 | |||
1119 | if ((last_line_length + extra_length) > gs->max_width) | ||
1120 | str_append(gs, "\\\n"); | ||
1121 | } | ||
1122 | |||
1123 | str_append(gs, str); | ||
1101 | if (sym) | 1124 | if (sym) |
1102 | str_printf((struct gstr*)data, " [=%s]", sym_get_string_value(sym)); | 1125 | str_printf(gs, " [=%s]", sym_str); |
1103 | } | 1126 | } |
1104 | 1127 | ||
1105 | void expr_gstr_print(struct expr *e, struct gstr *gs) | 1128 | void expr_gstr_print(struct expr *e, struct gstr *gs) |