diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index e8200c7..587278c 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -2506,6 +2506,8 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len) SANE_Gamma* v = (SANE_Gamma*)data; memcpy(v, custom_gamma_val_, sizeof(*custom_gamma_val_)); + if (len) + *len = image_prc_param_.bits.color_mode; return SCANNER_ERR_OK; } diff --git a/hgdriver/wrapper/hg_log.cpp b/hgdriver/wrapper/hg_log.cpp index 5ef53ef..10bb5dd 100644 --- a/hgdriver/wrapper/hg_log.cpp +++ b/hgdriver/wrapper/hg_log.cpp @@ -506,15 +506,38 @@ extern "C" } std::string local_data_path(void) { -#ifdef WIN32 - std::string env("LOCALAPPDATA"), lead(""); -#else - std::string env("HOME"), lead("."); -#endif - char* tmp = getenv(env.c_str()); - std::string home(tmp ? tmp : ""); + static std::string local_data_path(""); + static bool load_first = true; - home += PATH_SEPARATOR + lead; + if (load_first) + { + simple_ini first; + + load_first = false; + if (first.load((get_scanner_path() + "first.cfg").c_str()) == 0) + { + std::string env = first.get("constraints", "local_data_path"); + if (env.length()) + local_data_path = env; + } + } + + std::string home(local_data_path); + + if (home.empty()) + { +#ifdef WIN32 + std::string env("LOCALAPPDATA"), lead(""); +#else + std::string env("HOME"), lead("."); +#endif + char* tmp = getenv(env.c_str()); + + if (tmp) + home = tmp; + + home += PATH_SEPARATOR + lead; + } #ifdef OEM_HANWANG home += "HanvonScan";