app_qp.c
来自「最新MTK手机软件源码」· C语言 代码 · 共 466 行 · 第 1/2 页
C
466 行
destl -= temp_len;
kal_mem_cpy(dest + rt, dst, temp_len);
kal_mem_set(dst, 0, APP_QP_BUF_LEN);
rt += temp_len;
}
if (destl < 1)
{
return -1;
}
*(dest + rt) = '\0'; /* tie off results */
return (kal_int32) rt;
} /* end of applib_qprint_decode */
/*****************************************************************************
* FUNCTION
* applib_find_qprint_boundary
* DESCRIPTION
* This function finds the boundary in the qprint encoded text.
* PARAMETERS
* ptr [IN] Pointer to the encoded buffer
* len [IN] Length of encoded data
* RETURNS
* number of bytes shall be skipped.
*****************************************************************************/
kal_uint16 applib_find_qprint_boundary(kal_char *ptr, kal_int32 len)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/* with initial values */
kal_uint16 left_over_bytes = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (len >= 2 && *(ptr + len - 2) == '=') /* penultimate */
{
left_over_bytes = 2;
}
else if (len >= 1 && *(ptr + len - 1) == '=') /* ultimate */
{
left_over_bytes = 1;
}
return left_over_bytes;
} /* end of applib_find_qprint_boundary */
/*****************************************************************************
* FUNCTION
* applib_qprint_encode_ext
* DESCRIPTION
* This function is used to encode given string into QP encoded string.
* PARAMETERS
* src [IN] Source
* srcl [IN] Source length
* dest [IN/OUT] Dest buffer
* destl [IN] Destination buffer length
* encode_crlf [IN] TRUE: "\r\n" ==> "=0D=0A"
* FALSE: "\r\n" ==> "\r\n"(?)
* RETURNS
* negative: error
* ow: length of QP encoded buffer
*****************************************************************************/
kal_int32 applib_qprint_encode_ext(
kal_char *src,
kal_uint32 srcl,
kal_char *dest,
kal_uint32 destl,
kal_bool encode_crlf)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint32 lp = 0;
kal_char *d;
const kal_char *hex = "0123456789ABCDEF";
kal_char c;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
d = dest;
while (srcl--)
{ /* for each character */
/* true line break? */
if (((c = *src++) == '\015') && (*src == '\012') && srcl)
{
if (encode_crlf == KAL_FALSE)
{
if (destl < 2)
{
return -1;
}
*d++ = '\015';
*d++ = *src++;
srcl--;
lp = 0; /* reset line count */
destl -= 2;
}
else
{
if (destl < 6)
{
return -1;
}
*d++ = '=';
*d++ = '0';
*d++ = 'D';
*d++ = '=';
*d++ = '0';
*d++ = 'A';
src++;
srcl--;
lp = 0; /* reset line count */
destl -= 6;
}
}
else
{ /* not a line break */
/* quoting required? */
if (iscntrl(c) || (c == 0x7f) || (c & 0x80) || (c == '=') || ((c == ' ') && (*src == '\015')))
{
if ((lp += 3) > APP_MAX_ENC_LINE_LIMIT)
{ /* yes, would line overflow? */
if (destl < 3)
{
return -1;
}
*d++ = '=';
*d++ = '\015';
*d++ = '\012';
lp = 3; /* set line count */
destl -= 3;
}
if (destl < 3)
{
return -1;
}
*d++ = '='; /* quote character */
*d++ = hex[(unsigned char)c >> 4]; /* high order 4 bits */
*d++ = hex[c & 0xf]; /* low order 4 bits */
destl -= 3;
}
else
{ /* ordinary character */
if ((++lp) > APP_MAX_ENC_LINE_LIMIT)
{ /* would line overflow? */
if (destl < 3)
{
return -1;
}
*d++ = '=';
*d++ = '\015';
*d++ = '\012';
lp = 1; /* set line count */
destl -= 3;
}
if (destl < 1)
{
return -1;
}
*d++ = c; /* ordinary character */
destl--;
}
}
} /* while */
if (destl < 1)
{
return -1;
}
destl--;
*d = '\0'; /* tie off destination */
return (kal_int32) (d - dest);
} /* end of applib_qprint_encode */
/*****************************************************************************
* FUNCTION
* applib_qprint_encode
* DESCRIPTION
* This function is used to encode given string into QP encoded string.
* PARAMETERS
* src [IN] Source
* srcl [IN] Source length
* dest [IN/OUT] Dest buffer
* destl [IN] Destination buffer length
* RETURNS
* negative: error
* ow: length of QP encoded buffer
*****************************************************************************/
kal_int32 applib_qprint_encode(kal_char *src, kal_uint32 srcl, kal_char *dest, kal_uint32 destl)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return applib_qprint_encode_ext(src, srcl, dest, destl, KAL_FALSE);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?