diff --git a/lib/db_base.cpp b/lib/db_base.cpp index 51cd5c46..d4700367 100644 --- a/lib/db_base.cpp +++ b/lib/db_base.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include "widgets/MainWindow.h" #include "widgets/ImportMulti.h" #include "widgets/XcaDialog.h" @@ -385,11 +386,11 @@ pki_base *db_base::insert(pki_base *item) void db_base::dump(const QString &dir) const { - QString dirname = dir + QDir::separator() + class_name; + QString dirname = dir + "/" + class_name; QDir d(dirname); if (!d.exists() && !d.mkdir(dirname)) { throw errorEx(tr("Could not create directory %1") - .arg(dirname)); + .arg(nativeSeparator(dirname))); } try { @@ -654,8 +655,7 @@ void db_base::load_default(load_base &load) if (!slist.count()) return; - QString fn = slist[0]; - Settings["workingdir"] = fn.mid(0, fn.lastIndexOf("/")); + update_workingdir(slist[0]); ImportMulti *dlgi = new ImportMulti(mainwin); foreach(s, slist) { @@ -691,14 +691,14 @@ void db_base::store(QModelIndexList indexes) return; } - QString fn = Settings["workingdir"] + QDir::separator() + "export.pem"; QString s = QFileDialog::getSaveFileName(mainwin, - tr("Save %1 items in one file as").arg(indexes.size()), fn, + tr("Save %1 items in one file as").arg(indexes.size()), + Settings["workingdir"] + "export.pem", tr("PEM files ( *.pem );; All files ( * )")); if (s.isEmpty()) return; - s = nativeSeparator(s); - Settings["workingdir"] = s.mid(0, s.lastIndexOf(QRegExp("[/\\\\]"))); + + update_workingdir(s); try { QString pem = pem2QString(indexes); XFile file(s); diff --git a/lib/db_temp.cpp b/lib/db_temp.cpp index b455e4b7..09842796 100644 --- a/lib/db_temp.cpp +++ b/lib/db_temp.cpp @@ -17,6 +17,7 @@ #include #include #include +#include db_temp::db_temp(MainWindow *mw) :db_x509name(mw) @@ -40,8 +41,7 @@ db_temp::db_temp(MainWindow *mw) for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); - QString name = getPrefix() + QDir::separator() + - fileInfo.fileName(); + QString name = getPrefix() + "/" + fileInfo.fileName(); if (!name.endsWith(".xca", Qt::CaseInsensitive)) continue; try { @@ -51,7 +51,8 @@ db_temp::db_temp(MainWindow *mw) predefs << tmpl; } } catch(errorEx &err) { - XCA_WARN(tr("Bad template: %1").arg(name)); + XCA_WARN(tr("Bad template: %1") + .arg(nativeSeparator(name))); } } } @@ -130,15 +131,15 @@ void db_temp::store(QModelIndex index) pki_temp *temp = static_cast(index.internalPointer()); - QString fn = Settings["workingdir"] + QDir::separator() + + QString fn = Settings["workingdir"] + temp->getUnderlinedName() + ".xca"; QString s = QFileDialog::getSaveFileName(mainwin, tr("Save template as"), fn, tr("XCA templates ( *.xca );; All files ( * )")); if (s.isEmpty()) return; - s = nativeSeparator(s); - Settings["workingdir"] = s.mid(0, s.lastIndexOf(QRegExp("[/\\\\]"))); + + update_workingdir(s); try { XFile file(s); file.open_key(); diff --git a/lib/db_x509.cpp b/lib/db_x509.cpp index f0aad67e..4d904e55 100644 --- a/lib/db_x509.cpp +++ b/lib/db_x509.cpp @@ -287,7 +287,6 @@ void db_x509::writeIndex(const QString &fname, bool hierarchy) const { if (hierarchy) { QString dir = fname + "/"; - dir = nativeSeparator(dir); QList issuers = sqlSELECTpki( "SELECT DISTINCT issuer FROM certs WHERE issuer != item"); foreach(pki_x509 *ca, issuers) { diff --git a/lib/db_x509super.cpp b/lib/db_x509super.cpp index 6c87d3dc..f104feb1 100644 --- a/lib/db_x509super.cpp +++ b/lib/db_x509super.cpp @@ -12,6 +12,7 @@ #include "widgets/XcaDialog.h" #include "oid.h" #include +#include db_x509name::db_x509name(MainWindow *mw) :db_base(mw) @@ -151,15 +152,14 @@ void db_x509super::extractPubkey(QModelIndex index) void db_x509super::toOpenssl(QModelIndex index) const { pki_x509super *pki = static_cast(index.internalPointer()); - QString fn = Settings["workingdir"] + QDir::separator() + - pki->getUnderlinedName() + ".conf"; + QString fn = Settings["workingdir"] + pki->getUnderlinedName() + ".conf"; QString fname = QFileDialog::getSaveFileName(mainwin, tr("Save as OpenSSL config"), fn, tr("Config files ( *.conf *.cnf);; All files ( * )")); if (fname.isEmpty()) return; - fname = nativeSeparator(fname); - Settings["workingdir"] = fname.mid(0, fname.lastIndexOf(QRegExp("[/\\\\]"))); + + update_workingdir(fname); pki->opensslConf(fname); } diff --git a/lib/entropy.cpp b/lib/entropy.cpp index 17f3b9fc..d1a36b2b 100644 --- a/lib/entropy.cpp +++ b/lib/entropy.cpp @@ -157,7 +157,7 @@ Entropy::Entropy() { timer.start(); - rnd = getUserSettingsDir() + QDir::separator() + ".rnd"; + rnd = getUserSettingsDir() + "/.rnd"; random_from_file(rnd, 1024, 128); QFile::remove(rnd); // don't use it again diff --git a/lib/func.cpp b/lib/func.cpp index 5c76ccee..5a41625e 100644 --- a/lib/func.cpp +++ b/lib/func.cpp @@ -78,7 +78,7 @@ static QString xcaExeDir() int bslash = dir.lastIndexOf("\\"); if (bslash > 0) dir = dir.mid(0, bslash); - return QDir::toNativeSeparators(QFileInfo(dir).canonicalFilePath()); + return QFileInfo(dir).canonicalFilePath(); } static QString registryInstallDir() @@ -96,7 +96,7 @@ static QString registryInstallDir() len /= sizeof inst_dir[0]; /* "len" includes the trailing \0\0 */ dir = QString::fromWCharArray(inst_dir, len -1); - return QDir::toNativeSeparators(QFileInfo(dir).canonicalFilePath()); + return QFileInfo(dir).canonicalFilePath(); } #endif @@ -172,8 +172,8 @@ static QString specialFolder(int csidl) if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, csidl, &pidl))) SHGetPathFromIDList(pidl, buf); - qDebug() << "Special Folder" << csidl << QDir::toNativeSeparators(buf); - return QDir::toNativeSeparators(buf); + qDebug() << "Special Folder" << csidl << buf; + return QFileInfo(buf).canonicalFilePath(); } #endif @@ -194,8 +194,8 @@ QString relativePath(QString path) QFileInfo fi_path(path); QFileInfo fi_home(getHomeDir()); - QString prefix = QDir::toNativeSeparators(fi_home.canonicalFilePath()); - path = QDir::toNativeSeparators(fi_path.canonicalFilePath()); + QString prefix = fi_home.canonicalFilePath(); + path = fi_path.canonicalFilePath(); if (portable_app()) { if (path.startsWith(prefix)) @@ -236,7 +236,7 @@ const QString getLibDir() break; } } - return QDir::toNativeSeparators(hd); + return QFileInfo(hd).canonicalFilePath(); #endif } @@ -275,7 +275,7 @@ const QString getUserSettingsDir() #else rv = QDir::homePath() + "/.xca"; #endif - return QDir::toNativeSeparators(rv); + return rv; } const QString getI18nDir() @@ -582,6 +582,11 @@ QString fingerprint(const QByteArray &data, const EVP_MD *type) Settings["fp_separator"], Settings["fp_digits"]); } +void update_workingdir(const QString &file) +{ + Settings["workingdir"] = QFileInfo(file).absolutePath(); +} + void inc_progress_bar(int, int, void *p) { QProgressBar *bar = (QProgressBar *)p; diff --git a/lib/func.h b/lib/func.h index 168952cb..74fe3cbf 100644 --- a/lib/func.h +++ b/lib/func.h @@ -46,6 +46,7 @@ ASN1_STRING *QStringToAsn1(QString s, int nid); QByteArray Digest(const QByteArray &data, const EVP_MD *type); QString fingerprint(const QByteArray &data, const EVP_MD *type); +void update_workingdir(const QString &file); const char *OBJ_ln2sn(const char *ln); const char *OBJ_sn2ln(const char *sn); diff --git a/lib/main.cpp b/lib/main.cpp index 6b8d45ff..b7aa23f0 100644 --- a/lib/main.cpp +++ b/lib/main.cpp @@ -42,7 +42,7 @@ bool XCA_application::languageAvailable(QLocale l) static QString defaultlang() { - return getUserSettingsDir() + QDir::separator() + "defaultlang"; + return getUserSettingsDir() + "/defaultlang"; } XCA_application::XCA_application(int &argc, char *argv[]) diff --git a/lib/oid.cpp b/lib/oid.cpp index d11491ab..ea65da85 100644 --- a/lib/oid.cpp +++ b/lib/oid.cpp @@ -173,28 +173,27 @@ static NIDlist readNIDlist(const QString &fname) static NIDlist read_nidlist(const QString &name) { NIDlist nl; - QString sep = QDir::separator(); /* first try $HOME/xca/ */ - nl = readNIDlist(getUserSettingsDir() + sep + name); + nl = readNIDlist(getUserSettingsDir() + "/" + name); #if !defined(Q_OS_WIN32) #if !defined(Q_OS_MAC) if (nl.count() == 0){ /* next is /etx/xca/... */ - nl = readNIDlist(QString(ETC) + sep + name); + nl = readNIDlist(QString(ETC) + "/" + name); } #endif #endif if (nl.count() == 0) { /* look at /usr/(local/)share/xca/ */ - nl = readNIDlist(getPrefix() + sep + name); + nl = readNIDlist(getPrefix() + "/" + name); } return nl; } void initOIDs() { - QString oids = QString(QDir::separator()) + "oids.txt"; + QString oids("/oids.txt"); QString dir = getPrefix(); first_additional_oid = OBJ_new_nid(0); diff --git a/lib/pki_base.cpp b/lib/pki_base.cpp index f69898b3..60d4864f 100644 --- a/lib/pki_base.cpp +++ b/lib/pki_base.cpp @@ -371,7 +371,7 @@ QString pki_base::get_dump_filename(const QString &dir, QString ctr = "", fn; int count = 0; while (count++ < 1000) { - fn = dir +QDir::separator() +getUnderlinedName() +ctr +ext; + fn = dir + "/" + getUnderlinedName() + ctr + ext; if (!QFile::exists(fn)) return fn; ctr = QString("_%1").arg(count); diff --git a/lib/settings.cpp b/lib/settings.cpp index 1d1fb160..47a169bc 100644 --- a/lib/settings.cpp +++ b/lib/settings.cpp @@ -94,8 +94,12 @@ void settings::load_settings() QStringList l = key.split(":"); if (l.size() == 2 && l[1] != hostId()) continue; // Skip key with non-matching host ID - if (l[0] == "workingdir" && !QDir(value).exists()) - continue; // Skip non-existing working-dir + if (l[0] == "workingdir") { + if (!QDir(value).exists()) + continue; // Skip non-existing working-dir + if (!value.isEmpty() && !value.endsWith("/")) + value += "/"; + } db_keys << key; // Key with host ID setAction(l[0], value); // Key without host ID } @@ -104,7 +108,6 @@ void settings::load_settings() QString settings::get(QString key) { -// const QString schema = "schema"; load_settings(); if (key == "schema" && QSqlDatabase::database().isOpen()) { XSqlQuery q("SELECT value FROM settings WHERE key_='schema'"); @@ -124,6 +127,8 @@ void settings::set(QString key, QString value) if (!QDir(value).exists()) return; value = relativePath(value); + if (!value.isEmpty() && !value.endsWith("/")) + value += "/"; } if (hostspecific.contains(key)) key += QString(":%1").arg(hostId()); diff --git a/lib/settings.h b/lib/settings.h index 66aecb37..99c44a08 100644 --- a/lib/settings.h +++ b/lib/settings.h @@ -77,6 +77,14 @@ class svalue { return get() == "yes" ? Qt::Checked : Qt::Unchecked; } + QString operator +(const QString &other) + { + return get() + other; + } + QString operator +(const char *other) + { + return get() + other; + } }; class settings diff --git a/widgets/ExportDialog.cpp b/widgets/ExportDialog.cpp index 7f2b142d..5bc6c9da 100644 --- a/widgets/ExportDialog.cpp +++ b/widgets/ExportDialog.cpp @@ -29,9 +29,9 @@ ExportDialog::ExportDialog(QWidget *w, const QString &title, const QString &filt image->setPixmap(img); label->setText(title); if (pki) { - QString fn = Settings["workingdir"] + QDir::separator() + + QString fn = Settings["workingdir"] + pki->getUnderlinedName() + "." + types[0].extension; - filename->setText(fn); + filename->setText(nativeSeparator(fn)); } filter = filt + ";;" + tr("All files ( * )"); @@ -99,10 +99,8 @@ void ExportDialog::on_fileBut_clicked() filename->text(), filter, NULL, QFileDialog::DontConfirmOverwrite); - if (!s.isEmpty()) { - nativeSeparator(s); - filename->setText(s); - } + if (!s.isEmpty()) + filename->setText(nativeSeparator(s)); } void ExportDialog::on_exportFormat_activated(int selected) @@ -153,8 +151,7 @@ void ExportDialog::accept() return; } if (mayWriteFile(fn)) { - Settings["workingdir"] = fn.mid(0, fn.lastIndexOf( - QRegExp("[/\\\\]"))); + update_workingdir(fn); QDialog::accept(); } } diff --git a/widgets/MW_database.cpp b/widgets/MW_database.cpp index 6dc2b796..888b5da8 100644 --- a/widgets/MW_database.cpp +++ b/widgets/MW_database.cpp @@ -446,7 +446,7 @@ void MainWindow::undelete() static QString defaultdb() { - return getUserSettingsDir() +QDir::separator() + "defaultdb"; + return getUserSettingsDir() + "/defaultdb"; } int MainWindow::open_default_db() @@ -548,7 +548,7 @@ void MainWindow::close_database() static QString dbhistory() { - return getUserSettingsDir() + QDir::separator() + "dbhistory"; + return getUserSettingsDir() + "/dbhistory"; } void MainWindow::load_history() diff --git a/widgets/MW_menu.cpp b/widgets/MW_menu.cpp index 18283f36..bb1ca9e9 100644 --- a/widgets/MW_menu.cpp +++ b/widgets/MW_menu.cpp @@ -181,7 +181,7 @@ int MainWindow::changeDB(QString fname) return 1; close_database(); if (!OpenDb::isRemoteDB(fname)) - homedir = fname.mid(0, fname.lastIndexOf(QDir::separator())); + homedir = QFileInfo(fname).canonicalPath(); return init_database(fname); } @@ -193,7 +193,7 @@ void MainWindow::update_history_menu() QString txt = history[i]; if (!QFile::exists(txt) && !OpenDb::isRemoteDB(txt)) continue; - txt = txt.remove(0, txt.lastIndexOf(QDir::separator()) +1); + txt = QFileInfo(txt).fileName(); if (txt.size() > 20) txt = QString("...") + txt.mid(txt.size() - 20); a = historyMenu->addAction(QString("%1 %2").arg(j++).arg(txt)); diff --git a/widgets/Options.cpp b/widgets/Options.cpp index 2cd4d573..ea15668b 100644 --- a/widgets/Options.cpp +++ b/widgets/Options.cpp @@ -202,7 +202,7 @@ void Options::on_removeButton_clicked(void) void Options::on_searchPkcs11_clicked(void) { if (!searchP11) { - searchP11 = new SearchPkcs11(this, QString()); + searchP11 = new SearchPkcs11(this, getLibDir()); connect(searchP11, SIGNAL(addLib(QString)), this, SLOT(addLib(QString))); } diff --git a/widgets/SearchPkcs11.cpp b/widgets/SearchPkcs11.cpp index 74beb213..037862a0 100644 --- a/widgets/SearchPkcs11.cpp +++ b/widgets/SearchPkcs11.cpp @@ -19,14 +19,13 @@ #include #include -SearchPkcs11::SearchPkcs11(QWidget *parent, QString fname) +SearchPkcs11::SearchPkcs11(QWidget *parent, const QString &fname) :QDialog(parent) { setupUi(this); - filename->setText(fname); + filename->setText(nativeSeparator(fname)); setWindowTitle(XCA_TITLE); - filename->setText(getLibDir()); searching = NULL; } @@ -41,10 +40,8 @@ void SearchPkcs11::on_fileBut_clicked() QString s = QFileDialog::getExistingDirectory(this, QString(XCA_TITLE), filename->text()); - if (!s.isEmpty()) { - nativeSeparator(s); - filename->setText(s); - } + if (!s.isEmpty()) + filename->setText(nativeSeparator(s)); } void SearchPkcs11::on_search_clicked() @@ -111,6 +108,7 @@ void SearchPkcs11::loadItem(QListWidgetItem *lib) void SearchPkcs11::updateCurrFile(QString f) { + f = nativeSeparator(f); int len = f.length(); QString reduced = f; QFontMetrics fm(currFile->font()); @@ -171,7 +169,7 @@ void searchThread::search(QString mydir) QString file = files.takeFirst(); if (file.isEmpty()) continue; - file = mydir + QDir::separator() + file; + file = mydir + "/" + file; emit updateCurrFile(file); if (checkLib(file)) emit updateLibs(file); @@ -184,7 +182,7 @@ void searchThread::search(QString mydir) foreach(d, dirs) { if (!keepOnRunning) break; - QString s = mydir +QDir::separator() +d; + QString s = mydir + "/" + d; emit updateCurrFile(s); search(s); } diff --git a/widgets/SearchPkcs11.h b/widgets/SearchPkcs11.h index 10dafeb3..0c6d7e70 100644 --- a/widgets/SearchPkcs11.h +++ b/widgets/SearchPkcs11.h @@ -49,7 +49,7 @@ class SearchPkcs11: public QDialog, public Ui::SearchPkcs11 searchThread *searching; public: - SearchPkcs11(QWidget *parent, QString fname); + SearchPkcs11(QWidget *parent, const QString &fname); ~SearchPkcs11(); public slots: