diff --git a/build2/qt/HGFWUpgrade/HGFWUpgrade.pro b/build2/qt/HGFWUpgrade/HGFWUpgrade.pro index c3dedf51..9cf475fd 100644 --- a/build2/qt/HGFWUpgrade/HGFWUpgrade.pro +++ b/build2/qt/HGFWUpgrade/HGFWUpgrade.pro @@ -114,7 +114,7 @@ unix { CONFIG += unversioned_libname unversioned_soname QMAKE_CXXFLAGS += -fvisibility=hidden - QMAKE_LFLAGS += -static-libstdc++ -static-libgcc +# QMAKE_LFLAGS += -static-libstdc++ -static-libgcc QMAKE_LFLAGS += -Wl,-rpath,\'\$\$ORIGIN\' -Wl,--exclude-libs,ALL QMAKE_LFLAGS += -z defs -B direct diff --git a/build2/qt/HGSaneUI/HGSaneUI.pro b/build2/qt/HGSaneUI/HGSaneUI.pro index 8a07def8..aeae07d6 100644 --- a/build2/qt/HGSaneUI/HGSaneUI.pro +++ b/build2/qt/HGSaneUI/HGSaneUI.pro @@ -143,7 +143,7 @@ unix { CONFIG += unversioned_libname unversioned_soname QMAKE_CXXFLAGS += -fvisibility=hidden - QMAKE_LFLAGS += -static-libstdc++ -static-libgcc + # QMAKE_LFLAGS += -static-libstdc++ -static-libgcc QMAKE_LFLAGS += -Wl,-rpath,\'\$\$ORIGIN\' -Wl,--exclude-libs,ALL QMAKE_LFLAGS += -z defs -B direct diff --git a/build2/qt/HGScanner/HGScanner.pro b/build2/qt/HGScanner/HGScanner.pro index 2d1c0539..d56c0303 100644 --- a/build2/qt/HGScanner/HGScanner.pro +++ b/build2/qt/HGScanner/HGScanner.pro @@ -120,7 +120,7 @@ unix { CONFIG += unversioned_libname unversioned_soname QMAKE_CXXFLAGS += -fvisibility=hidden - QMAKE_LFLAGS += -static-libstdc++ -static-libgcc + # QMAKE_LFLAGS += -static-libstdc++ -static-libgcc QMAKE_LFLAGS += -Wl,-rpath,\'\$\$ORIGIN\' -Wl,--exclude-libs,ALL QMAKE_LFLAGS += -z defs -B direct diff --git a/build2/qt/HGScanner2/HGScanner2.pro b/build2/qt/HGScanner2/HGScanner2.pro index 98d3a585..364c2397 100644 --- a/build2/qt/HGScanner2/HGScanner2.pro +++ b/build2/qt/HGScanner2/HGScanner2.pro @@ -124,7 +124,7 @@ unix { CONFIG += unversioned_libname unversioned_soname QMAKE_CXXFLAGS += -fvisibility=hidden - QMAKE_LFLAGS += -static-libstdc++ -static-libgcc + # QMAKE_LFLAGS += -static-libstdc++ -static-libgcc QMAKE_LFLAGS += -Wl,-rpath,\'\$\$ORIGIN\' -Wl,--exclude-libs,ALL QMAKE_LFLAGS += -z defs -B direct diff --git a/build2/qt/HGTwainUI/HGTwainUI.pro b/build2/qt/HGTwainUI/HGTwainUI.pro index c152da87..30f67a26 100644 --- a/build2/qt/HGTwainUI/HGTwainUI.pro +++ b/build2/qt/HGTwainUI/HGTwainUI.pro @@ -205,7 +205,7 @@ unix { CONFIG += unversioned_libname unversioned_soname QMAKE_CXXFLAGS += -fvisibility=hidden - QMAKE_LFLAGS += -static-libstdc++ -static-libgcc + # QMAKE_LFLAGS += -static-libstdc++ -static-libgcc QMAKE_LFLAGS += -Wl,-rpath,\'\$\$ORIGIN\' -Wl,--exclude-libs,ALL QMAKE_LFLAGS += -z defs -B direct diff --git a/build2/qt/HGUpgrade/HGUpgrade.pro b/build2/qt/HGUpgrade/HGUpgrade.pro index c208aaf2..e9e61a39 100644 --- a/build2/qt/HGUpgrade/HGUpgrade.pro +++ b/build2/qt/HGUpgrade/HGUpgrade.pro @@ -109,7 +109,7 @@ unix { CONFIG += unversioned_libname unversioned_soname QMAKE_CXXFLAGS += -fvisibility=hidden - QMAKE_LFLAGS += -static-libstdc++ -static-libgcc + # QMAKE_LFLAGS += -static-libstdc++ -static-libgcc QMAKE_LFLAGS += -Wl,-rpath,\'\$\$ORIGIN\' -Wl,--exclude-libs,ALL QMAKE_LFLAGS += -z defs -B direct diff --git a/modules/saneui/dialog_device_scan.cpp b/modules/saneui/dialog_device_scan.cpp index 0cebd343..33715b6e 100644 --- a/modules/saneui/dialog_device_scan.cpp +++ b/modules/saneui/dialog_device_scan.cpp @@ -19,8 +19,6 @@ Dialog_Device_Scan::Dialog_Device_Scan(const SANEAPI* saneApi, SANE_Handle dev, m_eventParam = eventParam; m_imageCallback = imageCallback; m_imageParam = imageParam; - m_buffer = NULL; - m_bufferSize = 0; m_stopThread = HGFALSE; m_thread = NULL; @@ -64,10 +62,6 @@ void Dialog_Device_Scan::on_eventFunc(int flag, QString errInfo) HGBase_CloseThread(m_thread); m_thread = NULL; - free(m_buffer); - m_buffer = NULL; - m_bufferSize = 0; - ui->pushButton_Cancel->setVisible(false); ui->pushButton_Complete->setVisible(true); ui->label_imgRecived->setVisible(false); @@ -103,19 +97,6 @@ void Dialog_Device_Scan::on_imageCount(int count) void Dialog_Device_Scan::startScan() { - SANE_Parameters params; - memset(¶ms, 0, sizeof(SANE_Parameters)); - SANE_Status stat = m_saneAPI.sane_get_parameters_api(m_saneDev, ¶ms); - assert(SANE_STATUS_GOOD == stat); - - m_bufferSize = params.bytes_per_line * params.lines; - m_buffer = (HGByte *)malloc(m_bufferSize); - if (NULL == m_buffer) - { - ui->label->setText(tr("Out of memory")); - return; - } - m_stopThread = HGFALSE; HGBase_OpenThread(ThreadFunc, this, &m_thread); @@ -158,14 +139,27 @@ void HGAPI Dialog_Device_Scan::ThreadFunc(HGThread thread, HGPointer param) { SANE_Parameters params; memset(¶ms, 0, sizeof(SANE_Parameters)); - SANE_Status stat1 = p->m_saneAPI.sane_get_parameters_api(p->m_saneDev, ¶ms); + SANE_Status stat1 = p->m_saneAPI.sane_get_parameters_api(p->m_saneDev, ¶ms); + if (SANE_STATUS_GOOD != stat1) + { + emit p->eventFunc(-1, QString::fromUtf8(p->m_saneAPI.sane_strstatus_api(stat1))); + break; + } + + HGUInt bufferSize = params.bytes_per_line * params.lines; + HGByte *buffer = (HGByte *)malloc(bufferSize); + if (NULL == buffer) + { + emit p->eventFunc(-1, QString::fromUtf8(p->m_saneAPI.sane_strstatus_api(SANE_STATUS_NO_MEM))); + break; + } SANE_Int readSize = 0; SANE_Status stat2 = SANE_STATUS_GOOD; - while (readSize < p->m_bufferSize) + while (readSize < bufferSize) { SANE_Int len = 0; - stat2 = p->m_saneAPI.sane_read_api(p->m_saneDev, p->m_buffer + readSize, p->m_bufferSize - readSize, &len); + stat2 = p->m_saneAPI.sane_read_api(p->m_saneDev, buffer + readSize, bufferSize - readSize, &len); readSize += len; if (SANE_STATUS_GOOD != stat2) { @@ -175,24 +169,28 @@ void HGAPI Dialog_Device_Scan::ThreadFunc(HGThread thread, HGPointer param) if (SANE_STATUS_GOOD == stat2) { - // m_bufferSize空间不够 + // bufferSize空间不够 + free(buffer); emit p->eventFunc(-1, QString::fromUtf8(p->m_saneAPI.sane_strstatus_api(SANE_STATUS_NO_MEM))); break; } else if (SANE_STATUS_EOF == stat2) { - if (SANE_STATUS_GOOD != stat1 || 0 == readSize || readSize != params.bytes_per_line * params.lines) + if (0 == readSize || readSize != params.bytes_per_line * params.lines) { + free(buffer); emit p->eventFunc(-1, QString::fromUtf8(p->m_saneAPI.sane_strstatus_api(SANE_STATUS_IO_ERROR))); break; } } else if (SANE_STATUS_CANCELLED == stat2) { + free(buffer); break; } else { + free(buffer); emit p->eventFunc(-1, QString::fromUtf8(p->m_saneAPI.sane_strstatus_api(stat2))); break; } @@ -215,7 +213,7 @@ void HGAPI Dialog_Device_Scan::ThreadFunc(HGThread thread, HGPointer param) HGImageInfo imgInfo = { (HGUInt)params.pixels_per_line, (HGUInt)params.lines, imgType, (HGUInt)params.bytes_per_line, HGBASE_IMGORIGIN_TOP }; HGImage img = NULL; - HGBase_CreateImageWithData((HGByte*)p->m_buffer, &imgInfo, &img); + HGBase_CreateImageWithData(buffer, &imgInfo, &img); if (NULL != img) { p->m_imageCallback(img, p->m_imageParam); @@ -224,6 +222,10 @@ void HGAPI Dialog_Device_Scan::ThreadFunc(HGThread thread, HGPointer param) } } + free(buffer); + buffer = NULL; + bufferSize = 0; + SANE_Status stat3 = p->m_saneAPI.sane_start_api(p->m_saneDev); if (SANE_STATUS_NO_DOCS == stat3) { diff --git a/modules/saneui/dialog_device_scan.h b/modules/saneui/dialog_device_scan.h index 51e29bf9..7a515777 100644 --- a/modules/saneui/dialog_device_scan.h +++ b/modules/saneui/dialog_device_scan.h @@ -50,8 +50,6 @@ private: void *m_eventParam; show_scan_ui_image_callback m_imageCallback; void *m_imageParam; - HGByte* m_buffer; - HGInt m_bufferSize; volatile HGBool m_stopThread; HGThread m_thread;