Commit 48ab4356 authored by captainwong's avatar captainwong

replace sprintf with snprintf; require buf len to make fe100 packet

parent 6d70a831
...@@ -492,12 +492,15 @@ AdemcoParseResult ademcoParseDataSegment(const ademco_char_t* packet, size_t pac ...@@ -492,12 +492,15 @@ AdemcoParseResult ademcoParseDataSegment(const ademco_char_t* packet, size_t pac
return RESULT_ERROR; return RESULT_ERROR;
} }
size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSegment* dataSegment) { size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, size_t fe100_len, const AdemcoDataSegment* dataSegment) {
if (dataSegment->raw_len == ADEMCO_PACKET_DATA_SEGMENT_EMPTY_LEN) { if (dataSegment->raw_len == ADEMCO_PACKET_DATA_SEGMENT_EMPTY_LEN) {
if (fe100_len < 2) return 0;
fe100[0] = '\n'; fe100[0] = '\n';
fe100[1] = '\r'; fe100[1] = '\r';
return 2; return 2;
} else if (dataSegment->raw_len >= ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN) { } else if (dataSegment->raw_len >= ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN) {
if (fe100_len < CONGWIN_FE100_PACKET_LEN) return 0;
char* p = fe100; char* p = fe100;
*p++ = '\n'; *p++ = '\n';
*p++ = ' '; *p++ = ' ';
...@@ -506,7 +509,7 @@ size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSeg ...@@ -506,7 +509,7 @@ size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSeg
*p++ = '0'; *p++ = '0';
*p++ = ' '; *p++ = ' ';
sprintf(p, "%08d", dataSegment->ademcoId); snprintf(p, fe100_len - (p - fe100), "%08d", dataSegment->ademcoId % 100000000);
p += 8; p += 8;
*p++ = ' '; // 18 *p++ = ' '; // 18
...@@ -530,7 +533,7 @@ size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSeg ...@@ -530,7 +533,7 @@ size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSeg
*p++ = 'B'; *p++ = 'B';
*p++ = '0'; *p++ = '0';
} else { } else {
sprintf(p, "%03d", dataSegment->ademcoEvent % 1000); snprintf(p, fe100_len - (p - fe100), "%03d", dataSegment->ademcoEvent % 1000);
p += 3; p += 3;
} }
...@@ -544,7 +547,7 @@ size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSeg ...@@ -544,7 +547,7 @@ size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSeg
else else
*p++ = 'C'; // zone event *p++ = 'C'; // zone event
sprintf(p, "%03d", dataSegment->zone); snprintf(p, fe100_len - (p - fe100), "%03d", dataSegment->zone % 1000);
p += 3; p += 3;
*p++ = ' '; *p++ = ' ';
......
...@@ -405,7 +405,7 @@ ADEMCO_EXPORT_SYMBOL AdemcoParseResult ademcoParseDataSegment(const ademco_char_ ...@@ -405,7 +405,7 @@ ADEMCO_EXPORT_SYMBOL AdemcoParseResult ademcoParseDataSegment(const ademco_char_
AdemcoDataSegment* dataSegment); AdemcoDataSegment* dataSegment);
// return 0 for empty packet, CONGWIN_FE100_PACKET_LEN for success // return 0 for empty packet, CONGWIN_FE100_PACKET_LEN for success
ADEMCO_EXPORT_SYMBOL size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, ADEMCO_EXPORT_SYMBOL size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, size_t fe100_len,
const AdemcoDataSegment* dataSegment); const AdemcoDataSegment* dataSegment);
//////////////////////// AdemcoXDataSegment functions //////////////////////// //////////////////////// AdemcoXDataSegment functions ////////////////////////
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment