zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit ca9ec78952fc51616a684203fc4cff2fe101b11f
parent 169fe0c7424d252acd6ceff1d43a4c18de79e478
Author: Olivier Jolly <olivier@pcedev.com>
Date:   Tue,  9 Feb 2016 23:58:34 +0100

Enable use of ~ as bank dir name prefix

We also ensure that bank dir name ends with a
directory separator even if saved in configuration
without one.

Diffstat:
Msrc/Misc/Bank.cpp | 28+++++++++++++++++++++++++---
Msrc/Misc/Bank.h | 9++++++++-
2 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/src/Misc/Bank.cpp b/src/Misc/Bank.cpp @@ -212,6 +212,7 @@ int Bank::loadfromslot(unsigned int ninstrument, Part *part) */ int Bank::loadbank(string bankdirname) { + normalizedirsuffix(bankdirname); DIR *dir = opendir(bankdirname.c_str()); clearbank(); @@ -285,9 +286,8 @@ int Bank::newbank(string newbankdirname) string bankdir; bankdir = config->cfg.bankRootDirList[0]; - if(((bankdir[bankdir.size() - 1]) != '/') - && ((bankdir[bankdir.size() - 1]) != '\\')) - bankdir += "/"; + expanddirname(bankdir); + normalizedirsuffix(bankdir); bankdir += newbankdirname; #ifdef _WIN32 @@ -404,6 +404,8 @@ void Bank::setLsb(uint8_t lsb) void Bank::scanrootdir(string rootdir) { + expanddirname(rootdir); + DIR *dir = opendir(rootdir.c_str()); if(dir == NULL) return; @@ -498,3 +500,23 @@ void Bank::deletefrombank(int pos) Bank::ins_t::ins_t() :name(""), filename("") {} + +void Bank::expanddirname(std::string &dirname) { + if (dirname.empty()) + return; + + // if the directory name starts with a ~ and the $HOME variable is + // defined in the environment, replace ~ by the content of $HOME + if (dirname.at(0) == '~') { + char *home_dirname = getenv("HOME"); + if (home_dirname != NULL) { + dirname = std::string(home_dirname) + dirname.substr(1); + } + } +} + +void Bank::normalizedirsuffix(string &dirname) const { + if(((dirname[dirname.size() - 1]) != '/') + && ((dirname[dirname.size() - 1]) != '\\')) + dirname += "/"; +} diff --git a/src/Misc/Bank.h b/src/Misc/Bank.h @@ -100,7 +100,14 @@ class Bank std::string dirname; void scanrootdir(std::string rootdir); //scans a root dir for banks - + + /** Expends ~ prefix in dirname, if any */ + void expanddirname(std::string &dirname); + + /** Ensure that the directory name is suffixed by a + * directory separator */ + void normalizedirsuffix(std::string &dirname) const; + Config* const config; public: