1951a39d68df598db08dfced8b4707755864a0492Ying Wang/*
2951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (C) 2008 The Android Open Source Project
3951a39d68df598db08dfced8b4707755864a0492Ying Wang * All rights reserved.
4951a39d68df598db08dfced8b4707755864a0492Ying Wang *
5951a39d68df598db08dfced8b4707755864a0492Ying Wang * Redistribution and use in source and binary forms, with or without
6951a39d68df598db08dfced8b4707755864a0492Ying Wang * modification, are permitted provided that the following conditions
7951a39d68df598db08dfced8b4707755864a0492Ying Wang * are met:
8951a39d68df598db08dfced8b4707755864a0492Ying Wang *  * Redistributions of source code must retain the above copyright
9951a39d68df598db08dfced8b4707755864a0492Ying Wang *    notice, this list of conditions and the following disclaimer.
10951a39d68df598db08dfced8b4707755864a0492Ying Wang *  * Redistributions in binary form must reproduce the above copyright
11951a39d68df598db08dfced8b4707755864a0492Ying Wang *    notice, this list of conditions and the following disclaimer in
12951a39d68df598db08dfced8b4707755864a0492Ying Wang *    the documentation and/or other materials provided with the
13951a39d68df598db08dfced8b4707755864a0492Ying Wang *    distribution.
14951a39d68df598db08dfced8b4707755864a0492Ying Wang *
15951a39d68df598db08dfced8b4707755864a0492Ying Wang * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16951a39d68df598db08dfced8b4707755864a0492Ying Wang * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17951a39d68df598db08dfced8b4707755864a0492Ying Wang * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18951a39d68df598db08dfced8b4707755864a0492Ying Wang * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19951a39d68df598db08dfced8b4707755864a0492Ying Wang * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20951a39d68df598db08dfced8b4707755864a0492Ying Wang * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21951a39d68df598db08dfced8b4707755864a0492Ying Wang * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22951a39d68df598db08dfced8b4707755864a0492Ying Wang * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23951a39d68df598db08dfced8b4707755864a0492Ying Wang * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24951a39d68df598db08dfced8b4707755864a0492Ying Wang * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25951a39d68df598db08dfced8b4707755864a0492Ying Wang * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26951a39d68df598db08dfced8b4707755864a0492Ying Wang * SUCH DAMAGE.
27951a39d68df598db08dfced8b4707755864a0492Ying Wang */
28951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _TIME_H_
29951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _TIME_H_
30951a39d68df598db08dfced8b4707755864a0492Ying Wang
31951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <sys/cdefs.h>
32951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <sys/time.h>
33951a39d68df598db08dfced8b4707755864a0492Ying Wang
34951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __ARCH_SI_UID_T __kernel_uid32_t
35951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <asm/siginfo.h>
36951a39d68df598db08dfced8b4707755864a0492Ying Wang#undef __ARCH_SI_UID_T
37951a39d68df598db08dfced8b4707755864a0492Ying Wang
38951a39d68df598db08dfced8b4707755864a0492Ying Wang__BEGIN_DECLS
39951a39d68df598db08dfced8b4707755864a0492Ying Wang
40951a39d68df598db08dfced8b4707755864a0492Ying Wangextern time_t   time(time_t *);
41951a39d68df598db08dfced8b4707755864a0492Ying Wangextern int      nanosleep(const struct timespec *, struct timespec *);
42951a39d68df598db08dfced8b4707755864a0492Ying Wang
43951a39d68df598db08dfced8b4707755864a0492Ying Wangextern char *strtotimeval(const char *str, struct timeval *tv);
44951a39d68df598db08dfced8b4707755864a0492Ying Wang
45951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct tm {
46951a39d68df598db08dfced8b4707755864a0492Ying Wang   int     tm_sec;         /* seconds */
47951a39d68df598db08dfced8b4707755864a0492Ying Wang   int     tm_min;         /* minutes */
48951a39d68df598db08dfced8b4707755864a0492Ying Wang   int     tm_hour;        /* hours */
49951a39d68df598db08dfced8b4707755864a0492Ying Wang   int     tm_mday;        /* day of the month */
50951a39d68df598db08dfced8b4707755864a0492Ying Wang   int     tm_mon;         /* month */
51951a39d68df598db08dfced8b4707755864a0492Ying Wang   int     tm_year;        /* year */
52951a39d68df598db08dfced8b4707755864a0492Ying Wang   int     tm_wday;        /* day of the week */
53951a39d68df598db08dfced8b4707755864a0492Ying Wang   int     tm_yday;        /* day in the year */
54951a39d68df598db08dfced8b4707755864a0492Ying Wang   int     tm_isdst;       /* daylight saving time */
55951a39d68df598db08dfced8b4707755864a0492Ying Wang
56951a39d68df598db08dfced8b4707755864a0492Ying Wang   long int tm_gmtoff;     /* Seconds east of UTC.  */
57951a39d68df598db08dfced8b4707755864a0492Ying Wang   const char *tm_zone;    /* Timezone abbreviation.  */
58951a39d68df598db08dfced8b4707755864a0492Ying Wang
59951a39d68df598db08dfced8b4707755864a0492Ying Wang};
60951a39d68df598db08dfced8b4707755864a0492Ying Wang
61951a39d68df598db08dfced8b4707755864a0492Ying Wang/* defining TM_ZONE indicates that we have a "timezone abbreviation" field in
62951a39d68df598db08dfced8b4707755864a0492Ying Wang * struct tm, the value should be the field name
63951a39d68df598db08dfced8b4707755864a0492Ying Wang */
64951a39d68df598db08dfced8b4707755864a0492Ying Wang#define   TM_ZONE   tm_zone
65951a39d68df598db08dfced8b4707755864a0492Ying Wang
66951a39d68df598db08dfced8b4707755864a0492Ying Wangextern char* asctime(const struct tm* a);
67951a39d68df598db08dfced8b4707755864a0492Ying Wangextern char* asctime_r(const struct tm* a, char* buf);
68951a39d68df598db08dfced8b4707755864a0492Ying Wang
69951a39d68df598db08dfced8b4707755864a0492Ying Wang/* Return the difference between TIME1 and TIME0.  */
70951a39d68df598db08dfced8b4707755864a0492Ying Wangextern double difftime (time_t __time1, time_t __time0);
71951a39d68df598db08dfced8b4707755864a0492Ying Wangextern time_t mktime (struct tm *a);
72951a39d68df598db08dfced8b4707755864a0492Ying Wang
73951a39d68df598db08dfced8b4707755864a0492Ying Wangextern struct tm*  localtime(const time_t *t);
74951a39d68df598db08dfced8b4707755864a0492Ying Wangextern struct tm*  localtime_r(const time_t *timep, struct tm *result);
75951a39d68df598db08dfced8b4707755864a0492Ying Wang
76951a39d68df598db08dfced8b4707755864a0492Ying Wangextern struct tm*  gmtime(const time_t *timep);
77951a39d68df598db08dfced8b4707755864a0492Ying Wangextern struct tm*  gmtime_r(const time_t *timep, struct tm *result);
78951a39d68df598db08dfced8b4707755864a0492Ying Wang
79951a39d68df598db08dfced8b4707755864a0492Ying Wangextern char*       strptime(const char *buf, const char *fmt, struct tm *tm);
80951a39d68df598db08dfced8b4707755864a0492Ying Wangextern size_t      strftime(char *s, size_t max, const char *format, const struct tm *tm);
81951a39d68df598db08dfced8b4707755864a0492Ying Wang
82951a39d68df598db08dfced8b4707755864a0492Ying Wangextern char *ctime(const time_t *timep);
83951a39d68df598db08dfced8b4707755864a0492Ying Wangextern char *ctime_r(const time_t *timep, char *buf);
84951a39d68df598db08dfced8b4707755864a0492Ying Wang
85951a39d68df598db08dfced8b4707755864a0492Ying Wangextern void  tzset(void);
86951a39d68df598db08dfced8b4707755864a0492Ying Wang
87951a39d68df598db08dfced8b4707755864a0492Ying Wang/* global includes */
88951a39d68df598db08dfced8b4707755864a0492Ying Wangextern char*     tzname[];
89951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 0 /* MISSING FROM BIONIC */
90951a39d68df598db08dfced8b4707755864a0492Ying Wangextern int       daylight;
91951a39d68df598db08dfced8b4707755864a0492Ying Wangextern long int  timezone;
92951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /* MISSING */
93951a39d68df598db08dfced8b4707755864a0492Ying Wang
94951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CLOCKS_PER_SEC     1000000
95951a39d68df598db08dfced8b4707755864a0492Ying Wang
96951a39d68df598db08dfced8b4707755864a0492Ying Wangextern clock_t   clock(void);
97951a39d68df598db08dfced8b4707755864a0492Ying Wang
98951a39d68df598db08dfced8b4707755864a0492Ying Wang/* BIONIC: extra linux clock goodies */
99951a39d68df598db08dfced8b4707755864a0492Ying Wangextern int clock_getres(int, struct timespec *);
100951a39d68df598db08dfced8b4707755864a0492Ying Wangextern int clock_gettime(int, struct timespec *);
101951a39d68df598db08dfced8b4707755864a0492Ying Wang
102951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CLOCK_REALTIME             0
103951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CLOCK_MONOTONIC            1
104951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CLOCK_PROCESS_CPUTIME_ID   2
105951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CLOCK_THREAD_CPUTIME_ID    3
106951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CLOCK_REALTIME_HR          4
107951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CLOCK_MONOTONIC_HR         5
108951a39d68df598db08dfced8b4707755864a0492Ying Wang
109951a39d68df598db08dfced8b4707755864a0492Ying Wangextern int  timer_create(int, struct sigevent*, timer_t*);
110951a39d68df598db08dfced8b4707755864a0492Ying Wangextern int  timer_delete(timer_t);
111951a39d68df598db08dfced8b4707755864a0492Ying Wangextern int  timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue);
112951a39d68df598db08dfced8b4707755864a0492Ying Wangextern int  timer_gettime(timer_t timerid, struct itimerspec *value);
113951a39d68df598db08dfced8b4707755864a0492Ying Wangextern int  timer_getoverrun(timer_t  timerid);
114951a39d68df598db08dfced8b4707755864a0492Ying Wang
115951a39d68df598db08dfced8b4707755864a0492Ying Wang__END_DECLS
116951a39d68df598db08dfced8b4707755864a0492Ying Wang
117951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /* _TIME_H_ */
118