본문 바로가기
카테고리 없음

[sprintf] Bufferd

by 크크다스 2015. 10. 27.
반응형

= Macro를 이용해서 쉽게 sprintf를 사용하도록 함.


= 메시지 처리시에 유용


= 버퍼 오버플로우시의 로직은 좀더 고민 필요


= 에러시 retrun함 : 첫인자로


#define    REQ_BUF_LEN                        40960
#define    REQ_SPRINT(_err_ret, ...)        { \
    gReqBufLen += snprintf(&gReqBuf[gReqBufLen], sizeof(gReqBuf) - gReqBufLen, __VA_ARGS__); \
    if(gReqBufLen >= sizeof(gReqBuf)) { \
        cmsLog_error("Exceed buff[%u >= %u]", gReqBufLen, sizeof(gReqBuf)); \
        return _err_ret; \
    } \
}
#define    REQ_MEMCPY(_err_ret, _src, _src_len)        { \
    if((gReqBufLen + (_src_len)) >= sizeof(gReqBuf)) { \
        cmsLog_error("Exceed buff[%u >= %u]", gReqBufLen + (_src_len), sizeof(gReqBuf)); \
        return _err_ret; \
    } \
    memcpy(&gReqBuf[gReqBufLen], (_src), (_src_len)); \
    gReqBufLen += (_src_len); \
}

char gReqBuf[REQ_BUF_LEN + 1];
unsigned int     gReqBufLen = 0;
unsigned int     gReqTmpLen;


반응형