~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/errmsg_stderr/errmsg_stderr.cc

  • Committer: Mark Atwood
  • Date: 2008-10-16 11:33:16 UTC
  • mto: (520.1.13 drizzle)
  • mto: This revision was merged to the branch mainline in revision 530.
  • Revision ID: mark@fallenpegasus.com-20081016113316-ff6jdt31ck90sjdh
an implemention of the errmsg plugin

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* drizzle/plugin/errmsg_stderr/errmsg_stderr.cc */
 
2
 
 
3
/* need to define DRIZZLE_SERVER to get inside the THD */
 
4
#define DRIZZLE_SERVER 1
 
5
#include <drizzled/server_includes.h>
 
6
#include <drizzled/plugin_errmsg.h>
 
7
 
 
8
#include <stdio.h>  /* for vsnprintf */
 
9
#include <stdarg.h>  /* for va_list */
 
10
#include <unistd.h>  /* for write(2) */
 
11
 
 
12
bool errmsg_stderr_func (THD *thd, int priority, const char *format, va_list ap)
 
13
{
 
14
  char msgbuf[MAX_MSG_LEN];
 
15
  int prv, wrv;
 
16
 
 
17
  if (priority > 0)
 
18
    prv = vsnprintf(msgbuf, MAX_MSG_LEN, format, ap);
 
19
  if (prv < 0) return true;
 
20
 
 
21
  /* a single write has a OS level thread lock
 
22
     so there is no need to have mutexes guarding this write,
 
23
  */
 
24
  wrv= write(2, msgbuf, prv);
 
25
  if ((wrv < 0) || (wrv != prv)) return true;
 
26
 
 
27
  return false;
 
28
}
 
29
 
 
30
static int errmsg_stderr_plugin_init(void *p)
 
31
{
 
32
  errmsg_t *l= (errmsg_t *) p;
 
33
 
 
34
  l->errmsg_func= errmsg_stderr_func;
 
35
 
 
36
  return 0;
 
37
}
 
38
 
 
39
static int errmsg_stderr_plugin_deinit(void *p)
 
40
{
 
41
  errmsg_st *l= (errmsg_st *) p;
 
42
 
 
43
  l->errmsg_func= NULL;
 
44
 
 
45
  return 0;
 
46
}
 
47
 
 
48
mysql_declare_plugin(errmsg_stderr)
 
49
{
 
50
  DRIZZLE_LOGGER_PLUGIN,
 
51
  "errmsg_stderr",
 
52
  "0.1",
 
53
  "Mark Atwood <mark@fallenpegasus.com>",
 
54
  "Error Messages to stderr",
 
55
  PLUGIN_LICENSE_GPL,
 
56
  errmsg_stderr_plugin_init,
 
57
  errmsg_stderr_plugin_deinit,
 
58
  NULL,   /* status variables */
 
59
  NULL,  /* system variables */
 
60
  NULL
 
61
}
 
62
mysql_declare_plugin_end;