1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
/*-------------------------------------------------------------------------
*
* ps_status.h
*
* Defines macros to show backend status on the ps status line.
* Unfortunately this is system dpendent.
*
*-------------------------------------------------------------------------
*/
#ifndef PS_STATUS_H
#define PS_STATUS_H
#ifdef HAVE_SETPROCTITLE
extern char Ps_status_buffer[];
#undef PS_DEFINE_BUFFER
#define PS_INIT_STATUS(argc, argv, execname, username, hostname, dbname) \
do { \
sprintf(Ps_status_buffer, "%s %s %s %s", execname, hostname, username, dbname); \
setproctitle("%s", Ps_status_buffer); \
} while (0)
#define PS_CLEAR_STATUS() \
do { setproctitle("%s", Ps_status_buffer); } while (0)
#define PS_SET_STATUS(status) \
do { setproctitle("%s %s", Ps_status_buffer, (status)); } while (0)
#define PS_STATUS (Ps_status_buffer)
#elif defined(linux)
#include <string.h>
extern char *ps_status_buffer;
#define PS_DEFINE_BUFFER \
char *ps_status_buffer = NULL
#define PS_INIT_STATUS(argc, argv, execname, username, hostname, dbname) \
do { \
int i; \
for (i = 0; i < (argc); i++) { \
memset((argv)[i], 0, strlen((argv)[i])); \
} \
ps_status_buffer = (argv)[0]; \
sprintf(ps_status_buffer, "%s %s %s %s ", execname, username, hostname, dbname); \
ps_status_buffer += strlen(ps_status_buffer); \
ps_status_buffer[0] = '\0'; \
} while (0)
#define PS_CLEAR_STATUS() \
do { \
if (ps_status_buffer) \
memset(ps_status_buffer, 0, strlen(ps_status_buffer)); \
} while (0)
#define PS_SET_STATUS(status) \
do { \
if (ps_status_buffer) \
{ \
PS_CLEAR_STATUS(); \
strcpy(ps_status_buffer, status); \
} \
} while (0)
#define PS_STATUS (ps_status_buffer ? ps_status_buffer : "")
#else /* !linux */
extern char Ps_status_buffer[];
#undef PS_DEFINE_BUFFER
#define PS_INIT_STATUS(argc, argv, execname, username, hostname, dbname) \
do { \
int i; \
Assert(argc >= 5); \
argv[0] = execname; \
argv[1] = hostname; \
argv[2] = username; \
argv[3] = dbname; \
argv[4] = Ps_status_buffer; \
for (i = 5; i < argc; i++) \
argv[i] = ""; /* blank them */ \
} while (0)
#define PS_CLEAR_STATUS() \
do { Ps_status_buffer[0] = '\0'; } while (0)
#define PS_SET_STATUS(status) \
do { strcpy(Ps_status_buffer, (status)); } while (0)
#define PS_STATUS (Ps_status_buffer)
#endif
#ifdef NO_PS_STATUS
#undef PS_DEFINE_BUFFER
#define PS_INIT_STATUS(argc, argv, execname, username, hostname, dbname)
#define PS_CLEAR_STATUS()
#define PS_SET_STATUS(status) do { if ((status)); } while (0)
#define PS_STATUS ""
#endif /* !linux */
#endif /* PS_STATUS_H */
|