diff --git a/hgsane/sane_hg_mdw.cpp b/hgsane/sane_hg_mdw.cpp index 4e45a53..61aa1a4 100644 --- a/hgsane/sane_hg_mdw.cpp +++ b/hgsane/sane_hg_mdw.cpp @@ -357,35 +357,42 @@ namespace local_utility //TRY_MATCH(DRIVER_LOG); //TRY_MATCH(DEVICE_LOG); } - static std::string un_json_option_name(int id) + static std::string un_json_option_name(int id, int *len) { -#define FIX_ID_TO_NAME(fid) \ - if(id == SANE_OPT_ID_##fid) \ - return SANE_STD_OPT_NAME_##fid; + int tmp = sizeof(int); + if (!len) + len = &tmp; - FIX_ID_TO_NAME(HISTORY_COUNT); - FIX_ID_TO_NAME(DRIVER_VERSION); - FIX_ID_TO_NAME(MANUFACTURER); - FIX_ID_TO_NAME(COPYRIGHT); - FIX_ID_TO_NAME(CO_URL); - FIX_ID_TO_NAME(CO_TEL); - FIX_ID_TO_NAME(CO_ADDR); - FIX_ID_TO_NAME(CO_GPS); - FIX_ID_TO_NAME(VID); - FIX_ID_TO_NAME(PID); - FIX_ID_TO_NAME(DEV_NAME); - FIX_ID_TO_NAME(DEV_FAMILY); - FIX_ID_TO_NAME(ROLLER_COUNT); - FIX_ID_TO_NAME(HELP); - FIX_ID_TO_NAME(LOGIN); - FIX_ID_TO_NAME(LOGOUT); - FIX_ID_TO_NAME(DRIVER_LOG); - FIX_ID_TO_NAME(DEVICE_LOG); +#define FIX_ID_TO_NAME(fid, l) \ + if(id == SANE_OPT_ID_##fid) \ + { \ + *len = l; \ + return SANE_STD_OPT_NAME_##fid; \ + } - FIX_ID_TO_NAME(DEVICE_SERIAL_NO); - FIX_ID_TO_NAME(FIRMWARE_VERSION); - FIX_ID_TO_NAME(DEVICE_IP_ADDR); - FIX_ID_TO_NAME(DEVICE_MAC_ADDR); + FIX_ID_TO_NAME(HISTORY_COUNT, sizeof(int)); + FIX_ID_TO_NAME(DRIVER_VERSION, 255); + FIX_ID_TO_NAME(MANUFACTURER, 255); + FIX_ID_TO_NAME(COPYRIGHT, 255); + FIX_ID_TO_NAME(CO_URL, 255); + FIX_ID_TO_NAME(CO_TEL, 255); + FIX_ID_TO_NAME(CO_ADDR, 255); + FIX_ID_TO_NAME(CO_GPS, 255); + FIX_ID_TO_NAME(VID, sizeof(int)); + FIX_ID_TO_NAME(PID, sizeof(int)); + FIX_ID_TO_NAME(DEV_NAME, 255); + FIX_ID_TO_NAME(DEV_FAMILY, 255); + FIX_ID_TO_NAME(ROLLER_COUNT, sizeof(int)); + FIX_ID_TO_NAME(HELP, sizeof(int)); + FIX_ID_TO_NAME(LOGIN, 255); + FIX_ID_TO_NAME(LOGOUT, 255); + FIX_ID_TO_NAME(DRIVER_LOG, 255); + FIX_ID_TO_NAME(DEVICE_LOG, 255); + + FIX_ID_TO_NAME(DEVICE_SERIAL_NO, 255); + FIX_ID_TO_NAME(FIRMWARE_VERSION, 255); + FIX_ID_TO_NAME(DEVICE_IP_ADDR, 255); + FIX_ID_TO_NAME(DEVICE_MAC_ADDR, 255); return ""; } @@ -1344,13 +1351,15 @@ bool hg_sane_middleware::get_current_value(scanner_handle handle, const void* op { if (IS_PTR_NUMBER(option)) { - int id = (int)(uint64_t)option; - std::string name(local_utility::un_json_option_name(id)); + int id = (int)(uint64_t)option, + l = 0; + std::string name(local_utility::un_json_option_name(id, &l)); if(!name.empty()) { char buf[256] = { 0 }; long len = sizeof(buf) - 1; + memcpy(buf, value, l); if (hg_scanner_get_parameter(handle, name.c_str(), buf, &len) == SCANNER_ERR_OK) { setv(buf, len, value); @@ -1769,8 +1778,9 @@ SANE_Status hg_sane_middleware::set_option(SANE_Handle h, const void* option, SA { if (IS_PTR_NUMBER(option)) { - int id = (int)(uint64_t)option; - std::string name(local_utility::un_json_option_name(id)); + int id = (int)(uint64_t)option, + l = 0; + std::string name(local_utility::un_json_option_name(id, &l)); if (!name.empty()) return local_utility::scanner_err_2_sane_statu(hg_scanner_set_parameter(handle, name.c_str(), value, 0)); }