Author: yamakenz
Date: Tue Jan 15 08:36:42 2008
New Revision: 5133

Modified:
  trunk/uim/uim-notify.c

Log:
* uim/uim-notify.c
 - (struct uim_notify_agent): New type
 - (uim_notify_get_desc_func, uim_notify_init_func,
   uim_notify_quit_func, uim_notify_info_func,
   uim_notify_fatal_func): Removed
 - (agent_body, agent): New static variable
 - (uim_notify_load_stderr, uim_notify_load, uim_notify_get_desc,
   uim_notify_init, uim_notify_quit, uim_notify_info,
   uim_notify_fatal): Replace uim_notify_*_func() with agent->*() to
   indicate the pluggable notification agent model meaningful


Modified: trunk/uim/uim-notify.c
==============================================================================
--- trunk/uim/uim-notify.c      (original)
+++ trunk/uim/uim-notify.c      Tue Jan 15 08:36:42 2008
@@ -61,6 +61,14 @@
  ((void (*)(void))(uintptr_t)dlsym((handle), (symbol)))
#endif

+struct uim_notify_agent {
+  const uim_notify_desc *(*desc)(void);
+  int (*init)(void);
+  void (*quit)(void);
+  int (*notify_info)(const char *);
+  int (*notify_fatal)(const char *);
+};
+
static void uim_notify_load_stderr(void);

/* builtin notify module */
@@ -76,12 +84,8 @@
  "Standard Error output",
};

-static const uim_notify_desc *(*uim_notify_get_desc_func)(void) = 
uim_notify_stderr_get_desc;
-static int (*uim_notify_init_func)(void) = uim_notify_stderr_init;
-static void (*uim_notify_quit_func)(void) = uim_notify_stderr_quit;
-static int (*uim_notify_info_func)(const char *) = uim_notify_stderr_info;
-static int (*uim_notify_fatal_func)(const char *) = uim_notify_stderr_fatal;
-
+static struct uim_notify_agent agent_body;
+static struct uim_notify_agent *agent = &agent_body;
static void *notify_dlhandle = NULL;
static const uim_notify_desc *notify_desc = &uim_notify_stderr_desc;

@@ -89,18 +93,18 @@
uim_notify_load_stderr(void)
{
  notify_desc = &uim_notify_stderr_desc;
-  uim_notify_init_func  = uim_notify_stderr_init;
-  uim_notify_quit_func  = uim_notify_stderr_quit;
-  uim_notify_info_func  = uim_notify_stderr_info;
-  uim_notify_fatal_func = uim_notify_stderr_fatal;
+  agent->init = uim_notify_stderr_init;
+  agent->quit = uim_notify_stderr_quit;
+  agent->notify_info = uim_notify_stderr_info;
+  agent->notify_fatal = uim_notify_stderr_fatal;
  notify_dlhandle = NULL;
}

