OSDN Git Service

update libMiMic
[mimic/MiMicSDK.git] / lib / src / http / NyLPC_cUrlEncode.c
1 #include "NyLPC_cUrlEncode.h"\r
2 #include <stdarg.h>\r
3 #include <ctype.h>\r
4 \r
5 \r
6 NyLPC_TBool NyLPC_cUrlEncode_initialize(NyLPC_TcUrlEncode_t* i_inst)\r
7 {\r
8     i_inst->_len=0;\r
9     return NyLPC_TBool_TRUE;\r
10 }\r
11 \r
12 \r
13 NyLPC_TcUrlEncode_ST NyLPC_cUrlEncode_decode(NyLPC_TcUrlEncode_t* i_inst,NyLPC_TChar c,NyLPC_TChar* out)\r
14 {\r
15     int t;\r
16     if(c=='%'){\r
17         if(i_inst->_len!=0){\r
18             NyLPC_OnErrorGoto(Error);\r
19         }\r
20         i_inst->_len=1;\r
21         return NyLPC_TcUrlEncode_ST_NEXT;\r
22     }else{\r
23         switch(i_inst->_len){\r
24         case 0:\r
25             *out=c;\r
26             return NyLPC_TcUrlEncode_ST_DONE;\r
27         case 1:\r
28             if(!isxdigit((int)c)){\r
29                 NyLPC_OnErrorGoto(Error);\r
30             }\r
31             t=NyLPC_ctox(c);\r
32             i_inst->v=(NyLPC_TChar)t;//16進文字→HEX\r
33             i_inst->_len++;\r
34             return NyLPC_TcUrlEncode_ST_NEXT;\r
35         case 2:\r
36             if(!isxdigit((int)c)){\r
37                 NyLPC_OnErrorGoto(Error);\r
38             }\r
39             t=NyLPC_ctox(c);\r
40             *out=(NyLPC_TChar)((i_inst->v<<4) | t);\r
41             i_inst->v=0;\r
42             i_inst->_len=0;\r
43             return NyLPC_TcUrlEncode_ST_DONE;\r
44         default:\r
45             NyLPC_OnErrorGoto(Error);\r
46         }\r
47     }\r
48 Error:\r
49     i_inst->v=0;\r
50     i_inst->_len=0;\r
51     return NyLPC_TcUrlEncode_ST_ERROR;\r
52 }\r