1 #include "NyLPC_cUrlReader.h"
\r
2 #include "NyLPC_utils.h"
\r
4 NyLPC_TBool NyLPC_cUrlReader_getPath(const NyLPC_TChar* i_src,const NyLPC_TChar** path,NyLPC_TInt32* path_len)
\r
6 const NyLPC_TChar* p=i_src;
\r
7 for(;strchr("?#\0",*p)==NULL;p++);
\r
10 return NyLPC_TBool_TRUE;
\r
14 * 指定したURLクエリキーの値を探します。
\r
17 * 例えばキーがabcの場合、[^\?]*\?abc=cdfの場合、=の位置を返します。[^\?]*\?abc&cdfの場合、&の位置を返します。
\r
18 * cdfの場合、[^\?]*\?abc=cdfはNULL,[^\?]*\?abc&cdfは終端'\0'の位置を返します。
\r
20 const NyLPC_TChar* NyLPC_cUrlReader_findKeyValue(const NyLPC_TChar* i_src,const NyLPC_TChar* i_key_name)
\r
22 const NyLPC_TChar* p=i_src;
\r
23 const NyLPC_TChar* k;
\r
26 for(;*p!='\0' && *p!='?';p++);
\r
31 kl=strlen(i_key_name);
\r
35 kn=NyLPC_cFormatTextReader_readWord(p,&k);
\r
36 if(strncmp(i_key_name,k,kl)==0){
\r
40 for(;*p!='\0' && *p!='&';p++);
\r
50 * URLから指定キー[:KEY:]のURLクエリ値[:VALUE:]を取得します。
\r
51 * [:query:] := [^\?]*\?(&[:KEY:](=[:VALUE:])?&)*([:KEY:](=[:VALUE:])?)
\r
52 * [:KEY:] := [a-zA-Z0-9_-]
\r
53 * [:VALUE:] := [^\#&]
\r
55 NyLPC_TBool NyLPC_cUrlReader_getStr(const NyLPC_TChar* i_src,const NyLPC_TChar* i_key_name,const NyLPC_TChar** str,NyLPC_TInt32* str_len)
\r
57 const NyLPC_TChar* p;
\r
58 p=NyLPC_cUrlReader_findKeyValue(i_src,i_key_name);
\r
59 if(p==NULL || *p!='='){
\r
62 return NyLPC_TBool_FALSE;
\r
66 for(;strchr("&#\0",*p)==NULL;p++);
\r
68 return NyLPC_TBool_TRUE;
\r
71 NyLPC_TBool NyLPC_cUrlReader_getUInt(const NyLPC_TChar* i_buf,const NyLPC_TChar* i_key_name,NyLPC_TUInt32* value)
\r
74 const NyLPC_TChar* p;
\r
75 p=NyLPC_cUrlReader_findKeyValue(i_buf,i_key_name);
\r
76 if(p==NULL || *p!='='){
\r
77 return NyLPC_TBool_FALSE;
\r
81 if((*p=='0') && (NyLPC_tolower(*(p+1))=='x'))
\r
86 while(isxdigit((int)(*p))){
\r
87 r=r*16+NyLPC_ctox(*p);
\r
88 if(l!=(r>>4)){return NyLPC_TBool_FALSE;}
\r
94 while(isdigit((int)(*p))){
\r
95 r=r*10+NyLPC_ctoi(*p);
\r
96 if(l!=(r/10)){return NyLPC_TBool_FALSE;}
\r
101 if(strchr("&#\0",*p)==NULL){
\r
102 //An error if it is not terminator
\r
103 return NyLPC_TBool_FALSE;
\r
106 return NyLPC_TBool_TRUE;
\r
108 NyLPC_TBool NyLPC_cUrlReader_getInt(const NyLPC_TChar* i_buf,const NyLPC_TChar* i_key_name,NyLPC_TInt32* value)
\r
111 const NyLPC_TChar* p;
\r
112 p=NyLPC_cUrlReader_findKeyValue(i_buf,i_key_name);
\r
113 if(p==NULL || *p!='='){
\r
114 return NyLPC_TBool_FALSE;
\r
118 if((*p=='0') && (NyLPC_tolower(*(p+1))=='x'))
\r
123 while(isxdigit((int)(*p))){
\r
124 r=r*16+NyLPC_ctox(*p);
\r
125 if(l!=(r>>4)){return NyLPC_TBool_FALSE;}
\r
132 while(isdigit((int)(*p))){
\r
133 r=r*10+NyLPC_ctoi(*p);
\r
134 if(l!=(r/10)){return NyLPC_TBool_FALSE;}
\r
140 while(isdigit((int)(*p))){
\r
141 r=r*10+NyLPC_ctoi(*p);
\r
142 if(l!=(r/10)){return NyLPC_TBool_FALSE;}
\r
149 if(strchr("&#\0",*p)==NULL){
\r
150 //An error if it is not terminator
\r
151 return NyLPC_TBool_FALSE;
\r
154 return NyLPC_TBool_TRUE;
\r