summaryrefslogtreecommitdiff
path: root/runit
diff options
context:
space:
mode:
Diffstat (limited to 'runit')
-rw-r--r--runit/chpst.c2
-rw-r--r--runit/svlogd.c106
2 files changed, 69 insertions, 39 deletions
diff --git a/runit/chpst.c b/runit/chpst.c
index 0c26d836e..1bc8e18a3 100644
--- a/runit/chpst.c
+++ b/runit/chpst.c
@@ -54,7 +54,7 @@ struct globals {
54 long limitc; 54 long limitc;
55 long limitr; 55 long limitr;
56 long limitt; 56 long limitt;
57 int nicelvl; 57 int nicelvl;
58}; 58};
59#define G (*(struct globals*)&bb_common_bufsiz1) 59#define G (*(struct globals*)&bb_common_bufsiz1)
60#define set_user (G.set_user) 60#define set_user (G.set_user)
diff --git a/runit/svlogd.c b/runit/svlogd.c
index cdf4e424b..bf46ef7f8 100644
--- a/runit/svlogd.c
+++ b/runit/svlogd.c
@@ -37,31 +37,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 37
38#define FMT_PTIME 30 38#define FMT_PTIME 30
39 39
40static unsigned verbose; 40struct logdir {
41static int linemax = 1000;
42////static int buflen = 1024;
43static int linelen;
44
45static char **fndir;
46static int fdwdir;
47static int wstat;
48static unsigned nearest_rotate;
49
50static char *line;
51static smallint exitasap;
52static smallint rotateasap;
53static smallint reopenasap;
54static smallint linecomplete = 1;
55
56static smallint tmaxflag;
57
58static char repl;
59static const char *replace = "";
60
61static sigset_t *blocked_sigset;
62static int fl_flag_0;
63
64static struct logdir {
65 ////char *btmp; 41 ////char *btmp;
66 /* pattern list to match, in "aa\0bb\0\cc\0\0" form */ 42 /* pattern list to match, in "aa\0bb\0\cc\0\0" form */
67 char *inst; 43 char *inst;
@@ -81,8 +57,64 @@ static struct logdir {
81 char fnsave[FMT_PTIME]; 57 char fnsave[FMT_PTIME];
82 char match; 58 char match;
83 char matcherr; 59 char matcherr;
84} *dir; 60};
85static unsigned dirn; 61
62
63struct globals {
64 struct logdir *dir;
65 unsigned verbose;
66 int linemax;
67 ////int buflen;
68 int linelen;
69
70 int fdwdir;
71 char **fndir;
72 int wstat;
73 unsigned nearest_rotate;
74
75 smallint exitasap;
76 smallint rotateasap;
77 smallint reopenasap;
78 smallint linecomplete;
79 smallint tmaxflag;
80
81 char repl;
82 const char *replace;
83 int fl_flag_0;
84 unsigned dirn;
85
86 sigset_t blocked_sigset;
87};
88#define G (*(struct globals*)ptr_to_globals)
89#define dir (G.dir )
90#define verbose (G.verbose )
91#define linemax (G.linemax )
92#define buflen (G.buflen )
93#define linelen (G.linelen )
94#define fndir (G.fndir )
95#define fdwdir (G.fdwdir )
96#define wstat (G.wstat )
97#define nearest_rotate (G.nearest_rotate)
98#define exitasap (G.exitasap )
99#define rotateasap (G.rotateasap )
100#define reopenasap (G.reopenasap )
101#define linecomplete (G.linecomplete )
102#define tmaxflag (G.tmaxflag )
103#define repl (G.repl )
104#define replace (G.replace )
105#define blocked_sigset (G.blocked_sigset)
106#define fl_flag_0 (G.fl_flag_0 )
107#define dirn (G.dirn )
108#define INIT_G() do { \
109 PTR_TO_GLOBALS = xzalloc(sizeof(G)); \
110 linemax = 1000; \
111 /*buflen = 1024;*/ \
112 linecomplete = 1; \
113 replace = ""; \
114} while (0)
115
116#define line bb_common_bufsiz1
117
86 118
87#define FATAL "fatal: " 119#define FATAL "fatal: "
88#define WARNING "warning: " 120#define WARNING "warning: "
@@ -700,14 +732,14 @@ static int buffer_pread(/*int fd, */char *s, unsigned len)
700 } 732 }
701 } 733 }
702 734
703 sigprocmask(SIG_UNBLOCK, blocked_sigset, NULL); 735 sigprocmask(SIG_UNBLOCK, &blocked_sigset, NULL);
704 i = nearest_rotate - now; 736 i = nearest_rotate - now;
705 if (i > 1000000) 737 if (i > 1000000)
706 i = 1000000; 738 i = 1000000;
707 if (i <= 0) 739 if (i <= 0)
708 i = 1; 740 i = 1;
709 poll(&input, 1, i * 1000); 741 poll(&input, 1, i * 1000);
710 sigprocmask(SIG_BLOCK, blocked_sigset, NULL); 742 sigprocmask(SIG_BLOCK, &blocked_sigset, NULL);
711 743
712 i = ndelay_read(0, s, len); 744 i = ndelay_read(0, s, len);
713 if (i >= 0) 745 if (i >= 0)
@@ -814,7 +846,6 @@ static void logmatch(struct logdir *ld)
814int svlogd_main(int argc, char **argv); 846int svlogd_main(int argc, char **argv);
815int svlogd_main(int argc, char **argv) 847int svlogd_main(int argc, char **argv)
816{ 848{
817 sigset_t ss;
818 char *r,*l,*b; 849 char *r,*l,*b;
819 ssize_t stdin_cnt = 0; 850 ssize_t stdin_cnt = 0;
820 int i; 851 int i;
@@ -822,7 +853,7 @@ int svlogd_main(int argc, char **argv)
822 unsigned timestamp = 0; 853 unsigned timestamp = 0;
823 void* (*memRchr)(const void *, int, size_t) = memchr; 854 void* (*memRchr)(const void *, int, size_t) = memchr;
824 855
825#define line bb_common_bufsiz1 856 INIT_G();
826 857
827 opt_complementary = "tt:vv"; 858 opt_complementary = "tt:vv";
828 opt = getopt32(argv, "r:R:l:b:tv", 859 opt = getopt32(argv, "r:R:l:b:tv",
@@ -866,13 +897,12 @@ int svlogd_main(int argc, char **argv)
866 * with the same stdin */ 897 * with the same stdin */
867 fl_flag_0 = fcntl(0, F_GETFL); 898 fl_flag_0 = fcntl(0, F_GETFL);
868 899
869 blocked_sigset = &ss; 900 sigemptyset(&blocked_sigset);
870 sigemptyset(&ss); 901 sigaddset(&blocked_sigset, SIGTERM);
871 sigaddset(&ss, SIGTERM); 902 sigaddset(&blocked_sigset, SIGCHLD);
872 sigaddset(&ss, SIGCHLD); 903 sigaddset(&blocked_sigset, SIGALRM);
873 sigaddset(&ss, SIGALRM); 904 sigaddset(&blocked_sigset, SIGHUP);
874 sigaddset(&ss, SIGHUP); 905 sigprocmask(SIG_BLOCK, &blocked_sigset, NULL);
875 sigprocmask(SIG_BLOCK, &ss, NULL);
876 sig_catch(SIGTERM, sig_term_handler); 906 sig_catch(SIGTERM, sig_term_handler);
877 sig_catch(SIGCHLD, sig_child_handler); 907 sig_catch(SIGCHLD, sig_child_handler);
878 sig_catch(SIGALRM, sig_alarm_handler); 908 sig_catch(SIGALRM, sig_alarm_handler);