#1
by ぷぷぷジューシー » 3年前
コード:
int geturlparserfunc(const char* name, char* rhost, char* rpath)
{
int bmfunc_rlen = 0;
int inputlen = strlen(name)+1;
char32_t inp32b[50];
int arraycount1 = 0, arraycount2 = 0;
mbstate_t mbstate = 0;
char temphost[MB_LEN_MAX+1];
char temppath[MB_LEN_MAX+1];
int while_n = 0;
int slashconunt = 0, colon = 0;
int rpathpp = 0, rhostpp = 0;
rhost = '\0', rpath = '\0';
while (1){
bmfunc_rlen = mbrtoc32(&inp32b[arraycount1], &name[arraycount2], MB_LEN_MAX, &mbstate);
if ( -1== bmfunc_rlen ){
printf("エラーが発生しました\n");
printf("エンコードエラー又はバイト数が足りませんの可能性があります。");
printf("エラー size_t サイズ : %zu\n", bmfunc_rlen);
break;
} else if ( -2 == bmfunc_rlen ){
printf("エラーが発生しました\n");
printf("マルチバイト文字の可能性があります。");
printf("エラー size_t サイズ : %zu\n", bmfunc_rlen);
break;
} else if ( -3 == bmfunc_rlen ){
arraycount1 += 1;
continue;
} else if (0 == bmfunc_rlen ){
break;
} else if ( 0 < bmfunc_rlen ){
arraycount1 += 1;
arraycount2 += bmfunc_rlen;
}
}
while (arraycount1 > while_n){
while_n += 1;
if (':' == inp32b[while_n] || '/' == inp32b[while_n]){
if ( ':' == inp32b[while_n]){
colon = 1;
}
if ('/' == inp32b[while_n]){
slashconunt+=1;
}
}
// rpath
if ( 3 < slashconunt && 1 == colon) {
bmfunc_rlen = c32rtomb(temppath ,inp32b[while_n], &mbstate);
if (-1 == bmfunc_rlen){
printf("エラーが発生しました\n");
printf("有効なワイド文字ではありません\n");
printf("エラー size_t サイズ : %zu\n", bmfunc_rlen);
break;
}
rpath = malloc(bmfunc_rlen);
sprintf(rpath, "%s", temppath);
}
// rhost
if ( 2 == slashconunt && 1 == colon){
bmfunc_rlen = c32rtomb(temphost ,inp32b[while_n], &mbstate);
if ((size_t)(-1) == bmfunc_rlen){
printf("エラーが発生しました\n");
printf("有効なワイド文字ではありません\n");
printf("エラー size_t サイズ : %zu\n", bmfunc_rlen);
break;
}
rhost = malloc(bmfunc_rlen);
sprintf(rhost, "%s", temphost);
}
}
printf("%s\n", rpath);
arraycount1 = 0, arraycount2 = 0, slashconunt = 0, colon = 0 , bmfunc_rlen = 0;
}
[code]
int geturlparserfunc(const char* name, char* rhost, char* rpath)
{
int bmfunc_rlen = 0;
int inputlen = strlen(name)+1;
char32_t inp32b[50];
int arraycount1 = 0, arraycount2 = 0;
mbstate_t mbstate = 0;
char temphost[MB_LEN_MAX+1];
char temppath[MB_LEN_MAX+1];
int while_n = 0;
int slashconunt = 0, colon = 0;
int rpathpp = 0, rhostpp = 0;
rhost = '\0', rpath = '\0';
while (1){
bmfunc_rlen = mbrtoc32(&inp32b[arraycount1], &name[arraycount2], MB_LEN_MAX, &mbstate);
if ( -1== bmfunc_rlen ){
printf("エラーが発生しました\n");
printf("エンコードエラー又はバイト数が足りませんの可能性があります。");
printf("エラー size_t サイズ : %zu\n", bmfunc_rlen);
break;
} else if ( -2 == bmfunc_rlen ){
printf("エラーが発生しました\n");
printf("マルチバイト文字の可能性があります。");
printf("エラー size_t サイズ : %zu\n", bmfunc_rlen);
break;
} else if ( -3 == bmfunc_rlen ){
arraycount1 += 1;
continue;
} else if (0 == bmfunc_rlen ){
break;
} else if ( 0 < bmfunc_rlen ){
arraycount1 += 1;
arraycount2 += bmfunc_rlen;
}
}
while (arraycount1 > while_n){
while_n += 1;
if (':' == inp32b[while_n] || '/' == inp32b[while_n]){
if ( ':' == inp32b[while_n]){
colon = 1;
}
if ('/' == inp32b[while_n]){
slashconunt+=1;
}
}
// rpath
if ( 3 < slashconunt && 1 == colon) {
bmfunc_rlen = c32rtomb(temppath ,inp32b[while_n], &mbstate);
if (-1 == bmfunc_rlen){
printf("エラーが発生しました\n");
printf("有効なワイド文字ではありません\n");
printf("エラー size_t サイズ : %zu\n", bmfunc_rlen);
break;
}
rpath = malloc(bmfunc_rlen);
sprintf(rpath, "%s", temppath);
}
// rhost
if ( 2 == slashconunt && 1 == colon){
bmfunc_rlen = c32rtomb(temphost ,inp32b[while_n], &mbstate);
if ((size_t)(-1) == bmfunc_rlen){
printf("エラーが発生しました\n");
printf("有効なワイド文字ではありません\n");
printf("エラー size_t サイズ : %zu\n", bmfunc_rlen);
break;
}
rhost = malloc(bmfunc_rlen);
sprintf(rhost, "%s", temphost);
}
}
printf("%s\n", rpath);
arraycount1 = 0, arraycount2 = 0, slashconunt = 0, colon = 0 , bmfunc_rlen = 0;
}
[/code]