s/qmail
4.2.29a
Next generation secure email transport
Loading...
Searching...
No Matches
sqmail-4.2.29a
src
predate.c
Go to the documentation of this file.
1
#include <sys/types.h>
2
#include <time.h>
3
#include <unistd.h>
4
#include "
datetime.h
"
5
#include "wait.h"
6
#include "fd.h"
7
#include "fmt.h"
8
#include "logmsg.h"
9
#include "buffer.h"
10
#include "
exit.h
"
11
#include "sig.h"
12
13
#define WHO "predate"
14
15
static
char
*montab[12] = {
16
"Jan"
,
"Feb"
,
"Mar"
,
"Apr"
,
"May"
,
"Jun"
,
"Jul"
,
"Aug"
,
"Sep"
,
"Oct"
,
"Nov"
,
"Dec"
17
};
18
19
char
num
[FMT_ULONG];
20
char
outbuf
[1024];
21
22
int
main
(
int
argc,
char
**argv)
23
{
24
time_t
now
;
25
struct
tm *tm;
26
struct
datetime
dt
;
27
datetime_sec
utc;
28
datetime_sec
local
;
29
int
minutes;
30
int
pi[2];
31
buffer
bo
;
32
int
wstat;
33
int
pid;
34
35
sig_pipeignore();
36
37
if
(!argv[1])
38
logmsg(
WHO
,100,USAGE,
"predate child"
);
39
40
if
(pipe(pi) == -1)
41
logmsg(
WHO
,111,FATAL,
"unable to create pipe"
);
42
43
switch
(pid = fork()) {
44
case
-1:
45
logmsg(
WHO
,111,FATAL,
"unable to fork"
);
46
case
0:
47
close(pi[1]);
48
if
(fd_move(0,pi[0]) == -1)
49
logmsg(
WHO
,111,FATAL,
"unable to set up fds"
);
50
sig_pipedefault();
51
execvp(argv[1],argv + 1);
52
logmsg(
WHO
,111,FATAL,B(
"unable to run: "
,argv[1]));
53
}
54
close(pi[0]);
55
buffer_init(&
bo
,
write
,pi[1],
outbuf
,
sizeof
(
outbuf
));
56
57
time(&
now
);
58
59
tm = gmtime(&
now
);
60
dt
.
year
= tm->tm_year;
61
dt
.
mon
= tm->tm_mon;
62
dt
.
mday
= tm->tm_mday;
63
dt
.
hour
= tm->tm_hour;
64
dt
.
min
= tm->tm_min;
65
dt
.
sec
= tm->tm_sec;
66
utc =
datetime_untai
(&
dt
);
/* utc == now, if gmtime ignores leap seconds */
67
68
tm = localtime(&
now
);
69
dt
.
year
= tm->tm_year;
70
dt
.
mon
= tm->tm_mon;
71
dt
.
mday
= tm->tm_mday;
72
dt
.
hour
= tm->tm_hour;
73
dt
.
min
= tm->tm_min;
74
dt
.
sec
= tm->tm_sec;
75
local
=
datetime_untai
(&
dt
);
76
77
buffer_puts(&
bo
,
"Date: "
);
78
buffer_put(&
bo
,
num
,fmt_uint(
num
,
dt
.
mday
));
79
buffer_puts(&
bo
,
" "
);
80
buffer_puts(&
bo
,montab[
dt
.
mon
]);
81
buffer_puts(&
bo
,
" "
);
82
buffer_put(&
bo
,
num
,fmt_uint(
num
,
dt
.
year
+ 1900));
83
buffer_puts(&
bo
,
" "
);
84
buffer_put(&
bo
,
num
,fmt_uint0(
num
,
dt
.
hour
,2));
85
buffer_puts(&
bo
,
":"
);
86
buffer_put(&
bo
,
num
,fmt_uint0(
num
,
dt
.
min
,2));
87
buffer_puts(&
bo
,
":"
);
88
buffer_put(&
bo
,
num
,fmt_uint0(
num
,
dt
.
sec
,2));
89
90
if
(
local
< utc) {
91
minutes = (utc -
local
+ 30) / 60;
92
buffer_puts(&
bo
,
" -"
);
93
buffer_put(&
bo
,
num
,fmt_uint0(
num
,minutes / 60,2));
94
buffer_put(&
bo
,
num
,fmt_uint0(
num
,minutes % 60,2));
95
}
96
else
{
97
minutes = (
local
- utc + 30) / 60;
98
buffer_puts(&
bo
,
" +"
);
99
buffer_put(&
bo
,
num
,fmt_uint0(
num
,minutes / 60,2));
100
buffer_put(&
bo
,
num
,fmt_uint0(
num
,minutes % 60,2));
101
}
102
103
buffer_puts(&
bo
,
"\n"
);
104
buffer_copy(&
bo
,buffer_0);
105
buffer_flush(&
bo
);
106
close(pi[1]);
107
108
if
(wait_pid(&wstat,pid) == -1)
109
logmsg(
WHO
,111,FATAL,
"wait failed"
);
110
if
(wait_crashed(wstat))
111
logmsg(
WHO
,111,FATAL,
"child crashed"
);
112
_exit
(wait_exitcode(wstat));
113
}
main
int main()
Definition:
chkshsgr.c:6
bo
buffer bo
Definition:
columnt.c:14
datetime.h
datetime_sec
long datetime_sec
Definition:
datetime.h:15
datetime_untai
datetime_sec datetime_untai()
exit.h
_exit
void _exit()
now
datetime_sec now()
Definition:
now.c:5
outbuf
char outbuf[1024]
Definition:
predate.c:20
num
char num[FMT_ULONG]
Definition:
predate.c:19
WHO
#define WHO
Definition:
predate.c:13
local
char * local
Definition:
qmail-getpw.c:18
dt
struct datetime dt
Definition:
qmail-queue.c:33
datetime
Definition:
datetime.h:4
datetime::hour
int hour
Definition:
datetime.h:5
datetime::mon
int mon
Definition:
datetime.h:11
datetime::min
int min
Definition:
datetime.h:6
datetime::mday
int mday
Definition:
datetime.h:9
datetime::sec
int sec
Definition:
datetime.h:7
datetime::year
int year
Definition:
datetime.h:12
write
void write()
Generated on Thu Feb 29 2024 20:44:52 for s/qmail by
1.9.6