int
uim_notify_load(const char *name)
{
-  if (uim_notify_quit_func == NULL) {
-    fprintf(stderr, "uim-notify: notify module is not loaded\n");
+  if (!agent->quit) {
+    fprintf(stderr, "uim-notify: notification agent module is not loaded\n");
    uim_notify_load_stderr();
    return 0;
  }
@@ -108,64 +112,64 @@
  if (strcmp(notify_desc->name, name) == 0) {
    return 1;
  } else if (strcmp(name, "stderr") == 0) {
-    uim_notify_quit_func();
-    if (notify_dlhandle != NULL)
+    agent->quit();
+    if (notify_dlhandle)
      dlclose(notify_dlhandle);
    uim_notify_load_stderr();
  } else {
    char path[PATH_MAX];
    const char *str;

-    uim_notify_quit_func();
-    if (notify_dlhandle != NULL)
+    agent->quit();
+    if (notify_dlhandle)
      dlclose(notify_dlhandle);

snprintf(path, sizeof(path), "%s/%s%s%s", NOTIFY_PLUGIN_PATH, NOTIFY_PLUGIN_PREFIX, name, NOTIFY_PLUGIN_SUFFIX);

    notify_dlhandle = dlopen(path, RTLD_NOW);
-    if ((str = dlerror()) != NULL) {
+    if ((str = dlerror())) {
      fprintf(stderr, "uim-notify: load failed %s(%s)\n", path, str);
      uim_notify_load_stderr();
      return 0;
    }
-    uim_notify_get_desc_func = (const uim_notify_desc *(*)(void))dlfunc(notify_dlhandle, 
"uim_notify_plugin_get_desc");
-    if (!uim_notify_get_desc_func) {
+    agent->desc = (const uim_notify_desc *(*)(void))dlfunc(notify_dlhandle, 
"uim_notify_plugin_get_desc");
+    if (!agent->desc) {
fprintf(stderr, "uim-notify: cannot found 'uim_notify_get_desc()' in %s\n", path);
      dlclose(notify_dlhandle);
      uim_notify_load_stderr();
      return 0;
    }
-    uim_notify_init_func  = (int (*)(void))dlfunc(notify_dlhandle, 
"uim_notify_plugin_init");
-    if (!uim_notify_init_func) {
+    agent->init = (int (*)(void))dlfunc(notify_dlhandle, 
"uim_notify_plugin_init");
+    if (!agent->init) {
fprintf(stderr, "uim-notify: cannot found 'uim_notify_init()' in %s\n", path);
      dlclose(notify_dlhandle);
      uim_notify_load_stderr();
      return 0;
    }
-    uim_notify_quit_func  = (void (*)(void))dlfunc(notify_dlhandle, 
"uim_notify_plugin_quit");
-    if (!uim_notify_quit_func) {
+    agent->quit = (void (*)(void))dlfunc(notify_dlhandle, 
"uim_notify_plugin_quit");
+    if (!agent->quit) {
fprintf(stderr, "uim-notify: cannot found 'uim_notify_quit()' in %s\n", path);
      dlclose(notify_dlhandle);
      uim_notify_load_stderr();
      return 0;
    }
-    uim_notify_info_func  = (int (*)(const char *))dlfunc(notify_dlhandle, 
"uim_notify_plugin_info");
-    if (!uim_notify_info_func) {
+    agent->notify_info = (int (*)(const char *))dlfunc(notify_dlhandle, 
"uim_notify_plugin_info");
+    if (!agent->notify_info) {
fprintf(stderr, "uim-notify: cannot found 'uim_notify_info()' in %s\n", path);
      dlclose(notify_dlhandle);
      uim_notify_load_stderr();
      return 0;
    }
-    uim_notify_fatal_func = (int (*)(const char *))dlfunc(notify_dlhandle, 
"uim_notify_plugin_fatal");
-    if (!uim_notify_fatal_func) {
+    agent->notify_fatal = (int (*)(const char *))dlfunc(notify_dlhandle, 
"uim_notify_plugin_fatal");
+    if (!agent->notify_fatal) {
fprintf(stderr, "uim-notify: cannot found 'uim_notify_fatal()' in %s\n", path);
      dlclose(notify_dlhandle);
      uim_notify_load_stderr();
      return 0;
    }

-    notify_desc = uim_notify_get_desc_func();
-    uim_notify_init_func();
+    notify_desc = agent->desc();
+    agent->init();
  }
  return 1;
}
@@ -173,19 +177,19 @@
const uim_notify_desc *
uim_notify_get_desc(void)
{
-  return uim_notify_get_desc_func();
+  return agent->desc();
}

int
uim_notify_init(void)
{
-  return uim_notify_init_func();
+  return agent->init();
}

void
uim_notify_quit(void)
{
-  uim_notify_quit_func();
+  agent->quit();
  return;
}

@@ -199,7 +203,7 @@
  vsnprintf(msg, sizeof(msg), msg_fmt, ap);
  va_end(ap);

-  return uim_notify_info_func(msg);
+  return agent->notify_info(msg);
}

int
@@ -212,7 +216,7 @@
  vsnprintf(msg, sizeof(msg), msg_fmt, ap);
  va_end(ap);

-  return uim_notify_fatal_func(msg);
+  return agent->notify_fatal(msg);
}

/*
@@ -321,7 +325,7 @@


/*
- * builtin functions
+ * builtin 'stderr' notification agent
 */
static const uim_notify_desc *
uim_notify_stderr_get_desc(void)

Reply via email to