Skip to content

Commit

Permalink
kconfig: qconf: replace deprecated QString::sprintf() with QTextStream
Browse files Browse the repository at this point in the history
QString::sprintf() is deprecated in the latest Qt version, and spawns
a lot of warnings:

  HOSTCXX scripts/kconfig/qconf.o
scripts/kconfig/qconf.cc: In member function ‘void ConfigInfoView::menuInfo()’:
scripts/kconfig/qconf.cc:1090:61: warning: ‘QString& QString::sprintf(const char*, ...)’ is deprecated: Use asprintf(), arg() or QTextStream instead [-Wdeprecated-declarations]
 1090 |      head += QString().sprintf("<a href=\"s%s\">", sym->name);
      |                                                             ^
In file included from /usr/include/qt5/QtGui/qkeysequence.h:44,
                 from /usr/include/qt5/QtWidgets/qaction.h:44,
                 from /usr/include/qt5/QtWidgets/QAction:1,
                 from scripts/kconfig/qconf.cc:7:
/usr/include/qt5/QtCore/qstring.h:382:14: note: declared here
  382 |     QString &sprintf(const char *format, ...) Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
      |              ^~~~~~~
scripts/kconfig/qconf.cc:1099:60: warning: ‘QString& QString::sprintf(const char*, ...)’ is deprecated: Use asprintf(), arg() or QTextStream instead [-Wdeprecated-declarations]
 1099 |     head += QString().sprintf("<a href=\"s%s\">", sym->name);
      |                                                            ^
In file included from /usr/include/qt5/QtGui/qkeysequence.h:44,
                 from /usr/include/qt5/QtWidgets/qaction.h:44,
                 from /usr/include/qt5/QtWidgets/QAction:1,
                 from scripts/kconfig/qconf.cc:7:
/usr/include/qt5/QtCore/qstring.h:382:14: note: declared here
  382 |     QString &sprintf(const char *format, ...) Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
      |              ^~~~~~~
scripts/kconfig/qconf.cc:1127:90: warning: ‘QString& QString::sprintf(const char*, ...)’ is deprecated: Use asprintf(), arg() or QTextStream instead [-Wdeprecated-declarations]
 1127 |   debug += QString().sprintf("defined at %s:%d<br><br>", _menu->file->name, _menu->lineno);
      |                                                                                          ^
In file included from /usr/include/qt5/QtGui/qkeysequence.h:44,
                 from /usr/include/qt5/QtWidgets/qaction.h:44,
                 from /usr/include/qt5/QtWidgets/QAction:1,
                 from scripts/kconfig/qconf.cc:7:
/usr/include/qt5/QtCore/qstring.h:382:14: note: declared here
  382 |     QString &sprintf(const char *format, ...) Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
      |              ^~~~~~~
scripts/kconfig/qconf.cc: In member function ‘QString ConfigInfoView::debug_info(symbol*)’:
scripts/kconfig/qconf.cc:1150:68: warning: ‘QString& QString::sprintf(const char*, ...)’ is deprecated: Use asprintf(), arg() or QTextStream instead [-Wdeprecated-declarations]
 1150 |    debug += QString().sprintf("prompt: <a href=\"m%s\">", sym->name);
      |                                                                    ^
In file included from /usr/include/qt5/QtGui/qkeysequence.h:44,
                 from /usr/include/qt5/QtWidgets/qaction.h:44,
                 from /usr/include/qt5/QtWidgets/QAction:1,
                 from scripts/kconfig/qconf.cc:7:
/usr/include/qt5/QtCore/qstring.h:382:14: note: declared here
  382 |     QString &sprintf(const char *format, ...) Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
      |              ^~~~~~~
scripts/kconfig/qconf.cc: In static member function ‘static void ConfigInfoView::expr_print_help(void*, symbol*, const char*)’:
scripts/kconfig/qconf.cc:1225:59: warning: ‘QString& QString::sprintf(const char*, ...)’ is deprecated: Use asprintf(), arg() or QTextStream instead [-Wdeprecated-declarations]
 1225 |   *text += QString().sprintf("<a href=\"s%s\">", sym->name);
      |                                                           ^
In file included from /usr/include/qt5/QtGui/qkeysequence.h:44,
                 from /usr/include/qt5/QtWidgets/qaction.h:44,
                 from /usr/include/qt5/QtWidgets/QAction:1,
                 from scripts/kconfig/qconf.cc:7:
/usr/include/qt5/QtCore/qstring.h:382:14: note: declared here
  382 |     QString &sprintf(const char *format, ...) Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
      |              ^~~~~~~

The documentation also says:
"Warning: We do not recommend using QString::asprintf() in new Qt code.
Instead, consider using QTextStream or arg(), both of which support
Unicode strings seamlessly and are type-safe."

Use QTextStream as suggested.

Reported-by: Robert Crawford <[email protected]>
Signed-off-by: Masahiro Yamada <[email protected]>
  • Loading branch information
