null+****@clear*****
null+****@clear*****
2012年 6月 6日 (水) 14:46:32 JST
Ryo Onodera 2012-06-06 14:46:32 +0900 (Wed, 06 Jun 2012) New Revision: 31838ff73dcbdfcf3884ad54be44e6d950be9078 Log: Define ngx_http_groonga_grn_obj_to_ngx_buf Modified files: src/nginx-module/ngx_http_groonga_module.c Modified: src/nginx-module/ngx_http_groonga_module.c (+22 -7) =================================================================== --- src/nginx-module/ngx_http_groonga_module.c 2012-06-15 16:14:16 +0900 (13387f5) +++ src/nginx-module/ngx_http_groonga_module.c 2012-06-06 14:46:32 +0900 (87d8791) @@ -106,6 +106,23 @@ ngx_http_groonga_context_receive(grn_ctx *context, char **result, unsigned int * return rc; } +static ngx_buf_t * +ngx_http_groonga_grn_obj_to_ngx_buf(ngx_pool_t *pool, grn_obj *object) +{ + ngx_buf_t *buffer; + buffer = ngx_pcalloc(pool, sizeof(ngx_buf_t)); + if (buffer == NULL) { + return NULL; + } + + /* adjust the pointers of the buffer */ + buffer->pos = (u_char *)GRN_TEXT_VALUE(object); + buffer->last = (u_char *)GRN_TEXT_VALUE(object) + GRN_TEXT_LEN(object); + buffer->memory = 1; /* this buffer is in memory */ + + return buffer; +} + static ngx_int_t ngx_http_groonga_handler(ngx_http_request_t *r) { @@ -121,6 +138,8 @@ ngx_http_groonga_handler(ngx_http_request_t *r) unsigned int result_size = 0; unsigned char *body_data; + grn_obj body; + ngx_http_groonga_loc_conf_t *loc_conf; loc_conf = ngx_http_get_module_loc_conf(r, ngx_http_groonga_module); @@ -182,21 +201,17 @@ ngx_http_groonga_handler(ngx_http_request_t *r) r->headers_out.content_type.data = (u_char *) content_type; /* allocate a buffer for your response body */ - b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)); + GRN_TEXT_SET(context, &body, body_data, result_size); + b = ngx_http_groonga_grn_obj_to_ngx_buf(r->pool, &body); if (b == NULL) { return NGX_HTTP_INTERNAL_SERVER_ERROR; } + b->last_buf = 1; /* this is the last buffer in the buffer chain */ /* attach this buffer to the buffer chain */ out.buf = b; out.next = NULL; - /* adjust the pointers of the buffer */ - b->pos = body_data; - b->last = body_data + result_size; - b->memory = 1; /* this buffer is in memory */ - b->last_buf = 1; /* this is the last buffer in the buffer chain */ - /* set the status line */ r->headers_out.status = NGX_HTTP_OK; r->headers_out.content_length_n = result_size;