forked from scanmem/scanmem
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshow_message.h
68 lines (54 loc) · 2.35 KB
/
show_message.h
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
/*
Message printing helper functions.
Copyright (C) 2010 WANG Lu <coolwanglu(a)gmail.com>
This file is part of libscanmem.
This library is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* This file declares all types of output functions, in order to provide well-formatted messages that a front-end can understand.
*
* Basically, all data goes through stdout, and all messages (to user or front-end) go through stderr.
*
* In stderr:
* all messages prefixed with 'error:' will be considered a fatal error; front-end may notify user to restart backend
* all messages prefixed with 'warn:' will be considered a nonfatal error.
* all messages prefixed with 'info:' will be ignored (by the front-end)
*
* To display messages to user only, use show_user; nothing will be prepended, and the message will be ignored if scanmem is running as a backend.
*/
#ifndef SHOW_MESSAGE_H
#define SHOW_MESSAGE_H
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
/* prepend 'info: ', output to stderr */
void show_info(const char *fmt, ...);
/* prepend 'error: ', output to stderr */
void show_error(const char *fmt, ...);
/* prepend 'warn: ', output to stderr */
void show_warn(const char *fmt, ...);
/* display message only when in debug mode */
void show_debug(const char *fmt, ...);
/* display message only when not running as a backend */
void show_user(const char *fmt, ...);
/* pager support routines */
FILE *get_pager(FILE *fallback_output);
static inline void close_pager(FILE *pager)
{
if (pager != NULL && pager != stdout && pager != stderr) {
if (pclose(pager) == -1 && errno != EPIPE)
show_warn("pclose() error: %s\n", strerror(errno));
signal(SIGPIPE, SIG_DFL);
}
}
#endif /* SHOW_MESSAGE_H */