Path: blob/main/sys/contrib/openzfs/lib/libspl/timestamp.c
48378 views
// SPDX-License-Identifier: CDDL-1.01/*2* CDDL HEADER START3*4* The contents of this file are subject to the terms of the5* Common Development and Distribution License (the "License").6* You may not use this file except in compliance with the License.7*8* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE9* or https://opensource.org/licenses/CDDL-1.0.10* See the License for the specific language governing permissions11* and limitations under the License.12*13* When distributing Covered Code, include this CDDL HEADER in each14* file and include the License file at usr/src/OPENSOLARIS.LICENSE.15* If applicable, add the following below this CDDL HEADER, with the16* fields enclosed by brackets "[]" replaced with your own identifying17* information: Portions Copyright [yyyy] [name of copyright owner]18*19* CDDL HEADER END20*/21/*22* Copyright 2009 Sun Microsystems, Inc. All rights reserved.23* Use is subject to license terms.24*/2526#include <stdio.h>27#include <time.h>28#include <langinfo.h>29#include "statcommon.h"3031#ifndef _DATE_FMT32#ifdef D_T_FMT33#define _DATE_FMT D_T_FMT34#else /* D_T_FMT */35#define _DATE_FMT "%+"36#endif /* !D_T_FMT */37#endif /* _DATE_FMT */3839/*40* Print timestamp as decimal reprentation of time_t value (-T u was specified)41* or in date(1) format (-T d was specified).42*/43void44print_timestamp(uint_t timestamp_fmt)45{46time_t t = time(NULL);47static const char *fmt = NULL;4849/* We only need to retrieve this once per invocation */50if (fmt == NULL)51fmt = nl_langinfo(_DATE_FMT);5253if (timestamp_fmt == UDATE) {54(void) printf("%lld\n", (longlong_t)t);55} else if (timestamp_fmt == DDATE) {56char dstr[64];57struct tm tm;58int len;5960len = strftime(dstr, sizeof (dstr), fmt, localtime_r(&t, &tm));61if (len > 0)62(void) printf("%s\n", dstr);63}64}6566/*67* Return timestamp as decimal reprentation (in string) of time_t68* value (-T u was specified) or in date(1) format (-T d was specified).69*/70void71get_timestamp(uint_t timestamp_fmt, char *buf, int len)72{73time_t t = time(NULL);74static const char *fmt = NULL;7576/* We only need to retrieve this once per invocation */77if (fmt == NULL)78fmt = nl_langinfo(_DATE_FMT);7980if (timestamp_fmt == UDATE) {81(void) snprintf(buf, len, "%lld", (longlong_t)t);82} else if (timestamp_fmt == DDATE) {83struct tm tm;84strftime(buf, len, fmt, localtime_r(&t, &tm));85}86}8788/*89* Format the provided time stamp to human readable format90*/91void92format_timestamp(time_t t, char *buf, int len)93{94struct tm tm;95static const char *fmt = NULL;9697if (t == 0) {98snprintf(buf, len, "-");99return;100}101102/* We only need to retrieve this once per invocation */103if (fmt == NULL)104fmt = nl_langinfo(_DATE_FMT);105strftime(buf, len, fmt, localtime_r(&t, &tm));106}107108109