/*
* Amanda, The Advanced Maryland Automatic Network Disk Archiver
* Copyright (c) 1991-1999 University of Maryland at College Park
* Copyright (c) 2007-2012 Zmanda, Inc. All Rights Reserved.
* Copyright (c) 2013-2016 Carbonite, Inc. All Rights Reserved.
* All Rights Reserved.
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of U.M. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. U.M. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*
* U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.
* BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* Authors: the Amanda Development Team. Its members are listed in a
* file named AUTHORS, in the root directory of this distribution.
*/
#include "amanda.h"
#include "timestamp.h"
#include "conffile.h"
#include <glib.h>
/*
* Construct a datestamp (YYYYMMDD) from a time_t.
*/
char * get_datestamp_from_time(time_t when) {
struct tm *tm;
if(when == (time_t)0) {
when = time((time_t *)NULL);
}
tm = localtime(&when);
return g_strdup_printf("%04d%02d%02d",
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday);
}
/*
* Construct a timestamp (YYYYMMDDHHMMSS) from a time_t.
*/
char * get_timestamp_from_time(time_t when) {
struct tm *tm;
if(when == (time_t)0) {
when = time((time_t *)NULL);
}
tm = localtime(&when);
return g_strdup_printf("%04d%02d%02d%02d%02d%02d",
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
tm->tm_hour, tm->tm_min, tm->tm_sec);
}
char * get_proper_stamp_from_time(time_t when) {
/* note that this is reimplemented in perl in perl/Amanda/Util.swg */
if (getconf_boolean(CNF_USETIMESTAMPS)) {
return get_timestamp_from_time(when);
} else {
return get_datestamp_from_time(when);
}
}
time_t get_time_from_timestamp(char *timestamp)
{
struct tm tm;
char t[5];
time_t tt;
tm.tm_year = 0;
tm.tm_mon = 0;
tm.tm_mday = 1;
tm.tm_hour = 0;
tm.tm_min = 0;
tm.tm_sec = 0;
if (strlen(timestamp) >= 4) {
memcpy(t, timestamp, 4);
t[4]='\0';
tm.tm_year = atoi(t) - 1900;
}
if (strlen(timestamp) >= 6) {
memcpy(t, timestamp+4, 2);
t[2]='\0';
tm.tm_mon = atoi(t) - 1;
}
if (strlen(timestamp) >= 8) {
memcpy(t, timestamp+6, 2);
t[2]='\0';
tm.tm_mday = atoi(t);
}
if (strlen(timestamp) >= 10) {
memcpy(t, timestamp+8, 2);
t[2]='\0';
tm.tm_hour = atoi(t);
}
if (strlen(timestamp) >= 12) {
memcpy(t, timestamp+10, 2);
t[2]='\0';
tm.tm_min = atoi(t);
}
if (strlen(timestamp) >= 14) {
memcpy(t, timestamp+12, 2);
t[2]='\0';
tm.tm_sec = atoi(t);
}
tm.tm_wday = 0;
tm.tm_yday = 0;
tm.tm_isdst = -1;
tt = mktime(&tm);
return(tt);
}
time_state_t get_timestamp_state(char * timestamp) {
if (timestamp == NULL || *timestamp == '\0') {
return TIME_STATE_REPLACE;
} else if (g_str_equal(timestamp, "X")) {
return TIME_STATE_UNDEF;
} else {
return TIME_STATE_SET;
}
}
char * get_undef_timestamp(void) {
return strdup("X");
}