kuri.c
最終更新:2009/10/16
001: /* kuri.c
002: * URI パージングのサンプル
003: * apr_uri_parse の挙動を確認するプログラム
004: */
005:
006: #define USAGE "Usage: kuri <uri>"
007:
008: #include "apr_general.h"
009: #include "apr_errno.h"
010: #include "apr_strings.h"
011: #include "apr_uri.h"
012:
013: #include "mystab.h"
014:
015: int apr_my_main (int ac, char **av, apr_file_t * astdin, apr_file_t * astdout, apr_file_t * astderr, apr_pool_t * pool) {
016:
017: int error_flag = 0;
018: apr_status_t rv = APR_SUCCESS;
019:
020: char *uri_str = NULL;
021:
022: apr_uri_t uri ;
023:
024: if (ac < 2) {
025: apr_file_printf(astderr, "%s\n", USAGE);
026: error_flag = 1;
027: goto _FINALLY_;
028: }
029:
030: uri_str = av[1];
031:
032: rv = apr_uri_parse(pool, uri_str, &uri);
033: if (rv != APR_SUCCESS) {
034: error_flag = 1;
035: goto _FINALLY_;
036: }
037:
038: if (!uri.port_str) {
039: /* URI にポート番号がない場合には、uri.port_str に値はセットされない。 */
040: /* ここでは、スキーマ文字列からデフォルトポートを推測している。 */
041:
042: uri.port = apr_uri_port_of_scheme(uri.scheme);
043: uri.port_str = apr_itoa(pool, uri.port);
044:
045: }
046:
047: #define XPRINTS(XSTR,X) apr_file_printf(astdout, "%s=[%s]\n", XSTR, uri.X)
048: #define XPRINTD(XSTR,X) apr_file_printf(astdout, "%s=[%d]\n", XSTR, uri.X)
049:
050: XPRINTS("scheme", scheme);
051: XPRINTS("hostinfo", hostinfo);
052: XPRINTS("user", user);
053: XPRINTS("password", password);
054: XPRINTS("hostname", hostname);
055: XPRINTS("port_str", port_str);
056: XPRINTS("path", path);
057: XPRINTS("query", query);
058: XPRINTS("fragment", fragment);
059:
060: XPRINTD("port", port);
061:
062: _FINALLY_:
063:
064: if (error_flag) {
065: if (rv != APR_SUCCESS) {
066: char error_buf[256];
067: apr_file_printf(astderr, "%s\n", apr_strerror(rv, error_buf, sizeof(error_buf)));
068: }
069: apr_file_printf(astderr, "failed!\n");
070: return 1; /* 異常終了 */
071: }
072:
073: apr_file_printf(astdout, "\ndone.\n");
074: return 0; /* 正常終了 */
075:
076: } /* end of main */
![]() | KAKU PROJECT (2009) |