diff mbox series

kconfig: fix 'Save As' menu of xconfig

Message ID 1552234395-7699-1-git-send-email-yamada.masahiro@socionext.com (mailing list archive)
State New, archived
Headers show
Series kconfig: fix 'Save As' menu of xconfig | expand

Commit Message

Masahiro Yamada March 10, 2019, 4:13 p.m. UTC
The 'Save As' menu of xconfig is not working; it always saves the
kernel configuration into the default file irrespective of the file
chosen in the dialog box.

The 'Save' menu always writes into the default file, but it would
make more sense to write into the file previously chosen by 'Load'
or 'Save As'.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
---

 scripts/kconfig/qconf.cc | 42 +++++++++++++++++++++++++++++++++++-------
 scripts/kconfig/qconf.h  |  1 +
 2 files changed, 36 insertions(+), 7 deletions(-)

Comments

Robert Gadsdon May 6, 2019, 7:10 p.m. UTC | #1
On 03/10/2019 09:13 AM, Masahiro Yamada wrote:
> The 'Save As' menu of xconfig is not working; it always saves the
> kernel configuration into the default file irrespective of the file
> chosen in the dialog box.
> 
> The 'Save' menu always writes into the default file, but it would
> make more sense to write into the file previously chosen by 'Load'
> or 'Save As'.
> 
> Signed-off-by: Masahiro Yamada<yamada.masahiro@socionext.com>
> ---

The 'save as' may be used for out-of-tree kernel config saves, but the 
default 'save' should always save to the in-tree .config file, as before 
(and for the past 10+ years..)  If the kernel config was loaded from an 
out-of-tree location, it now saves back to that out-of-tree location, 
which is useless for the kernel compile..

I have always kept my hardware/system-specific kernel configs 
out-of-tree, and then applied them in-tree before compiling.

Now, I have to use 'save as' and type in the entire in-tree path 
(/usr/src/linux-5.1/.config) each time, in order to apply the specific 
config to the kernel, ready for compilation.

Robert Gadsdon.
rglinuxtech.com
Masahiro Yamada May 7, 2019, 3:01 a.m. UTC | #2
On Tue, May 7, 2019 at 4:10 AM Robert Gadsdon <rhgadsdon@gmail.com> wrote:
>
> On 03/10/2019 09:13 AM, Masahiro Yamada wrote:
> > The 'Save As' menu of xconfig is not working; it always saves the
> > kernel configuration into the default file irrespective of the file
> > chosen in the dialog box.
> >
> > The 'Save' menu always writes into the default file, but it would
> > make more sense to write into the file previously chosen by 'Load'
> > or 'Save As'.
> >
> > Signed-off-by: Masahiro Yamada<yamada.masahiro@socionext.com>
> > ---
>
> The 'save as' may be used for out-of-tree kernel config saves, but the
> default 'save' should always save to the in-tree .config file, as before
> (and for the past 10+ years..)  If the kernel config was loaded from an
> out-of-tree location, it now saves back to that out-of-tree location,
> which is useless for the kernel compile..


I think it is quite natural that
"save" overwrites the file being edited.

And, that is how the 'save' of menuconfig/nconfig works.


> I have always kept my hardware/system-specific kernel configs
> out-of-tree, and then applied them in-tree before compiling.
>
> Now, I have to use 'save as' and type in the entire in-tree path
> (/usr/src/linux-5.1/.config) each time, in order to apply the specific
> config to the kernel, ready for compilation.


It is easy to do it without using xconfig.

cp /your/custom/config .config




> Robert Gadsdon.
> rglinuxtech.com
diff mbox series

Patch

diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc
index 8be8a70..ce7fc87 100644
--- a/scripts/kconfig/qconf.cc
+++ b/scripts/kconfig/qconf.cc
@@ -1392,6 +1392,8 @@  ConfigMainWindow::ConfigMainWindow(void)
 	conf_set_changed_callback(conf_changed);
 	// Set saveAction's initial state
 	conf_changed();
+	configname = xstrdup(conf_get_configname());
+
 	QAction *saveAsAction = new QAction("Save &As...", this);
 	  connect(saveAsAction, SIGNAL(triggered(bool)), SLOT(saveConfigAs()));
 	QAction *searchAction = new QAction("&Find", this);
@@ -1520,17 +1522,29 @@  ConfigMainWindow::ConfigMainWindow(void)
 
 void ConfigMainWindow::loadConfig(void)
 {
-	QString s = QFileDialog::getOpenFileName(this, "", conf_get_configname());
-	if (s.isNull())
+	QString str;
+	QByteArray ba;
+	const char *name;
+
+	str = QFileDialog::getOpenFileName(this, "", configname);
+	if (str.isNull())
 		return;
-	if (conf_read(QFile::encodeName(s)))
+
+	ba = str.toLocal8Bit();
+	name = ba.data();
+
+	if (conf_read(name))
 		QMessageBox::information(this, "qconf", "Unable to load configuration!");
+
+	free(configname);
+	configname = xstrdup(name);
+
 	ConfigView::updateListAll();
 }
 
 bool ConfigMainWindow::saveConfig(void)
 {
-	if (conf_write(NULL)) {
+	if (conf_write(configname)) {
 		QMessageBox::information(this, "qconf", "Unable to save configuration!");
 		return false;
 	}
@@ -1541,10 +1555,24 @@  bool ConfigMainWindow::saveConfig(void)
 
 void ConfigMainWindow::saveConfigAs(void)
 {
-	QString s = QFileDialog::getSaveFileName(this, "", conf_get_configname());
-	if (s.isNull())
+	QString str;
+	QByteArray ba;
+	const char *name;
+
+	str = QFileDialog::getSaveFileName(this, "", configname);
+	if (str.isNull())
 		return;
-	saveConfig();
+
+	ba = str.toLocal8Bit();
+	name = ba.data();
+
+	if (conf_write(name)) {
+		QMessageBox::information(this, "qconf", "Unable to save configuration!");
+	}
+	conf_write_autoconf(0);
+
+	free(configname);
+	configname = xstrdup(name);
 }
 
 void ConfigMainWindow::searchConfig(void)
diff --git a/scripts/kconfig/qconf.h b/scripts/kconfig/qconf.h
index 41df466..45bfe9b 100644
--- a/scripts/kconfig/qconf.h
+++ b/scripts/kconfig/qconf.h
@@ -291,6 +291,7 @@  public slots:
 class ConfigMainWindow : public QMainWindow {
 	Q_OBJECT
 
+	char *configname;
 	static QAction *saveAction;
 	static void conf_changed(void);
 public: