⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jk_context.c

📁 jboss与apache集成的中间件,详情请参看文档说明.
💻 C
字号:
/* *  Copyright 1999-2004 The Apache Software Foundation * *  Licensed under the Apache License, Version 2.0 (the "License"); *  you may not use this file except in compliance with the License. *  You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * *  Unless required by applicable law or agreed to in writing, software *  distributed under the License is distributed on an "AS IS" BASIS, *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *  See the License for the specific language governing permissions and *  limitations under the License. *//*************************************************************************** * Description: Context handling (Autoconf)                                * * Author:      Henri Gomez <hgomez@apache.org>                            * * Version:     $Revision: 1.12 $                                           * ***************************************************************************/#include "jk_global.h"#include "jk_context.h"#include "jk_ajp_common.h"/* * Set the virtual name of the context  */int context_set_virtual(jk_context_t *c, char *virt){    if (c) {        if (virt) {            c->virt = jk_pool_strdup(&c->p, virt);            if (!c->virt)                return JK_FALSE;        }        return JK_TRUE;    }    return JK_FALSE;}/* * Init the context info struct */int context_open(jk_context_t *c, char *virt){    if (c) {        jk_open_pool(&c->p, c->buf, sizeof(jk_pool_atom_t) * SMALL_POOL_SIZE);        c->size = 0;        c->capacity = 0;        c->contexts = NULL;        return context_set_virtual(c, virt);    }    return JK_FALSE;}/* * Close the context info struct */int context_close(jk_context_t *c){    if (c) {        jk_close_pool(&c->p);        return JK_TRUE;    }    return JK_FALSE;}/* * Allocate and open context */int context_alloc(jk_context_t **c, char *virt){    if (c)        return context_open(*c =                            (jk_context_t *)calloc(1, sizeof(jk_context_t)),                            virt);    return JK_FALSE;}/* * Close and destroy context */int context_free(jk_context_t **c){    if (c && *c) {        context_close(*c);        free(*c);        *c = NULL;        return JK_TRUE;    }    return JK_FALSE;}/* * Ensure there will be memory in context info to store Context Bases */static int context_realloc(jk_context_t *c){    if (c->size == c->capacity) {        jk_context_item_t **contexts;        int capacity = c->capacity + CBASE_INC_SIZE;        contexts =            (jk_context_item_t **)jk_pool_alloc(&c->p,                                                sizeof(jk_context_item_t *) *                                                capacity);        if (!contexts)            return JK_FALSE;        if (c->capacity && c->contexts)            memcpy(contexts, c->contexts,                   sizeof(jk_context_item_t *) * c->capacity);        c->contexts = contexts;        c->capacity = capacity;    }    return JK_TRUE;}/* * Ensure there will be memory in context info to URIS */static int context_item_realloc(jk_context_t *c, jk_context_item_t *ci){    if (ci->size == ci->capacity) {        char **uris;        int capacity = ci->capacity + URI_INC_SIZE;        uris = (char **)jk_pool_alloc(&c->p, sizeof(char *) * capacity);        if (!uris)            return JK_FALSE;        memcpy(uris, ci->uris, sizeof(char *) * ci->capacity);        ci->uris = uris;        ci->capacity = capacity;    }    return JK_TRUE;}/* * Locate a context base in context list */jk_context_item_t *context_find_base(jk_context_t *c, char *cbase){    int i;    jk_context_item_t *ci;    if (!c || !cbase)        return NULL;    for (i = 0; i < c->size; i++) {        ci = c->contexts[i];        if (!ci)            continue;        if (!strcmp(ci->cbase, cbase))            return ci;    }    return NULL;}/* * Locate an URI in a context item */char *context_item_find_uri(jk_context_item_t *ci, char *uri){    int i;    if (!ci || !uri)        return NULL;    for (i = 0; i < ci->size; i++) {        if (!strcmp(ci->uris[i], uri))            return ci->uris[i];    }    return NULL;}void context_dump_uris(jk_context_t *c, char *cbase, FILE * f){    jk_context_item_t *ci;    int i;    ci = context_find_base(c, cbase);    if (!ci)        return;    for (i = 0; i < ci->size; i++)        fprintf(f, "/%s/%s\n", ci->cbase, ci->uris[i]);    fflush(f);}/* * Add a new context item to context */jk_context_item_t *context_add_base(jk_context_t *c, char *cbase){    jk_context_item_t *ci;    if (!c || !cbase)        return NULL;    /* Check if the context base was not allready created */    ci = context_find_base(c, cbase);    if (ci)        return ci;    if (context_realloc(c) != JK_TRUE)        return NULL;    ci = (jk_context_item_t *)jk_pool_alloc(&c->p, sizeof(jk_context_item_t));    if (!ci)        return NULL;    c->contexts[c->size] = ci;    c->size++;    ci->cbase = jk_pool_strdup(&c->p, cbase);    ci->status = 0;    ci->size = 0;    ci->capacity = 0;    ci->uris = NULL;    return ci;}/* * Add a new URI to a context item */int context_add_uri(jk_context_t *c, char *cbase, char *uri){    jk_context_item_t *ci;    if (!uri)        return JK_FALSE;    /* Get/Create the context base */    ci = context_add_base(c, cbase);    if (!ci)        return JK_FALSE;    if (context_item_find_uri(ci, uri) != NULL)        return JK_TRUE;    if (context_item_realloc(c, ci) == JK_FALSE)        return JK_FALSE;    ci->uris[ci->size] = jk_pool_strdup(&c->p, uri);    if (ci->uris[ci->size] == NULL)        return JK_FALSE;    ci->size++;    return JK_TRUE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -