[BACK]Return to timestamp.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / make

Annotation of src/usr.bin/make/timestamp.h, Revision 1.12

1.1       espie       1: #ifndef TIMESTAMP_H
                      2: #define TIMESTAMP_H
                      3:
1.12    ! cheloha     4: /*     $OpenBSD: timestamp.h,v 1.11 2023/08/19 04:21:06 guenther Exp $ */
1.1       espie       5:
                      6: /*
                      7:  * Copyright (c) 2001 Marc Espie.
                      8:  *
                      9:  * Redistribution and use in source and binary forms, with or without
                     10:  * modification, are permitted provided that the following conditions
                     11:  * are met:
                     12:  * 1. Redistributions of source code must retain the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer.
                     14:  * 2. Redistributions in binary form must reproduce the above copyright
                     15:  *    notice, this list of conditions and the following disclaimer in the
                     16:  *    documentation and/or other materials provided with the distribution.
                     17:  *
                     18:  * THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS
                     19:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
                     20:  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
                     21:  * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OPENBSD
                     22:  * PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
                     23:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
                     24:  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     25:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     26:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     27:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
                     28:  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     29:  */
                     30:
                     31: /* This module handles time stamps on files in a relatively high-level way.
                     32:  * Most of the interface is achieved through inlineable code.
                     33:  *
                     34:  * ts_set_out_of_date(t):      set up t so that it is out-of-date.
                     35:  * b = is_out_of_date(t):      check whether t is out-of-date.
                     36:  * ts_set_from_stat(s, t):     grab date out of stat(2) buffer.
1.4       espie      37:  * b = is_strictly_before(t1, t2):
1.1       espie      38:  *                             check whether t1 is before t2.
                     39:  * ts_set_from_time_t(d, t):   create timestamp from time_t.
                     40:  */
                     41:
1.10      espie      42: #define Init_Timestamp()       clock_gettime(CLOCK_REALTIME, &starttime)
1.1       espie      43:
1.9       espie      44: #define TMIN (sizeof(time_t) == sizeof(int32_t) ? INT32_MIN : INT64_MIN)
                     45: #define ts_set_out_of_date(t)  (t).tv_sec = TMIN, (t).tv_nsec = 0
                     46: #define is_out_of_date(t)      ((t).tv_sec == TMIN && (t).tv_nsec == 0)
                     47:
1.1       espie      48: #define ts_set_from_stat(s, t) \
                     49: do { \
1.11      guenther   50:        (t) = (s).st_mtim; \
1.1       espie      51:        if (is_out_of_date(t)) \
                     52:                (t).tv_nsec++; \
                     53: } while (0)
                     54: #define is_strictly_before(t1, t2)     timespeccmp(&(t1), &(t2), <)
                     55: #define ts_set_from_time_t(d, t) \
                     56: do { \
                     57:        (t).tv_sec = d; \
                     58:        (t).tv_nsec = 0; \
                     59:        if (is_out_of_date(t)) \
                     60:                (t).tv_nsec++; \
                     61: } while (0)
                     62:
1.10      espie      63: extern struct timespec starttime;      /* The time at the start
                     64:                                         * of this whole process */
                     65: extern char *time_to_string(struct timespec *);
1.2       espie      66:
1.1       espie      67:
                     68: #endif