From 0c2752f87df36df3a378fbaff1d3b07d655a80bd Mon Sep 17 00:00:00 2001 From: strawmanbobi Date: Sun, 25 Dec 2016 15:55:26 +0800 Subject: [PATCH] updated libirda_decoder.so for web console --- src/ir_decoder/CMakeLists.txt | 4 +-- src/ir_decoder/irda_decode.c | 24 +++++++++++++++--- .../irda_decoder/libirda_decoder.so | Bin 59570 -> 59995 bytes 3 files changed, 23 insertions(+), 5 deletions(-) mode change 100644 => 100755 src/web_console/irda_decoder/libirda_decoder.so diff --git a/src/ir_decoder/CMakeLists.txt b/src/ir_decoder/CMakeLists.txt index e3836a8..6be2299 100644 --- a/src/ir_decoder/CMakeLists.txt +++ b/src/ir_decoder/CMakeLists.txt @@ -44,5 +44,5 @@ set(SOURCE_FILES_SHARED_LIB irda_utils.c include/irda_utils.h) -add_executable(irda_decoder ${SOURCE_FILES_EXECUTABLE}) -# add_library(irda_decoder SHARED ${SOURCE_FILES_SHARED_LIB}) +# add_executable(irda_decoder ${SOURCE_FILES_EXECUTABLE}) +add_library(irda_decoder SHARED ${SOURCE_FILES_SHARED_LIB}) diff --git a/src/ir_decoder/irda_decode.c b/src/ir_decoder/irda_decode.c index 9da878d..8ac7294 100644 --- a/src/ir_decoder/irda_decode.c +++ b/src/ir_decoder/irda_decode.c @@ -315,6 +315,7 @@ INT8 free_ac_context() INT8 irda_ac_file_open(const char* file_name) { + int ret = 0; #if !defined WIN32 FILE *stream = fopen(file_name, "rb"); #else @@ -338,7 +339,16 @@ INT8 irda_ac_file_open(const char* file_name) } fseek(stream, 0, SEEK_SET); - fread(binary_content, binary_length, 1, stream); + ret = fread(binary_content, binary_length, 1, stream); + + if (ret <= 0) + { + fclose(stream); + irda_free(binary_content); + binary_length = 0; + return IR_DECODE_FAILED; + } + fclose(stream); if (IR_DECODE_FAILED == irda_ac_lib_open(binary_content, binary_length)) @@ -1220,7 +1230,7 @@ INT8 get_supported_wind_direction(UINT8* supported_wind_direction) ///////////////////////////////////////////////// TV Begin ///////////////////////////////////////////////// INT8 irda_tv_file_open(const char* file_name) { - int print_index = 0; + int ret = 0; #if !defined WIN32 FILE *stream = fopen(file_name, "rb"); @@ -1244,7 +1254,15 @@ INT8 irda_tv_file_open(const char* file_name) binary_content = (UINT8*) irda_malloc(binary_length); fseek(stream, 0, SEEK_SET); - fread(binary_content, binary_length, 1, stream); + ret = fread(binary_content, binary_length, 1, stream); + if (ret <= 0) + { + fclose(stream); + irda_free(binary_content); + binary_length = 0; + return IR_DECODE_FAILED; + } + fclose(stream); if (IR_DECODE_FAILED == irda_tv_lib_open(binary_content, binary_length)) diff --git a/src/web_console/irda_decoder/libirda_decoder.so b/src/web_console/irda_decoder/libirda_decoder.so old mode 100644 new mode 100755 index 24a5ce8c23aa94ab43e516adf988da558951054b..5670df30c79de622e385046fe522fcbcb157895b GIT binary patch delta 22981 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 JyWGh%{2ys$K->TT delta 21316 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