summaryrefslogtreecommitdiff
path: root/usr/src/cmd/lms/glue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/lms/glue.cpp')
-rw-r--r--usr/src/cmd/lms/glue.cpp349
1 files changed, 0 insertions, 349 deletions
diff --git a/usr/src/cmd/lms/glue.cpp b/usr/src/cmd/lms/glue.cpp
deleted file mode 100644
index 53cf442a19..0000000000
--- a/usr/src/cmd/lms/glue.cpp
+++ /dev/null
@@ -1,349 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2004-2008 Intel Corp. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * - Neither the name of Intel Corp. nor the names of its
- * contributors may be used to endorse or promote products derived from this
- * software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL Intel Corp. OR THE CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *******************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <cstdlib>
-#include <cstdio>
-#include <cstring>
-#include <sys/types.h>
-#include <dlfcn.h>
-#include "glue.h"
-
-#ifdef __sun
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#endif // __sun
-
-#define PARSER_MAX 32
-
-typedef struct parser_s {
- unsigned int count;
- char *line[PARSER_MAX];
-} parser_t;
-
-
-static void parser_init(parser_t *cfg)
-{
- if (!cfg) {
- return;
- }
-
- cfg->count = 0;
-}
-
-static int parser_add(parser_t *cfg, char *buf)
-{
- if ((!cfg) || (cfg->count > PARSER_MAX)) {
- return -1;
- }
-
- cfg->line[cfg->count] = strdup(buf);
- if (cfg->line[cfg->count]) {
- cfg->count ++;
- }
-
- return 0;
-}
-
-static int parser_length(parser_t *cfg)
-{
- if (!cfg) {
- return 0;
- }
-
- return cfg->count;
-}
-
-static char *parser_get(parser_t *cfg, unsigned int index)
-{
- if ((!cfg) || (index >= cfg->count)) {
- return NULL;
- }
-
- return (cfg->line[index]);
-}
-
-
-static int parser_read(parser_t *cfg, FILE *fp)
-{
- char line[512];
- char *head, *tail;
- int len;
-
- if ((!fp) || (!cfg)) {
- return -1;
- }
-
- while (fgets(line, 511, fp)) {
- head = line;
- while (*head == 0x20 || *head == '\t') {
- head ++;
- }
- if ((*head == '#') || (*head == '\n') ||
- (*head == '\r') || (*head == '\0')) {
- continue;
- }
- len = strlen(head);
- tail = head + len - 1;
- if (tail <= head) {
- continue;
- }
- while ((*tail == '\r') || (*tail == '\n')) {
- tail --;
- }
- *(tail + 1) = '\0';
-
- parser_add(cfg, head);
- }
- return 0;
-}
-
-static void parser_free(parser_t *cfg)
-{
- unsigned int i;
-
- for (i = 0; i < cfg->count; i ++) {
- free(cfg->line[i]);
- }
-}
-
-
-/* glue functions */
-
-void glue::handle_init(int index, const char *file)
-{
- int i = index;
-
- if (!file) {
- return;
- }
- printf("file:%s\n", file);
-
- funcs[i].handle = dlopen(file, RTLD_NOW);
- if (!funcs[i].handle) {
- printf("can't open:%s, %s\n", file, dlerror());
- return;
- }
-
- funcs[i].init_funcs = (lms_init_t)dlsym(funcs[i].handle,
- LMS_INIT_FUNC_NAME);
- if (!funcs[i].init_funcs) {
- printf("dl error:%s\n", dlerror());
- return;
- }
-
- if (LMS_OK != funcs[i].init_funcs()) {
- return;
- }
-
- funcs[i].version_funcs = (lms_version_t)dlsym(funcs[i].handle,
- LMS_VERSION_FUNC_NAME);
- funcs[i].pre_funcs = (lms_pre_t)dlsym(funcs[i].handle,
- LMS_PRE_FUNC_NAME);
- funcs[i].retry_funcs = (lms_retry_t)dlsym(funcs[i].handle,
- LMS_RETRY_FUNC_NAME);
- funcs[i].post_funcs = (lms_post_t)dlsym(funcs[i].handle,
- LMS_POST_FUNC_NAME);
- funcs[i].deinit_funcs = (lms_deinit_t)dlsym(funcs[i].handle,
- LMS_DEINIT_FUNC_NAME);
-}
-
-int glue::mem_init(void)
-{
- int i;
-
- funcs = new glue_funcs[cnt];
- if (!funcs) {
- return LMS_ERROR;
- }
-
- for (i = 0;i < cnt; i++) {
- funcs[i].handle = NULL;
- funcs[i].init_funcs = NULL;
- funcs[i].version_funcs = NULL;
- funcs[i].pre_funcs = NULL;
- funcs[i].retry_funcs = NULL;
- funcs[i].post_funcs = NULL;
- funcs[i].deinit_funcs = NULL;
- }
-
- return LMS_OK;
-}
-
-glue::glue() : funcs(NULL)
-{
-}
-
-glue::~glue()
-{
-}
-
-
-int glue::init(void)
-{
- FILE *fp;
- parser_t cfg;
- int i;
-
- parser_init(&cfg);
-
- fp = fopen(LMS_PLUGIN_CONFIG_FILE, "rb");
- if ((!fp) || (parser_read(&cfg, fp) != 0)) {
- cnt = 0;
- if (fp) {
- fclose(fp);
- }
- return LMS_OK;
- }
-
- do {
- cnt = parser_length(&cfg);
- if (0 == cnt) {
- break;
- }
- if (mem_init()) {
- break;
- }
- for (i = 0; i < cnt; i++) {
- handle_init(i, parser_get(&cfg, i));
- }
- } while (0);
-
- fclose(fp);
- parser_free(&cfg);
- return LMS_OK;
-}
-
-void glue::deinit(void)
-{
- int i;
-
- if (!funcs) {
- return;
- }
-
- for (i = 0; i < cnt; i++) {
- if (funcs[i].deinit_funcs) {
- funcs[i].deinit_funcs();
- }
- if (funcs[i].handle) {
- dlclose(funcs[i].handle);
- }
- }
-
- delete[] funcs;
-}
-
-void glue::version(unsigned char version)
-{
- int i;
-
- if (!funcs) {
- return;
- }
-
- for (i = 0; i < cnt; i++) {
- if (!funcs[i].version_funcs) {
- continue;
- }
- funcs[i].version_funcs(version);
- }
-}
-
-int glue::preprocess(unsigned char *buff, int len)
-{
- int i;
- int ret = LMS_ACCEPTED;
-
- if (!funcs) {
- return ret;
- }
-
- for (i = 0; i < cnt; i++) {
- if (!funcs[i].pre_funcs) {
- continue;
- }
- ret = funcs[i].pre_funcs(buff, len);
- if (ret != LMS_ACCEPTED) {
- return ret;
- }
- }
-
- return LMS_ACCEPTED;
-}
-
-int glue::retry(unsigned char *buff, int len)
-{
- int i;
- int ret = LMS_ACCEPTED;
-
- if (!funcs) {
- return ret;
- }
-
- for (i = 0; i < cnt; i++) {
- if (!funcs[i].retry_funcs) {
- continue;
- }
- ret = funcs[i].retry_funcs(buff, len);
- if (ret != LMS_ACCEPTED) {
- return ret;
- }
- }
-
- return LMS_ACCEPTED;
-}
-
-
-int glue::postprocess(unsigned char *buff, int len, int status)
-{
- int i;
- int ret = LMS_ACCEPTED;
-
- if (!funcs) {
- return ret;
- }
-
- for (i = 0; i < cnt; i++) {
- if (!funcs[i].post_funcs) {
- continue;
- }
- ret = funcs[i].post_funcs(buff, len, status);
- if (ret != LMS_ACCEPTED) {
- return ret;
- }
- }
-
- return LMS_ACCEPTED;
-}
-