masahir0y committed Aug 21, 2020
1 parent 68fd110 commit 510bc3c
Showing 1 changed file with 62 additions and 54 deletions.
116 changes: 62 additions & 54 deletions scripts/kconfig/qconf.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1076,106 +1076,114 @@ void ConfigInfoView::symbolInfo(void)
void ConfigInfoView::menuInfo(void)
{
struct symbol* sym;
QString head, debug, help;
QString info;
QTextStream stream(&info);

sym = _menu->sym;
if (sym) {
if (_menu->prompt) {
head += "<big><b>";
head += print_filter(_menu->prompt->text);
head += "</b></big>";
stream << "<big><b>";
stream << print_filter(_menu->prompt->text);
stream << "</b></big>";
if (sym->name) {
head += " (";
stream << " (";
if (showDebug())
head += QString().sprintf("<a href=\"s%s\">", sym->name);
head += print_filter(sym->name);
stream << "<a href=\"s" << sym->name << "\">";
stream << print_filter(sym->name);
if (showDebug())
head += "</a>";
head += ")";
stream << "</a>";
stream << ")";
}
} else if (sym->name) {
head += "<big><b>";
stream << "<big><b>";
if (showDebug())
head += QString().sprintf("<a href=\"s%s\">", sym->name);
head += print_filter(sym->name);
stream << "<a href=\"s" << sym->name << "\">";
stream << print_filter(sym->name);
if (showDebug())
head += "</a>";
head += "</b></big>";
stream << "</a>";
stream << "</b></big>";
}
head += "<br><br>";
stream << "<br><br>";

if (showDebug())
debug = debug_info(sym);
stream << debug_info(sym);

} else if (_menu->prompt) {
head += "<big><b>";
head += print_filter(_menu->prompt->text);
head += "</b></big><br><br>";
stream << "<big><b>";
stream << print_filter(_menu->prompt->text);
stream << "</b></big><br><br>";
if (showDebug()) {
if (_menu->prompt->visible.expr) {
debug += "&nbsp;&nbsp;dep: ";
expr_print(_menu->prompt->visible.expr, expr_print_help, &debug, E_NONE);
debug += "<br><br>";
stream << "&nbsp;&nbsp;dep: ";
expr_print(_menu->prompt->visible.expr,
expr_print_help, &stream, E_NONE);
stream << "<br><br>";
}
}
}
if (showDebug())
debug += QString().sprintf("defined at %s:%d<br><br>", _menu->file->name, _menu->lineno);
stream << "defined at " << _menu->file->name << ":"
<< _menu->lineno << "<br><br>";

setText(head + debug);
setText(info);
}

QString ConfigInfoView::debug_info(struct symbol *sym)
{
QString debug;
QTextStream stream(&debug);

debug += "type: ";
debug += print_filter(sym_type_name(sym->type));
stream << "type: ";
stream << print_filter(sym_type_name(sym->type));
if (sym_is_choice(sym))
debug += " (choice)";
stream << " (choice)";
debug += "<br>";
if (sym->rev_dep.expr) {
debug += "reverse dep: ";
expr_print(sym->rev_dep.expr, expr_print_help, &debug, E_NONE);
debug += "<br>";
stream << "reverse dep: ";
expr_print(sym->rev_dep.expr, expr_print_help, &stream, E_NONE);
stream << "<br>";
}
for (struct property *prop = sym->prop; prop; prop = prop->next) {
switch (prop->type) {
case P_PROMPT:
case P_MENU:
debug += QString().sprintf("prompt: <a href=\"m%s\">", sym->name);
debug += print_filter(prop->text);
debug += "</a><br>";
stream << "prompt: <a href=\"m" << sym->name << "\">";
stream << print_filter(prop->text);
stream << "</a><br>";
break;
case P_DEFAULT:
case P_SELECT:
case P_RANGE:
case P_COMMENT:
case P_IMPLY:
case P_SYMBOL:
debug += prop_get_type_name(prop->type);
debug += ": ";
expr_print(prop->expr, expr_print_help, &debug, E_NONE);
debug += "<br>";
stream << prop_get_type_name(prop->type);
stream << ": ";
expr_print(prop->expr, expr_print_help,
&stream, E_NONE);
stream << "<br>";
break;
case P_CHOICE:
if (sym_is_choice(sym)) {
debug += "choice: ";
expr_print(prop->expr, expr_print_help, &debug, E_NONE);
debug += "<br>";
stream << "choice: ";
expr_print(prop->expr, expr_print_help,
&stream, E_NONE);
stream << "<br>";
}
break;
default:
debug += "unknown property: ";
debug += prop_get_type_name(prop->type);
debug += "<br>";
stream << "unknown property: ";
stream << prop_get_type_name(prop->type);
stream << "<br>";
}
if (prop->visible.expr) {
debug += "&nbsp;&nbsp;&nbsp;&nbsp;dep: ";
expr_print(prop->visible.expr, expr_print_help, &debug, E_NONE);
debug += "<br>";
stream << "&nbsp;&nbsp;&nbsp;&nbsp;dep: ";
expr_print(prop->visible.expr, expr_print_help,
&stream, E_NONE);
stream << "<br>";
}
}
debug += "<br>";
stream << "<br>";

return debug;
}
Expand Down Expand Up @@ -1213,15 +1221,15 @@ QString ConfigInfoView::print_filter(const QString &str)

void ConfigInfoView::expr_print_help(void *data, struct symbol *sym, const char *str)
{
QString* text = reinterpret_cast<QString*>(data);
QString str2 = print_filter(str);
QTextStream *stream = reinterpret_cast<QTextStream *>(data);

if (sym && sym->name && !(sym->flags & SYMBOL_CONST)) {
*text += QString().sprintf("<a href=\"s%s\">", sym->name);
*text += str2;
*text += "</a>";
} else
*text += str2;
*stream << "<a href=\"s" << sym->name << "\">";
*stream << print_filter(str);
*stream << "</a>";
} else {
*stream << print_filter(str);
}
}

void ConfigInfoView::clicked(const QUrl &url)
Expand Down

0 comments on commit 510bc3c

Please sign in to comment.