1*8ccd4a63SDavid du Colombier #include "headers.h"
2*8ccd4a63SDavid du Colombier
3*8ccd4a63SDavid du Colombier void
smbplan9time2datetime(ulong time,int tzoff,ushort * datep,ushort * timep)4*8ccd4a63SDavid du Colombier smbplan9time2datetime(ulong time, int tzoff, ushort *datep, ushort *timep)
5*8ccd4a63SDavid du Colombier {
6*8ccd4a63SDavid du Colombier Tm *tm;
7*8ccd4a63SDavid du Colombier if (tzoff < 0)
8*8ccd4a63SDavid du Colombier time -= (ulong)-tzoff;
9*8ccd4a63SDavid du Colombier else
10*8ccd4a63SDavid du Colombier time += tzoff;
11*8ccd4a63SDavid du Colombier tm = gmtime(time);
12*8ccd4a63SDavid du Colombier *datep = (tm->mday) | ((tm->mon + 1) << 5) | ((tm->year - 80) << 9);
13*8ccd4a63SDavid du Colombier *timep = (tm->sec >> 1) | (tm->min << 5) | (tm->hour << 11);
14*8ccd4a63SDavid du Colombier }
15*8ccd4a63SDavid du Colombier
16*8ccd4a63SDavid du Colombier ulong
smbdatetime2plan9time(ushort date,ushort time,int tzoff)17*8ccd4a63SDavid du Colombier smbdatetime2plan9time(ushort date, ushort time, int tzoff)
18*8ccd4a63SDavid du Colombier {
19*8ccd4a63SDavid du Colombier Tm tm;
20*8ccd4a63SDavid du Colombier strcpy(tm.zone, "GMT");
21*8ccd4a63SDavid du Colombier tm.mday = date & 0x1f;
22*8ccd4a63SDavid du Colombier tm.mon = ((date >> 5) & 0xf) - 1;
23*8ccd4a63SDavid du Colombier tm.year = (date >> 9) + 80;
24*8ccd4a63SDavid du Colombier tm.yday = 0;
25*8ccd4a63SDavid du Colombier tm.sec = (time & 0x1f) << 1;
26*8ccd4a63SDavid du Colombier tm.min = (time >> 5) & 0x3f;
27*8ccd4a63SDavid du Colombier tm.hour = time >> 11;
28*8ccd4a63SDavid du Colombier smblogprint(-1, "smbdatetime2plan9time: converting %d/%d/%d %d:%d:%d\n",
29*8ccd4a63SDavid du Colombier tm.year + 1900, tm.mon + 1, tm.mday, tm.hour, tm.min, tm.sec);
30*8ccd4a63SDavid du Colombier return tm2sec(&tm) - tzoff;
31*8ccd4a63SDavid du Colombier }
32*8ccd4a63SDavid du Colombier
33*8ccd4a63SDavid du Colombier vlong
smbplan9time2time(ulong time)34*8ccd4a63SDavid du Colombier smbplan9time2time(ulong time)
35*8ccd4a63SDavid du Colombier {
36*8ccd4a63SDavid du Colombier return ((vlong)time + 11644473600LL) * 10000000;
37*8ccd4a63SDavid du Colombier }
38*8ccd4a63SDavid du Colombier
39*8ccd4a63SDavid du Colombier ulong
smbtime2plan9time(vlong nttime)40*8ccd4a63SDavid du Colombier smbtime2plan9time(vlong nttime)
41*8ccd4a63SDavid du Colombier {
42*8ccd4a63SDavid du Colombier return (nttime / 10000000 - 11644473600LL);
43*8ccd4a63SDavid du Colombier }
44*8ccd4a63SDavid du Colombier
45*8ccd4a63SDavid du Colombier ulong
smbplan9time2utime(ulong time,int tzoff)46*8ccd4a63SDavid du Colombier smbplan9time2utime(ulong time, int tzoff)
47*8ccd4a63SDavid du Colombier {
48*8ccd4a63SDavid du Colombier if (tzoff < 0)
49*8ccd4a63SDavid du Colombier time -= (ulong)-tzoff;
50*8ccd4a63SDavid du Colombier else
51*8ccd4a63SDavid du Colombier time += tzoff;
52*8ccd4a63SDavid du Colombier return time;
53*8ccd4a63SDavid du Colombier }
54*8ccd4a63SDavid du Colombier
55*8ccd4a63SDavid du Colombier ulong
smbutime2plan9time(ulong utime,int tzoff)56*8ccd4a63SDavid du Colombier smbutime2plan9time(ulong utime, int tzoff)
57*8ccd4a63SDavid du Colombier {
58*8ccd4a63SDavid du Colombier if (tzoff < 0)
59*8ccd4a63SDavid du Colombier utime += (ulong)-tzoff;
60*8ccd4a63SDavid du Colombier else
61*8ccd4a63SDavid du Colombier utime -= tzoff;
62*8ccd4a63SDavid du Colombier return utime;
63*8ccd4a63SDavid du Colombier }
64