mystab.c
最終更新:2009/12/5
001: /* APR を使ったコードのスタブ */
002:
003: #include "apr_general.h"
004: #include "apr_file_io.h"
005:
006: #include "mystab.h"
007:
008: int main (int ac, char const * const *av, char const * const *env) {
009: apr_status_t rv;
010: apr_pool_t * pool = NULL;
011: apr_file_t * apr_stdout = NULL;
012: apr_file_t * apr_stdin = NULL;
013: apr_file_t * apr_stderr = NULL;
014: char error_buf[256];
015: int result=0;
016:
017: /* 前処理。APR の初期化、メモリプール作成、標準入力・標準出力・標準エラーの準備 */
018:
019: if (APR_SUCCESS != (rv=apr_app_initialize(&ac, &av, &env))) {
020: fprintf(stderr,
021: "ERROR: apr_initialize: %s\n",
022: apr_strerror(rv, error_buf, sizeof(error_buf)));
023: return 1;
024: }
025:
026: if (APR_SUCCESS != (rv=apr_pool_create(&pool, NULL))) {
027: fprintf(stderr,
028: "ERROR: apr_pool_create_core: %s\n",
029: apr_strerror(rv, error_buf, sizeof(error_buf)));
030: result = 1;
031: goto _FINALLY_;
032: }
033:
034: if (APR_SUCCESS != (rv = apr_file_open_stderr(&apr_stderr, pool))) {
035: fprintf(stderr,
036: "ERROR: apr_file_open_stderr: %s\n",
037: apr_strerror(rv, error_buf, sizeof(error_buf)));
038: result = 1;
039: goto _FINALLY_;
040: }
041:
042: if (APR_SUCCESS != (rv = apr_file_open_stdout(&apr_stdout, pool))) {
043: apr_file_printf(apr_stderr,
044: "ERROR: apr_file_open_stdout: %s\n",
045: apr_strerror(rv, error_buf, sizeof(error_buf)));
046: result = 1;
047: goto _FINALLY_;
048: }
049:
050: if (APR_SUCCESS != (rv = apr_file_open_stdin(&apr_stdin, pool))) {
051: apr_file_printf(apr_stderr,
052: "ERROR: apr_file_open_stdin: %s\n",
053: apr_strerror(rv, error_buf, sizeof(error_buf)));
054: result = 1;
055: goto _FINALLY_;
056: }
057:
058: /* apr_my_main の処理 */
059:
060: if (0 != apr_my_main(ac, (char**)av, apr_stdin, apr_stdout, apr_stderr, pool)) {
061: result = 1; /* エラー */
062: }
063:
064: _FINALLY_:
065:
066: if (apr_stdin) {
067: apr_file_close(apr_stdin);
068: apr_stdin = NULL;
069: }
070: if (apr_stdout) {
071: apr_file_close(apr_stdout);
072: apr_stdout = NULL;
073: }
074: if (apr_stderr) {
075: apr_file_close(apr_stderr);
076: apr_stderr = NULL;
077: }
078: if (pool) {
079: apr_pool_destroy(pool);
080: pool = NULL;
081: }
082: apr_terminate();
083:
084: return result;
085:
086: }
![]() | KAKU PROJECT (2009) |