summaryrefslogtreecommitdiffstats
path: root/generic/tclClock.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2024-04-11 20:23:12 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2024-04-11 20:23:12 (GMT)
commit6e2f2d9f70b82b2fde0a18f1a1a93d62e6ef7bea (patch)
treeabb31bdbb0bf884167d9b53ecf78cec1ea9c4bf7 /generic/tclClock.c
parentd30c751a91851ee65f0e4bcb89b30311e5baca65 (diff)
parent99d959852d8f600c2aa00f02305896287c067adf (diff)
downloadtcl-6e2f2d9f70b82b2fde0a18f1a1a93d62e6ef7bea.zip
tcl-6e2f2d9f70b82b2fde0a18f1a1a93d62e6ef7bea.tar.gz
tcl-6e2f2d9f70b82b2fde0a18f1a1a93d62e6ef7bea.tar.bz2
Merge 8.7
Diffstat (limited to 'generic/tclClock.c')
-rw-r--r--generic/tclClock.c921
1 files changed, 437 insertions, 484 deletions
diff --git a/generic/tclClock.c b/generic/tclClock.c
index 026c47b..1845af0 100644
--- a/generic/tclClock.c
+++ b/generic/tclClock.c
@@ -89,38 +89,32 @@ static void GetYearWeekDay(TclDateFields *, int);
static void GetGregorianEraYearDay(TclDateFields *, int);
static void GetMonthDay(TclDateFields *);
static Tcl_WideInt WeekdayOnOrBefore(int, Tcl_WideInt);
-static Tcl_ObjCmdProc ClockClicksObjCmd;
-static Tcl_ObjCmdProc ClockConvertlocaltoutcObjCmd;
-
+static Tcl_ObjCmdProc ClockClicksObjCmd;
+static Tcl_ObjCmdProc ClockConvertlocaltoutcObjCmd;
static int ClockGetDateFields(void *clientData,
Tcl_Interp *interp, TclDateFields *fields,
Tcl_Obj *timezoneObj, int changeover);
-static Tcl_ObjCmdProc ClockGetdatefieldsObjCmd;
-static Tcl_ObjCmdProc ClockGetjuliandayfromerayearmonthdayObjCmd;
-static Tcl_ObjCmdProc ClockGetjuliandayfromerayearweekdayObjCmd;
-static Tcl_ObjCmdProc ClockGetenvObjCmd;
-static Tcl_ObjCmdProc ClockMicrosecondsObjCmd;
-static Tcl_ObjCmdProc ClockMillisecondsObjCmd;
-static Tcl_ObjCmdProc ClockSecondsObjCmd;
-static Tcl_ObjCmdProc ClockFormatObjCmd;
-static Tcl_ObjCmdProc ClockScanObjCmd;
-static int ClockScanCommit(
- DateInfo *info,
+static Tcl_ObjCmdProc ClockGetdatefieldsObjCmd;
+static Tcl_ObjCmdProc ClockGetjuliandayfromerayearmonthdayObjCmd;
+static Tcl_ObjCmdProc ClockGetjuliandayfromerayearweekdayObjCmd;
+static Tcl_ObjCmdProc ClockGetenvObjCmd;
+static Tcl_ObjCmdProc ClockMicrosecondsObjCmd;
+static Tcl_ObjCmdProc ClockMillisecondsObjCmd;
+static Tcl_ObjCmdProc ClockSecondsObjCmd;
+static Tcl_ObjCmdProc ClockFormatObjCmd;
+static Tcl_ObjCmdProc ClockScanObjCmd;
+static int ClockScanCommit(DateInfo *info,
ClockFmtScnCmdArgs *opts);
-static int ClockFreeScan(
- DateInfo *info,
+static int ClockFreeScan(DateInfo *info,
Tcl_Obj *strObj, ClockFmtScnCmdArgs *opts);
-static int ClockCalcRelTime(
- DateInfo *info);
-static Tcl_ObjCmdProc ClockAddObjCmd;
-static int ClockValidDate(
- DateInfo *,
+static int ClockCalcRelTime(DateInfo *info);
+static Tcl_ObjCmdProc ClockAddObjCmd;
+static int ClockValidDate(DateInfo *,
ClockFmtScnCmdArgs *, int stage);
static struct tm * ThreadSafeLocalTime(const time_t *);
static size_t TzsetIfNecessary(void);
static void ClockDeleteCmdProc(void *);
-
-static Tcl_ObjCmdProc ClockSafeCatchCmd;
+static Tcl_ObjCmdProc ClockSafeCatchCmd;
/*
* Structure containing description of "native" clock commands to create.
*/
@@ -133,7 +127,7 @@ struct ClockCommand {
* will always have the ClockClientData sent
* to it, but may well ignore this data. */
CompileProc *compileProc; /* The compiler for the command. */
- void *clientData; /* Any clientData to give the command (if NULL
+ void *clientData; /* Any clientData to give the command (if NULL
* a reference to ClockClientData will be sent) */
};
@@ -182,7 +176,7 @@ TclClockInit(
char cmdName[50]; /* Buffer large enough to hold the string
*::tcl::clock::GetJulianDayFromEraYearMonthDay
* plus a terminating NUL. */
- Command *cmdPtr;
+ Command *cmdPtr;
ClockClientData *data;
int i;
@@ -266,7 +260,7 @@ TclClockInit(
cmdPtr->compileProc = clockCmdPtr->compileProc ?
clockCmdPtr->compileProc : TclCompileBasicMin0ArgCmd;
}
- cmdPtr = (Command *)Tcl_CreateObjCommand(interp,
+ cmdPtr = (Command *) Tcl_CreateObjCommand(interp,
"::tcl::unsupported::clock::configure",
ClockConfigureObjCmd, data, ClockDeleteCmdProc);
data->refCount++;
@@ -419,51 +413,44 @@ SavePrevTimezoneObj(
static Tcl_Obj *
NormTimezoneObj(
ClockClientData *dataPtr, /* Client data containing literal pool */
- Tcl_Obj *timezoneObj, /* Name of zone to find */
- int *loaded) /* Used to recognized TZ was loaded */
+ Tcl_Obj *timezoneObj, /* Name of zone to find */
+ int *loaded) /* Used to recognized TZ was loaded */
{
const char *tz;
*loaded = 1;
- if ( timezoneObj == dataPtr->lastSetupTimeZoneUnnorm
- && dataPtr->lastSetupTimeZone != NULL
- ) {
+ if (timezoneObj == dataPtr->lastSetupTimeZoneUnnorm
+ && dataPtr->lastSetupTimeZone != NULL) {
return dataPtr->lastSetupTimeZone;
}
- if ( timezoneObj == dataPtr->prevSetupTimeZoneUnnorm
- && dataPtr->prevSetupTimeZone != NULL
- ) {
+ if (timezoneObj == dataPtr->prevSetupTimeZoneUnnorm
+ && dataPtr->prevSetupTimeZone != NULL) {
return dataPtr->prevSetupTimeZone;
}
if (timezoneObj == dataPtr->gmtSetupTimeZoneUnnorm
- && dataPtr->gmtSetupTimeZone != NULL
- ) {
+ && dataPtr->gmtSetupTimeZone != NULL) {
return dataPtr->literals[LIT_GMT];
}
- if ( timezoneObj == dataPtr->lastSetupTimeZone
- || timezoneObj == dataPtr->prevSetupTimeZone
- || timezoneObj == dataPtr->gmtSetupTimeZone
- || timezoneObj == dataPtr->systemTimeZone
- ) {
+ if (timezoneObj == dataPtr->lastSetupTimeZone
+ || timezoneObj == dataPtr->prevSetupTimeZone
+ || timezoneObj == dataPtr->gmtSetupTimeZone
+ || timezoneObj == dataPtr->systemTimeZone) {
return timezoneObj;
}
tz = TclGetString(timezoneObj);
- if (dataPtr->lastSetupTimeZone != NULL &&
- strcmp(tz, TclGetString(dataPtr->lastSetupTimeZone)) == 0
- ) {
+ if (dataPtr->lastSetupTimeZone != NULL
+ && strcmp(tz, TclGetString(dataPtr->lastSetupTimeZone)) == 0) {
TclSetObjRef(dataPtr->lastSetupTimeZoneUnnorm, timezoneObj);
return dataPtr->lastSetupTimeZone;
}
- if (dataPtr->prevSetupTimeZone != NULL &&
- strcmp(tz, TclGetString(dataPtr->prevSetupTimeZone)) == 0
- ) {
+ if (dataPtr->prevSetupTimeZone != NULL
+ && strcmp(tz, TclGetString(dataPtr->prevSetupTimeZone)) == 0) {
TclSetObjRef(dataPtr->prevSetupTimeZoneUnnorm, timezoneObj);
return dataPtr->prevSetupTimeZone;
}
- if (dataPtr->systemTimeZone != NULL &&
- strcmp(tz, TclGetString(dataPtr->systemTimeZone)) == 0
- ) {
+ if (dataPtr->systemTimeZone != NULL
+ && strcmp(tz, TclGetString(dataPtr->systemTimeZone)) == 0) {
return dataPtr->systemTimeZone;
}
if (strcmp(tz, Literals[LIT_GMT]) == 0) {
@@ -555,6 +542,7 @@ SavePrevLocaleObj(
ClockClientData *dataPtr) /* Client data containing literal pool */
{
Tcl_Obj *localeObj = dataPtr->lastUsedLocale;
+
if (localeObj && localeObj != dataPtr->prevUsedLocale) {
TclSetObjRef(dataPtr->prevUsedLocaleUnnorm, dataPtr->lastUsedLocaleUnnorm);
TclSetObjRef(dataPtr->prevUsedLocale, localeObj);
@@ -583,97 +571,88 @@ static Tcl_Obj *
NormLocaleObj(
ClockClientData *dataPtr, /* Client data containing literal pool */
Tcl_Interp *interp, /* Tcl interpreter */
- Tcl_Obj *localeObj,
- Tcl_Obj **mcDictObj)
+ Tcl_Obj *localeObj,
+ Tcl_Obj **mcDictObj)
{
const char *loc, *loc2;
- if ( localeObj == NULL
- || localeObj == dataPtr->literals[LIT_C]
- || localeObj == dataPtr->defaultLocale
- ) {
+
+ if (localeObj == NULL
+ || localeObj == dataPtr->literals[LIT_C]
+ || localeObj == dataPtr->defaultLocale) {
*mcDictObj = dataPtr->defaultLocaleDict;
return dataPtr->defaultLocale ?
- dataPtr->defaultLocale : dataPtr->literals[LIT_C];
+ dataPtr->defaultLocale : dataPtr->literals[LIT_C];
}
- if ( localeObj == dataPtr->currentLocale
- || localeObj == dataPtr->literals[LIT_CURRENT]
- ) {
+
+ if (localeObj == dataPtr->currentLocale
+ || localeObj == dataPtr->literals[LIT_CURRENT]) {
if (dataPtr->currentLocale == NULL) {
ClockGetCurrentLocale(dataPtr, interp);
}
*mcDictObj = dataPtr->currentLocaleDict;
return dataPtr->currentLocale;
}
- if ( localeObj == dataPtr->lastUsedLocale
- || localeObj == dataPtr->lastUsedLocaleUnnorm
- ) {
+
+ if (localeObj == dataPtr->lastUsedLocale
+ || localeObj == dataPtr->lastUsedLocaleUnnorm) {
*mcDictObj = dataPtr->lastUsedLocaleDict;
return dataPtr->lastUsedLocale;
}
- if ( localeObj == dataPtr->prevUsedLocale
- || localeObj == dataPtr->prevUsedLocaleUnnorm
- ) {
+
+ if (localeObj == dataPtr->prevUsedLocale
+ || localeObj == dataPtr->prevUsedLocaleUnnorm) {
*mcDictObj = dataPtr->prevUsedLocaleDict;
return dataPtr->prevUsedLocale;
}
loc = TclGetString(localeObj);
- if ( dataPtr->currentLocale != NULL
- && ( localeObj == dataPtr->currentLocale
- || (localeObj->length == dataPtr->currentLocale->length
- && strcasecmp(loc, TclGetString(dataPtr->currentLocale)) == 0
- )
- )
- ) {
+ if (dataPtr->currentLocale != NULL
+ && (localeObj == dataPtr->currentLocale
+ || (localeObj->length == dataPtr->currentLocale->length
+ && strcasecmp(loc, TclGetString(dataPtr->currentLocale)) == 0))) {
*mcDictObj = dataPtr->currentLocaleDict;
return dataPtr->currentLocale;
}
- if ( dataPtr->lastUsedLocale != NULL
- && ( localeObj == dataPtr->lastUsedLocale
- || (localeObj->length == dataPtr->lastUsedLocale->length
- && strcasecmp(loc, TclGetString(dataPtr->lastUsedLocale)) == 0
- )
- )
- ) {
+
+ if (dataPtr->lastUsedLocale != NULL
+ && (localeObj == dataPtr->lastUsedLocale
+ || (localeObj->length == dataPtr->lastUsedLocale->length
+ && strcasecmp(loc, TclGetString(dataPtr->lastUsedLocale)) == 0))) {
*mcDictObj = dataPtr->lastUsedLocaleDict;
TclSetObjRef(dataPtr->lastUsedLocaleUnnorm, localeObj);
return dataPtr->lastUsedLocale;
}
- if ( dataPtr->prevUsedLocale != NULL
- && ( localeObj == dataPtr->prevUsedLocale
- || (localeObj->length == dataPtr->prevUsedLocale->length
- && strcasecmp(loc, TclGetString(dataPtr->prevUsedLocale)) == 0
- )
- )
- ) {
+
+ if (dataPtr->prevUsedLocale != NULL
+ && (localeObj == dataPtr->prevUsedLocale
+ || (localeObj->length == dataPtr->prevUsedLocale->length
+ && strcasecmp(loc, TclGetString(dataPtr->prevUsedLocale)) == 0))) {
*mcDictObj = dataPtr->prevUsedLocaleDict;
TclSetObjRef(dataPtr->prevUsedLocaleUnnorm, localeObj);
return dataPtr->prevUsedLocale;
}
- if (
- (localeObj->length == 1 /* C */
- && strcasecmp(loc, Literals[LIT_C]) == 0)
- || (dataPtr->defaultLocale && (loc2 = TclGetString(dataPtr->defaultLocale))
- && localeObj->length == dataPtr->defaultLocale->length
- && strcasecmp(loc, loc2) == 0)
- ) {
+
+ if ((localeObj->length == 1 /* C */
+ && strcasecmp(loc, Literals[LIT_C]) == 0)
+ || (dataPtr->defaultLocale && (loc2 = TclGetString(dataPtr->defaultLocale))
+ && localeObj->length == dataPtr->defaultLocale->length
+ && strcasecmp(loc, loc2) == 0)) {
*mcDictObj = dataPtr->defaultLocaleDict;
return dataPtr->defaultLocale ?
- dataPtr->defaultLocale : dataPtr->literals[LIT_C];
+ dataPtr->defaultLocale : dataPtr->literals[LIT_C];
}
- if ( localeObj->length == 7 /* current */
- && strcasecmp(loc, Literals[LIT_CURRENT]) == 0
- ) {
+
+ if (localeObj->length == 7 /* current */
+ && strcasecmp(loc, Literals[LIT_CURRENT]) == 0) {
if (dataPtr->currentLocale == NULL) {
ClockGetCurrentLocale(dataPtr, interp);
}
*mcDictObj = dataPtr->currentLocaleDict;
return dataPtr->currentLocale;
}
- if (
- (localeObj->length == 6 /* system */
- && strcasecmp(loc, Literals[LIT_SYSTEM]) == 0)
- ) {
+
+ if ((localeObj->length == 6 /* system */
+ && strcasecmp(loc, Literals[LIT_SYSTEM]) == 0)) {
SavePrevLocaleObj(dataPtr);
TclSetObjRef(dataPtr->lastUsedLocaleUnnorm, localeObj);
localeObj = ClockGetSystemLocale(dataPtr, interp);
@@ -681,6 +660,7 @@ NormLocaleObj(
*mcDictObj = NULL;
return localeObj;
}
+
*mcDictObj = NULL;
return localeObj;
}
@@ -703,7 +683,8 @@ NormLocaleObj(
*/
Tcl_Obj *
-ClockMCDict(ClockFmtScnCmdArgs *opts)
+ClockMCDict(
+ ClockFmtScnCmdArgs *opts)
{
ClockClientData *dataPtr = (ClockClientData *)opts->clientData;
@@ -711,14 +692,13 @@ ClockMCDict(ClockFmtScnCmdArgs *opts)
if (opts->mcDictObj == NULL) {
/* if locale was not yet used */
- if ( !(opts->flags & CLF_LOCALE_USED) ) {
-
- opts->localeObj = NormLocaleObj((ClockClientData *)opts->clientData, opts->interp,
- opts->localeObj, &opts->mcDictObj);
+ if (!(opts->flags & CLF_LOCALE_USED)) {
+ opts->localeObj = NormLocaleObj((ClockClientData *) opts->clientData, opts->interp,
+ opts->localeObj, &opts->mcDictObj);
if (opts->localeObj == NULL) {
- Tcl_SetObjResult(opts->interp,
- Tcl_NewStringObj("locale not specified and no default locale set", -1));
+ Tcl_SetObjResult(opts->interp, Tcl_NewStringObj(
+ "locale not specified and no default locale set", -1));
Tcl_SetErrorCode(opts->interp, "CLOCK", "badOption", (char *)NULL);
return NULL;
}
@@ -727,10 +707,12 @@ ClockMCDict(ClockFmtScnCmdArgs *opts)
/* check locale literals already available (on demand creation) */
if (dataPtr->mcLiterals == NULL) {
int i;
- dataPtr->mcLiterals = (Tcl_Obj **)Tcl_Alloc(MCLIT__END * sizeof(Tcl_Obj*));
+
+ dataPtr->mcLiterals = (Tcl_Obj **)
+ Tcl_Alloc(MCLIT__END * sizeof(Tcl_Obj*));
for (i = 0; i < MCLIT__END; ++i) {
TclInitObjRef(dataPtr->mcLiterals[i],
- Tcl_NewStringObj(MsgCtLiterals[i], -1));
+ Tcl_NewStringObj(MsgCtLiterals[i], -1));
}
}
}
@@ -744,7 +726,7 @@ ClockMCDict(ClockFmtScnCmdArgs *opts)
TclSetObjRef(dataPtr->mcDicts, Tcl_NewDictObj());
}
Tcl_DictObjGet(NULL, dataPtr->mcDicts,
- opts->localeObj, &opts->mcDictObj);
+ opts->localeObj, &opts->mcDictObj);
if (opts->mcDictObj == NULL) {
/* get msgcat dictionary - ::tcl::clock::mcget locale */
@@ -766,21 +748,20 @@ ClockMCDict(ClockFmtScnCmdArgs *opts)
if (opts->mcDictObj->refCount > ref) {
/* smart reference (shared dict as object with no ref-counter) */
opts->mcDictObj = TclDictObjSmartRef(opts->interp,
- opts->mcDictObj);
+ opts->mcDictObj);
}
/* create exactly one reference to catalog / make it searchable for future */
Tcl_DictObjPut(NULL, dataPtr->mcDicts, opts->localeObj,
- opts->mcDictObj);
+ opts->mcDictObj);
- if ( opts->localeObj == dataPtr->literals[LIT_C]
- || opts->localeObj == dataPtr->defaultLocale
- ) {
+ if (opts->localeObj == dataPtr->literals[LIT_C]
+ || opts->localeObj == dataPtr->defaultLocale) {
dataPtr->defaultLocaleDict = opts->mcDictObj;
}
- if ( opts->localeObj == dataPtr->currentLocale ) {
+ if (opts->localeObj == dataPtr->currentLocale) {
dataPtr->currentLocaleDict = opts->mcDictObj;
- } else if ( opts->localeObj == dataPtr->lastUsedLocale ) {
+ } else if (opts->localeObj == dataPtr->lastUsedLocale) {
dataPtr->lastUsedLocaleDict = opts->mcDictObj;
} else {
SavePrevLocaleObj(dataPtr);
@@ -815,17 +796,17 @@ ClockMCGet(
int mcKey)
{
ClockClientData *dataPtr = (ClockClientData *)opts->clientData;
-
Tcl_Obj *valObj = NULL;
if (opts->mcDictObj == NULL) {
ClockMCDict(opts);
- if (opts->mcDictObj == NULL)
+ if (opts->mcDictObj == NULL) {
return NULL;
+ }
}
Tcl_DictObjGet(opts->interp, opts->mcDictObj,
- dataPtr->mcLiterals[mcKey], &valObj);
+ dataPtr->mcLiterals[mcKey], &valObj);
return valObj; /* or NULL in obscure case if Tcl_DictObjGet failed */
}
@@ -851,13 +832,13 @@ ClockMCGetIdx(
int mcKey)
{
ClockClientData *dataPtr = (ClockClientData *)opts->clientData;
-
Tcl_Obj *valObj = NULL;
if (opts->mcDictObj == NULL) {
ClockMCDict(opts);
- if (opts->mcDictObj == NULL)
+ if (opts->mcDictObj == NULL) {
return NULL;
+ }
}
/* try to get indices object */
@@ -866,11 +847,9 @@ ClockMCGetIdx(
}
if (Tcl_DictObjGet(NULL, opts->mcDictObj,
- dataPtr->mcLitIdxs[mcKey], &valObj) != TCL_OK
- ) {
+ dataPtr->mcLitIdxs[mcKey], &valObj) != TCL_OK) {
return NULL;
}
-
return valObj;
}
@@ -892,23 +871,26 @@ ClockMCGetIdx(
int
ClockMCSetIdx(
ClockFmtScnCmdArgs *opts,
- int mcKey, Tcl_Obj *valObj)
+ int mcKey,
+ Tcl_Obj *valObj)
{
ClockClientData *dataPtr = (ClockClientData *)opts->clientData;
if (opts->mcDictObj == NULL) {
ClockMCDict(opts);
- if (opts->mcDictObj == NULL)
+ if (opts->mcDictObj == NULL) {
return TCL_ERROR;
+ }
}
/* if literal storage for indices not yet created */
if (dataPtr->mcLitIdxs == NULL) {
int i;
+
dataPtr->mcLitIdxs = (Tcl_Obj **)Tcl_Alloc(MCLIT__END * sizeof(Tcl_Obj*));
for (i = 0; i < MCLIT__END; ++i) {
TclInitObjRef(dataPtr->mcLitIdxs[i],
- Tcl_NewStringObj(MsgCtLitIdxs[i], -1));
+ Tcl_NewStringObj(MsgCtLitIdxs[i], -1));
}
}
@@ -919,8 +901,8 @@ ClockMCSetIdx(
static void
TimezoneLoaded(
ClockClientData *dataPtr,
- Tcl_Obj *timezoneObj, /* Name of zone was loaded */
- Tcl_Obj *tzUnnormObj) /* Name of zone was loaded */
+ Tcl_Obj *timezoneObj, /* Name of zone was loaded */
+ Tcl_Obj *tzUnnormObj) /* Name of zone was loaded */
{
/* don't overwrite last-setup with GMT (special case) */
if (timezoneObj == dataPtr->literals[LIT_GMT]) {
@@ -962,13 +944,12 @@ TimezoneLoaded(
static int
ClockConfigureObjCmd(
- void *clientData, /* Client data containing literal pool */
- Tcl_Interp *interp, /* Tcl interpreter */
- int objc, /* Parameter count */
- Tcl_Obj *const objv[]) /* Parameter vector */
+ void *clientData, /* Client data containing literal pool */
+ Tcl_Interp *interp, /* Tcl interpreter */
+ int objc, /* Parameter count */
+ Tcl_Obj *const objv[]) /* Parameter vector */
{
ClockClientData *dataPtr = (ClockClientData *)clientData;
-
static const char *const options[] = {
"-system-tz", "-setup-tz", "-default-locale", "-current-locale",
"-clear",
@@ -989,15 +970,16 @@ ClockConfigureObjCmd(
for (i = 1; i < objc; i++) {
if (Tcl_GetIndexFromObj(interp, objv[i++], options,
- "option", 0, &optionIndex) != TCL_OK) {
+ "option", 0, &optionIndex) != TCL_OK) {
Tcl_SetErrorCode(interp, "CLOCK", "badOption",
- TclGetString(objv[i-1]), (char *)NULL);
+ TclGetString(objv[i - 1]), (char *)NULL);
return TCL_ERROR;
}
switch (optionIndex) {
case CLOCK_SYSTEM_TZ: {
/* validate current tz-epoch */
size_t lastTZEpoch = TzsetIfNecessary();
+
if (i < objc) {
if (dataPtr->systemTimeZone != objv[i]) {
TclSetObjRef(dataPtr->systemTimeZone, objv[i]);
@@ -1005,26 +987,25 @@ ClockConfigureObjCmd(
}
dataPtr->lastTZEpoch = lastTZEpoch;
}
- if (i+1 >= objc && dataPtr->systemTimeZone != NULL
- && dataPtr->lastTZEpoch == lastTZEpoch) {
+ if (i + 1 >= objc && dataPtr->systemTimeZone != NULL
+ && dataPtr->lastTZEpoch == lastTZEpoch) {
Tcl_SetObjResult(interp, dataPtr->systemTimeZone);
}
+ break;
}
- break;
case CLOCK_SETUP_TZ:
if (i < objc) {
int loaded;
Tcl_Obj *timezoneObj = NormTimezoneObj(dataPtr, objv[i], &loaded);
+
if (!loaded) {
TimezoneLoaded(dataPtr, timezoneObj, objv[i]);
}
Tcl_SetObjResult(interp, timezoneObj);
- }
- else
- if (i+1 >= objc && dataPtr->lastSetupTimeZone != NULL) {
+ } else if (i + 1 >= objc && dataPtr->lastSetupTimeZone != NULL) {
Tcl_SetObjResult(interp, dataPtr->lastSetupTimeZone);
}
- break;
+ break;
case CLOCK_DEFAULT_LOCALE:
if (i < objc) {
if (dataPtr->defaultLocale != objv[i]) {
@@ -1032,11 +1013,11 @@ ClockConfigureObjCmd(
dataPtr->defaultLocaleDict = NULL;
}
}
- if (i+1 >= objc) {
+ if (i + 1 >= objc) {
Tcl_SetObjResult(interp, dataPtr->defaultLocale ?
- dataPtr->defaultLocale : dataPtr->literals[LIT_C]);
+ dataPtr->defaultLocale : dataPtr->literals[LIT_C]);
}
- break;
+ break;
case CLOCK_CURRENT_LOCALE:
if (i < objc) {
if (dataPtr->currentLocale != objv[i]) {
@@ -1044,30 +1025,32 @@ ClockConfigureObjCmd(
dataPtr->currentLocaleDict = NULL;
}
}
- if (i+1 >= objc && dataPtr->currentLocale != NULL) {
+ if (i + 1 >= objc && dataPtr->currentLocale != NULL) {
Tcl_SetObjResult(interp, dataPtr->currentLocale);
}
- break;
+ break;
case CLOCK_YEAR_CENTURY:
if (i < objc) {
int year;
+
if (TclGetIntFromObj(interp, objv[i], &year) != TCL_OK) {
return TCL_ERROR;
}
dataPtr->currentYearCentury = year;
- if (i+1 >= objc) {
+ if (i + 1 >= objc) {
Tcl_SetObjResult(interp, objv[i]);
}
continue;
}
- if (i+1 >= objc) {
+ if (i + 1 >= objc) {
Tcl_SetObjResult(interp,
- Tcl_NewWideIntObj(dataPtr->currentYearCentury));
+ Tcl_NewWideIntObj(dataPtr->currentYearCentury));
}
- break;
+ break;
case CLOCK_CENTURY_SWITCH:
if (i < objc) {
int year;
+
if (TclGetIntFromObj(interp, objv[i], &year) != TCL_OK) {
return TCL_ERROR;
}
@@ -1075,14 +1058,15 @@ ClockConfigureObjCmd(
Tcl_SetObjResult(interp, objv[i]);
continue;
}
- if (i+1 >= objc) {
+ if (i + 1 >= objc) {
Tcl_SetObjResult(interp,
- Tcl_NewWideIntObj(dataPtr->yearOfCenturySwitch));
+ Tcl_NewWideIntObj(dataPtr->yearOfCenturySwitch));
}
- break;
+ break;
case CLOCK_MIN_YEAR:
if (i < objc) {
int year;
+
if (TclGetIntFromObj(interp, objv[i], &year) != TCL_OK) {
return TCL_ERROR;
}
@@ -1090,14 +1074,15 @@ ClockConfigureObjCmd(
Tcl_SetObjResult(interp, objv[i]);
continue;
}
- if (i+1 >= objc) {
+ if (i + 1 >= objc) {
Tcl_SetObjResult(interp,
- Tcl_NewWideIntObj(dataPtr->validMinYear));
+ Tcl_NewWideIntObj(dataPtr->validMinYear));
}
- break;
+ break;
case CLOCK_MAX_YEAR:
if (i < objc) {
int year;
+
if (TclGetIntFromObj(interp, objv[i], &year) != TCL_OK) {
return TCL_ERROR;
}
@@ -1105,14 +1090,15 @@ ClockConfigureObjCmd(
Tcl_SetObjResult(interp, objv[i]);
continue;
}
- if (i+1 >= objc) {
+ if (i + 1 >= objc) {
Tcl_SetObjResult(interp,
- Tcl_NewWideIntObj(dataPtr->validMaxYear));
+ Tcl_NewWideIntObj(dataPtr->validMaxYear));
}
- break;
+ break;
case CLOCK_MAX_JDN:
if (i < objc) {
double jd;
+
if (Tcl_GetDoubleFromObj(interp, objv[i], &jd) != TCL_OK) {
return TCL_ERROR;
}
@@ -1120,14 +1106,14 @@ ClockConfigureObjCmd(
Tcl_SetObjResult(interp, objv[i]);
continue;
}
- if (i+1 >= objc) {
- Tcl_SetObjResult(interp,
- Tcl_NewDoubleObj(dataPtr->maxJDN));
+ if (i + 1 >= objc) {
+ Tcl_SetObjResult(interp, Tcl_NewDoubleObj(dataPtr->maxJDN));
}
- break;
+ break;
case CLOCK_VALIDATE:
if (i < objc) {
int val;
+
if (Tcl_GetBooleanFromObj(interp, objv[i], &val) != TCL_OK) {
return TCL_ERROR;
}
@@ -1137,35 +1123,34 @@ ClockConfigureObjCmd(
dataPtr->defFlags &= ~CLF_VALIDATE;
}
}
- if (i+1 >= objc) {
+ if (i + 1 >= objc) {
Tcl_SetObjResult(interp,
Tcl_NewBooleanObj(dataPtr->defFlags & CLF_VALIDATE));
}
- break;
+ break;
case CLOCK_CLEAR_CACHE:
ClockConfigureClear(dataPtr);
- break;
- case CLOCK_INIT_COMPLETE:
- {
- /*
- * Init completed.
- * Compile clock ensemble (performance purposes).
- */
- Tcl_Command token = Tcl_FindCommand(interp, "::clock",
+ break;
+ case CLOCK_INIT_COMPLETE: {
+ /*
+ * Init completed.
+ * Compile clock ensemble (performance purposes).
+ */
+ Tcl_Command token = Tcl_FindCommand(interp, "::clock",
NULL, TCL_GLOBAL_ONLY);
- if (!token) {
- return TCL_ERROR;
- }
- int ensFlags = 0;
- if (Tcl_GetEnsembleFlags(interp, token, &ensFlags) != TCL_OK) {
- return TCL_ERROR;
- }
- ensFlags |= ENSEMBLE_COMPILE;
- if (Tcl_SetEnsembleFlags(interp, token, ensFlags) != TCL_OK) {
- return TCL_ERROR;
- }
+ if (!token) {
+ return TCL_ERROR;
}
- break;
+ int ensFlags = 0;
+ if (Tcl_GetEnsembleFlags(interp, token, &ensFlags) != TCL_OK) {
+ return TCL_ERROR;
+ }
+ ensFlags |= ENSEMBLE_COMPILE;
+ if (Tcl_SetEnsembleFlags(interp, token, ensFlags) != TCL_OK) {
+ return TCL_ERROR;
+ }
+ break;
+ }
}
}
@@ -1190,7 +1175,7 @@ ClockConfigureObjCmd(
static inline Tcl_Obj *
ClockGetTZData(
- void *clientData, /* Opaque pointer to literal pool, etc. */
+ void *clientData, /* Opaque pointer to literal pool, etc. */
Tcl_Interp *interp, /* Tcl interpreter */
Tcl_Obj *timezoneObj) /* Name of the timezone */
{
@@ -1198,9 +1183,8 @@ ClockGetTZData(
Tcl_Obj *ret, **out = NULL;
/* if cached (if already setup this one) */
- if ( timezoneObj == dataPtr->lastSetupTimeZone
- || timezoneObj == dataPtr->lastSetupTimeZoneUnnorm
- ) {
+ if (timezoneObj == dataPtr->lastSetupTimeZone
+ || timezoneObj == dataPtr->lastSetupTimeZoneUnnorm) {
if (dataPtr->lastSetupTZData != NULL) {
return dataPtr->lastSetupTZData;
}
@@ -1214,20 +1198,14 @@ ClockGetTZData(
return dataPtr->systemSetupTZData;
}
out = &dataPtr->systemSetupTZData;
- }
- else
- if ( timezoneObj == dataPtr->literals[LIT_GMT]
- || timezoneObj == dataPtr->gmtSetupTimeZoneUnnorm
- ) {
+ } else if (timezoneObj == dataPtr->literals[LIT_GMT]
+ || timezoneObj == dataPtr->gmtSetupTimeZoneUnnorm) {
if (dataPtr->gmtSetupTZData != NULL) {
return dataPtr->gmtSetupTZData;
}
out = &dataPtr->gmtSetupTZData;
- }
- else
- if ( timezoneObj == dataPtr->prevSetupTimeZone
- || timezoneObj == dataPtr->prevSetupTimeZoneUnnorm
- ) {
+ } else if (timezoneObj == dataPtr->prevSetupTimeZone
+ || timezoneObj == dataPtr->prevSetupTimeZoneUnnorm) {
if (dataPtr->prevSetupTZData != NULL) {
return dataPtr->prevSetupTZData;
}
@@ -1235,14 +1213,12 @@ ClockGetTZData(
}
ret = Tcl_ObjGetVar2(interp, dataPtr->literals[LIT_TZDATA],
- timezoneObj, TCL_LEAVE_ERR_MSG);
+ timezoneObj, TCL_LEAVE_ERR_MSG);
/* cache using corresponding slot and as last used */
if (out != NULL) {
TclSetObjRef(*out, ret);
- }
- else
- if (dataPtr->lastSetupTimeZone != timezoneObj) {
+ } else if (dataPtr->lastSetupTimeZone != timezoneObj) {
SavePrevTimezoneObj(dataPtr);
TclSetObjRef(dataPtr->lastSetupTimeZone, timezoneObj);
TclUnsetObjRef(dataPtr->lastSetupTimeZoneUnnorm);
@@ -1269,7 +1245,7 @@ ClockGetTZData(
static Tcl_Obj *
ClockGetSystemTimeZone(
- void *clientData, /* Opaque pointer to literal pool, etc. */
+ void *clientData, /* Opaque pointer to literal pool, etc. */
Tcl_Interp *interp) /* Tcl interpreter */
{
ClockClientData *dataPtr = (ClockClientData *)clientData;
@@ -1308,7 +1284,7 @@ ClockGetSystemTimeZone(
Tcl_Obj *
ClockSetupTimeZone(
- void *clientData, /* Opaque pointer to literal pool, etc. */
+ void *clientData, /* Opaque pointer to literal pool, etc. */
Tcl_Interp *interp, /* Tcl interpreter */
Tcl_Obj *timezoneObj)
{
@@ -1317,21 +1293,18 @@ ClockSetupTimeZone(
Tcl_Obj *callargs[2];
/* if cached (if already setup this one) */
- if ( timezoneObj == dataPtr->literals[LIT_GMT]
- && dataPtr->gmtSetupTZData != NULL
- ) {
+ if (timezoneObj == dataPtr->literals[LIT_GMT]
+ && dataPtr->gmtSetupTZData != NULL) {
return timezoneObj;
}
- if ( ( timezoneObj == dataPtr->lastSetupTimeZone
- || timezoneObj == dataPtr->lastSetupTimeZoneUnnorm
- ) && dataPtr->lastSetupTimeZone != NULL
- ) {
+ if ((timezoneObj == dataPtr->lastSetupTimeZone
+ || timezoneObj == dataPtr->lastSetupTimeZoneUnnorm)
+ && dataPtr->lastSetupTimeZone != NULL) {
return dataPtr->lastSetupTimeZone;
}
- if ( ( timezoneObj == dataPtr->prevSetupTimeZone
- || timezoneObj == dataPtr->prevSetupTimeZoneUnnorm
- ) && dataPtr->prevSetupTimeZone != NULL
- ) {
+ if ((timezoneObj == dataPtr->prevSetupTimeZone
+ || timezoneObj == dataPtr->prevSetupTimeZoneUnnorm)
+ && dataPtr->prevSetupTimeZone != NULL) {
return dataPtr->prevSetupTimeZone;
}
@@ -1378,19 +1351,23 @@ ClockSetupTimeZone(
*/
Tcl_Obj *
-ClockFormatNumericTimeZone(int z) {
- char buf[12+1], *p;
+ClockFormatNumericTimeZone(
+ int z)
+{
+ char buf[12 + 1], *p;
- if ( z < 0 ) {
+ if (z < 0) {
z = -z;
*buf = '-';
} else {
*buf = '+';
}
- TclItoAw(buf+1, z / 3600, '0', 2); z %= 3600;
- p = TclItoAw(buf+3, z / 60, '0', 2); z %= 60;
+ TclItoAw(buf + 1, z / 3600, '0', 2);
+ z %= 3600;
+ p = TclItoAw(buf + 3, z / 60, '0', 2);
+ z %= 60;
if (z != 0) {
- p = TclItoAw(buf+5, z, '0', 2);
+ p = TclItoAw(buf + 5, z, '0', 2);
}
return Tcl_NewStringObj(buf, p - buf);
}
@@ -1424,7 +1401,7 @@ ClockFormatNumericTimeZone(int z) {
static int
ClockConvertlocaltoutcObjCmd(
- void *clientData, /* Client data */
+ void *clientData, /* Client data */
Tcl_Interp *interp, /* Tcl interpreter */
int objc, /* Parameter count */
Tcl_Obj *const *objv) /* Parameter vector */
@@ -1456,10 +1433,9 @@ ClockConvertlocaltoutcObjCmd(
"found in dictionary", -1));
return TCL_ERROR;
}
- if ((TclGetWideIntFromObj(interp, secondsObj,
- &fields.localSeconds) != TCL_OK)
- || (TclGetIntFromObj(interp, objv[3], &changeover) != TCL_OK)
- || ConvertLocalToUTC(clientData, interp, &fields, objv[2], changeover)) {
+ if ((TclGetWideIntFromObj(interp, secondsObj, &fields.localSeconds) != TCL_OK)
+ || (TclGetIntFromObj(interp, objv[3], &changeover) != TCL_OK)
+ || ConvertLocalToUTC(clientData, interp, &fields, objv[2], changeover)) {
return TCL_ERROR;
}
@@ -1515,7 +1491,7 @@ ClockConvertlocaltoutcObjCmd(
int
ClockGetdatefieldsObjCmd(
- void *clientData, /* Opaque pointer to literal pool, etc. */
+ void *clientData, /* Opaque pointer to literal pool, etc. */
Tcl_Interp *interp, /* Tcl interpreter */
int objc, /* Parameter count */
Tcl_Obj *const *objv) /* Parameter vector */
@@ -1554,7 +1530,7 @@ ClockGetdatefieldsObjCmd(
/* Extract fields */
if (ClockGetDateFields(clientData, interp, &fields, objv[2],
- changeover) != TCL_OK) {
+ changeover) != TCL_OK) {
return TCL_ERROR;
}
@@ -1612,7 +1588,7 @@ ClockGetdatefieldsObjCmd(
int
ClockGetDateFields(
- void *clientData, /* Client data of the interpreter */
+ void *clientData, /* Client data of the interpreter */
Tcl_Interp *interp, /* Tcl interpreter */
TclDateFields *fields, /* Pointer to result fields, where
* fields->seconds contains date to extract */
@@ -1709,7 +1685,7 @@ FetchIntField(
static int
ClockGetjuliandayfromerayearmonthdayObjCmd(
- void *clientData, /* Opaque pointer to literal pool, etc. */
+ void *clientData, /* Opaque pointer to literal pool, etc. */
Tcl_Interp *interp, /* Tcl interpreter */
int objc, /* Parameter count */
Tcl_Obj *const *objv) /* Parameter vector */
@@ -1795,7 +1771,7 @@ ClockGetjuliandayfromerayearmonthdayObjCmd(
static int
ClockGetjuliandayfromerayearweekdayObjCmd(
- void *clientData, /* Opaque pointer to literal pool, etc. */
+ void *clientData, /* Opaque pointer to literal pool, etc. */
Tcl_Interp *interp, /* Tcl interpreter */
int objc, /* Parameter count */
Tcl_Obj *const *objv) /* Parameter vector */
@@ -1878,7 +1854,7 @@ ClockGetjuliandayfromerayearweekdayObjCmd(
static int
ConvertLocalToUTC(
- void *clientData, /* Client data of the interpreter */
+ void *clientData, /* Client data of the interpreter */
Tcl_Interp *interp, /* Tcl interpreter */
TclDateFields *fields, /* Fields of the time */
Tcl_Obj *timezoneObj, /* Time zone */
@@ -1886,7 +1862,7 @@ ConvertLocalToUTC(
{
ClockClientData *dataPtr = (ClockClientData *)clientData;
Tcl_Obj *tzdata; /* Time zone data */
- Tcl_Size rowc; /* Number of rows in tzdata */
+ Tcl_Size rowc; /* Number of rows in tzdata */
Tcl_Obj **rowv; /* Pointers to the rows */
Tcl_WideInt seconds;
ClockLastTZOffs * ltzoc = NULL;
@@ -1909,9 +1885,8 @@ ConvertLocalToUTC(
continue;
}
seconds = fields->localSeconds - ltzoc->tzOffset;
- if ( seconds >= ltzoc->rangesVal[0]
- && seconds < ltzoc->rangesVal[1]
- ) {
+ if (seconds >= ltzoc->rangesVal[0]
+ && seconds < ltzoc->rangesVal[1]) {
/* the same time zone and offset (UTC time inside the last minute) */
fields->tzOffset = ltzoc->tzOffset;
fields->seconds = seconds;
@@ -1945,21 +1920,19 @@ ConvertLocalToUTC(
*/
if (rowc == 0) {
-
if (ConvertLocalToUTCUsingC(interp, fields, changeover) != TCL_OK) {
return TCL_ERROR;
- };
+ }
/* we cannot cache (ranges unknown yet) - todo: check later the DST-hole here */
return TCL_OK;
-
} else {
Tcl_WideInt rangesVal[2];
if (ConvertLocalToUTCUsingTable(interp, fields, rowc, rowv,
rangesVal) != TCL_OK) {
return TCL_ERROR;
- };
+ }
seconds = fields->seconds;
@@ -1985,14 +1958,14 @@ ConvertLocalToUTC(
/* check DST-hole: if retrieved seconds is out of range */
- if ( ltzoc->rangesVal[0] > seconds || seconds >= ltzoc->rangesVal[1] ) {
+ if (ltzoc->rangesVal[0] > seconds || seconds >= ltzoc->rangesVal[1]) {
dstHole:
- #if 0
+#if 0
printf("given local-time is outside the time-zone (in DST-hole): "
"%d - offs %d => %d <= %d < %d\n",
(int)fields->localSeconds, fields->tzOffset,
(int)ltzoc->rangesVal[0], (int)seconds, (int)ltzoc->rangesVal[1]);
- #endif
+#endif
/* because we don't know real TZ (we're outsize), just invalidate local
* time (which could be verified in ClockValidDate later) */
fields->localSeconds = TCL_INV_SECONDS; /* not valid seconds */
@@ -2050,7 +2023,7 @@ ConvertLocalToUTCUsingTable(
fields->seconds = fields->localSeconds;
while (1) {
row = LookupLastTransition(interp, fields->seconds, rowc, rowv,
- rangesVal);
+ rangesVal);
if ((row == NULL)
|| TclListObjGetElements(interp, row, &cellc,
&cellv) != TCL_OK
@@ -2060,7 +2033,7 @@ ConvertLocalToUTCUsingTable(
}
for (i = 0; i < nHave; ++i) {
if (have[i].tzOffset == fields->tzOffset) {
- goto found;
+ break;
}
}
if (nHave == 8) {
@@ -2071,7 +2044,6 @@ ConvertLocalToUTCUsingTable(
fields->seconds = fields->localSeconds - fields->tzOffset;
}
- found:
fields->tzOffset = have[i].tzOffset;
fields->seconds = fields->localSeconds - fields->tzOffset;
TclSetObjRef(fields->tzName, have[i].tzName);
@@ -2112,7 +2084,7 @@ ConvertLocalToUTCUsingC(
*/
ClockExtractJDAndSODFromSeconds(fields->julianDay, secondOfDay,
- fields->localSeconds);
+ fields->localSeconds);
GetGregorianEraYearDay(fields, changeover);
GetMonthDay(fields);
@@ -2174,7 +2146,7 @@ ConvertLocalToUTCUsingC(
int
ConvertUTCToLocal(
- void *clientData, /* Client data of the interpreter */
+ void *clientData, /* Client data of the interpreter */
Tcl_Interp *interp, /* Tcl interpreter */
TclDateFields *fields, /* Fields of the time */
Tcl_Obj *timezoneObj, /* Time zone */
@@ -2182,7 +2154,7 @@ ConvertUTCToLocal(
{
ClockClientData *dataPtr = (ClockClientData *)clientData;
Tcl_Obj *tzdata; /* Time zone data */
- Tcl_Size rowc; /* Number of rows in tzdata */
+ Tcl_Size rowc; /* Number of rows in tzdata */
Tcl_Obj **rowv; /* Pointers to the rows */
ClockLastTZOffs * ltzoc = NULL;
@@ -2192,9 +2164,10 @@ ConvertUTCToLocal(
fields->tzOffset = 0;
if (dataPtr->gmtTZName == NULL) {
Tcl_Obj *tzName;
+
tzdata = ClockGetTZData(clientData, interp, timezoneObj);
- if ( TclListObjGetElements(interp, tzdata, &rowc, &rowv) != TCL_OK
- || Tcl_ListObjIndex(interp, rowv[0], 3, &tzName) != TCL_OK) {
+ if (TclListObjGetElements(interp, tzdata, &rowc, &rowv) != TCL_OK
+ || Tcl_ListObjIndex(interp, rowv[0], 3, &tzName) != TCL_OK) {
return TCL_ERROR;
}
TclSetObjRef(dataPtr->gmtTZName, tzName);
@@ -2213,9 +2186,8 @@ ConvertUTCToLocal(
ltzoc = NULL;
continue;
}
- if ( fields->seconds >= ltzoc->rangesVal[0]
- && fields->seconds < ltzoc->rangesVal[1]
- ) {
+ if (fields->seconds >= ltzoc->rangesVal[0]
+ && fields->seconds < ltzoc->rangesVal[1]) {
/* the same time zone and offset (UTC time inside the last minute) */
fields->tzOffset = ltzoc->tzOffset;
fields->localSeconds = fields->seconds + fields->tzOffset;
@@ -2243,7 +2215,6 @@ ConvertUTCToLocal(
*/
if (rowc == 0) {
-
if (ConvertUTCToLocalUsingC(interp, fields, changeover) != TCL_OK) {
return TCL_ERROR;
}
@@ -2308,13 +2279,13 @@ static int
ConvertUTCToLocalUsingTable(
Tcl_Interp *interp, /* Tcl interpreter */
TclDateFields *fields, /* Fields of the date */
- Tcl_Size rowc, /* Number of rows in the conversion table
+ Tcl_Size rowc, /* Number of rows in the conversion table
* (>= 1) */
Tcl_Obj *const rowv[], /* Rows of the conversion table */
Tcl_WideInt *rangesVal) /* Return bounds for time period */
{
Tcl_Obj *row; /* Row containing the current information */
- Tcl_Size cellc; /* Count of cells in the row (must be 4) */
+ Tcl_Size cellc; /* Count of cells in the row (must be 4) */
Tcl_Obj **cellv; /* Pointers to the cells */
/*
@@ -2322,9 +2293,9 @@ ConvertUTCToLocalUsingTable(
*/
row = LookupLastTransition(interp, fields->seconds, rowc, rowv, rangesVal);
- if (row == NULL ||
- TclListObjGetElements(interp, row, &cellc, &cellv) != TCL_OK ||
- TclGetIntFromObj(interp, cellv[1], &fields->tzOffset) != TCL_OK) {
+ if (row == NULL
+ || TclListObjGetElements(interp, row, &cellc, &cellv) != TCL_OK
+ || TclGetIntFromObj(interp, cellv[1], &fields->tzOffset) != TCL_OK) {
return TCL_ERROR;
}
@@ -2418,10 +2389,12 @@ ConvertUTCToLocalUsingC(
} else {
*buffer = '+';
}
- TclItoAw(buffer+1, diff / 3600, '0', 2); diff %= 3600;
- p = TclItoAw(buffer+3, diff / 60, '0', 2); diff %= 60;
+ TclItoAw(buffer + 1, diff / 3600, '0', 2);
+ diff %= 3600;
+ p = TclItoAw(buffer + 3, diff / 60, '0', 2);
+ diff %= 60;
if (diff != 0) {
- p = TclItoAw(buffer+5, diff, '0', 2);
+ p = TclItoAw(buffer + 5, diff, '0', 2);
}
TclSetObjRef(fields->tzName, Tcl_NewStringObj(buffer, p - buffer));
return TCL_OK;
@@ -2445,11 +2418,11 @@ Tcl_Obj *
LookupLastTransition(
Tcl_Interp *interp, /* Interpreter for error messages */
Tcl_WideInt tick, /* Time from the epoch */
- Tcl_Size rowc, /* Number of rows of tzdata */
+ Tcl_Size rowc, /* Number of rows of tzdata */
Tcl_Obj *const *rowv, /* Rows in tzdata */
Tcl_WideInt *rangesVal) /* Return bounds for time period */
{
- Tcl_Size l, u;
+ Tcl_Size l, u;
Tcl_Obj *compObj;
Tcl_WideInt compVal, fromVal = LLONG_MIN, toVal = LLONG_MAX;
@@ -2480,7 +2453,7 @@ LookupLastTransition(
*/
l = 0;
- u = rowc-1;
+ u = rowc - 1;
while (l < u) {
Tcl_Size m = (l + u + 1) / 2;
@@ -2492,7 +2465,7 @@ LookupLastTransition(
l = m;
fromVal = compVal;
} else {
- u = m-1;
+ u = m - 1;
toVal = compVal;
}
}
@@ -2722,7 +2695,7 @@ GetMonthDay(
/* then do forwards backwards correction */
while (1) {
if (day > dipm[month]) {
- if (month >= 11 || day <= dipm[month+1]) {
+ if (month >= 11 || day <= dipm[month + 1]) {
break;
}
month++;
@@ -2734,7 +2707,7 @@ GetMonthDay(
}
}
day -= dipm[month];
- fields->month = month+1;
+ fields->month = month + 1;
fields->dayOfMonth = day;
}
@@ -2845,7 +2818,7 @@ GetJulianDayFromEraYearMonthDay(
fields->gregorian = 1;
if (year < 1) {
fields->isBce = 1;
- fields->year = 1-year;
+ fields->year = 1 - year;
} else {
fields->isBce = 0;
fields->year = year;
@@ -2939,22 +2912,22 @@ GetJulianDayFromEraYearDay(
/* Try the Gregorian calendar first. */
fields->gregorian = 1;
fields->julianDay =
- 1721425
- + fields->dayOfYear
- + ( 365 * ym1 )
- + ( ym1 / 4 )
- - ( ym1 / 100 )
- + ( ym1 / 400 );
+ 1721425
+ + fields->dayOfYear
+ + (365 * ym1)
+ + (ym1 / 4)
+ - (ym1 / 100)
+ + (ym1 / 400);
/* If the date is before the Gregorian change, use the Julian calendar. */
- if ( fields->julianDay < changeover ) {
+ if (fields->julianDay < changeover) {
fields->gregorian = 0;
fields->julianDay =
- 1721423
- + fields->dayOfYear
- + ( 365 * ym1 )
- + ( ym1 / 4 );
+ 1721423
+ + fields->dayOfYear
+ + (365 * ym1)
+ + (ym1 / 4);
}
}
/*
@@ -2980,13 +2953,13 @@ IsGregorianLeapYear(
if (fields->isBce) {
year = 1 - year;
}
- if (year%4 != 0) {
+ if (year % 4 != 0) {
return 0;
} else if (!(fields->gregorian)) {
return 1;
- } else if (year%400 == 0) {
+ } else if (year % 400 == 0) {
return 1;
- } else if (year%100 == 0) {
+ } else if (year % 100 == 0) {
return 0;
} else {
return 1;
@@ -3107,7 +3080,7 @@ ThreadSafeLocalTime(
* Get a thread-local buffer to hold the returned time.
*/
- struct tm *tmPtr = (struct tm *)Tcl_GetThreadData(&tmKey, sizeof(struct tm));
+ struct tm *tmPtr = (struct tm *) Tcl_GetThreadData(&tmKey, sizeof(struct tm));
#ifdef HAVE_LOCALTIME_R
tmPtr = localtime_r(timePtr, tmPtr);
#else
@@ -3307,10 +3280,10 @@ ClockParseFmtScnArgs(
* (by scan or add) resp. clockval (by format) */
int objc, /* Parameter count */
Tcl_Obj *const objv[], /* Parameter vector */
- int flags, /* Flags, differentiates between format, scan, add */
- const char *syntax /* Syntax of the current command */
-) {
- Tcl_Interp *interp = opts->interp;
+ int flags, /* Flags, differentiates between format, scan, add */
+ const char *syntax) /* Syntax of the current command */
+{
+ Tcl_Interp *interp = opts->interp;
ClockClientData *dataPtr = (ClockClientData *)opts->clientData;
int gmtFlag = 0;
static const char *const options[] = {
@@ -3325,7 +3298,7 @@ ClockParseFmtScnArgs(
int i, baseIdx;
Tcl_WideInt baseVal; /* Base time, expressed in seconds from the Epoch */
- if ( flags & (CLC_SCN_ARGS) ) {
+ if (flags & CLC_SCN_ARGS) {
/* default flags (from configure) */
opts->flags |= dataPtr->defFlags & (CLF_VALIDATE);
} else {
@@ -3342,25 +3315,25 @@ ClockParseFmtScnArgs(
/* bypass integers (offsets) by "clock add" */
if (flags & CLC_ADD_ARGS) {
Tcl_WideInt num;
+
if (TclGetWideIntFromObj(NULL, objv[i], &num) == TCL_OK) {
continue;
}
}
/* get option */
if (Tcl_GetIndexFromObj(interp, objv[i], options,
- "option", 0, &optionIndex) != TCL_OK) {
+ "option", 0, &optionIndex) != TCL_OK) {
goto badOptionMsg;
}
/* if already specified */
if (saw & (1 << optionIndex)) {
- if ( !(flags & CLC_SCN_ARGS)
- && optionIndex == CLC_ARGS_BASE) {
+ if (!(flags & CLC_SCN_ARGS)
+ && optionIndex == CLC_ARGS_BASE) {
goto badOptionMsg;
}
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "bad option \"%s\": doubly present",
- TclGetString(objv[i]))
- );
+ "bad option \"%s\": doubly present",
+ TclGetString(objv[i])));
goto badOption;
}
switch (optionIndex) {
@@ -3368,28 +3341,29 @@ ClockParseFmtScnArgs(
if (flags & CLC_ADD_ARGS) {
goto badOptionMsg;
}
- opts->formatObj = objv[i+1];
+ opts->formatObj = objv[i + 1];
break;
case CLC_ARGS_GMT:
- if (Tcl_GetBooleanFromObj(interp, objv[i+1], &gmtFlag) != TCL_OK){
+ if (Tcl_GetBooleanFromObj(interp, objv[i + 1], &gmtFlag) != TCL_OK){
return TCL_ERROR;
}
break;
case CLC_ARGS_LOCALE:
- opts->localeObj = objv[i+1];
+ opts->localeObj = objv[i + 1];
break;
case CLC_ARGS_TIMEZONE:
- opts->timezoneObj = objv[i+1];
+ opts->timezoneObj = objv[i + 1];
break;
case CLC_ARGS_BASE:
- opts->baseObj = objv[(baseIdx = i+1)];
+ opts->baseObj = objv[(baseIdx = i + 1)];
break;
case CLC_ARGS_VALIDATE:
- if ( !(flags & CLC_SCN_ARGS) ) {
+ if (!(flags & CLC_SCN_ARGS)) {
goto badOptionMsg;
} else {
int val;
- if (Tcl_GetBooleanFromObj(interp, objv[i+1], &val) != TCL_OK) {
+
+ if (Tcl_GetBooleanFromObj(interp, objv[i + 1], &val) != TCL_OK) {
return TCL_ERROR;
}
if (val) {
@@ -3415,13 +3389,10 @@ ClockParseFmtScnArgs(
}
if (gmtFlag) {
opts->timezoneObj = dataPtr->literals[LIT_GMT];
- }
- else
- /* If time zone not specified use system time zone */
- if ( opts->timezoneObj == NULL
- || TclGetString(opts->timezoneObj) == NULL
- || opts->timezoneObj->length == 0
- ) {
+ } else if (opts->timezoneObj == NULL
+ || TclGetString(opts->timezoneObj) == NULL
+ || opts->timezoneObj->length == 0) {
+ /* If time zone not specified use system time zone */
opts->timezoneObj = ClockGetSystemTimeZone(opts->clientData, interp);
if (opts->timezoneObj == NULL) {
return TCL_ERROR;
@@ -3439,20 +3410,18 @@ ClockParseFmtScnArgs(
if (opts->baseObj != NULL) {
Tcl_Obj *baseObj = opts->baseObj;
- /* bypass integer recognition if looks like option "-now" */
- if (
- (baseObj->bytes && baseObj->length == 4 && *(baseObj->bytes+1) == 'n') ||
- TclGetWideIntFromObj(NULL, baseObj, &baseVal) != TCL_OK
- ) {
+ /* bypass integer recognition if looks like option "-now" */
+ if ((baseObj->bytes && baseObj->length == 4 && *(baseObj->bytes + 1) == 'n')
+ || TclGetWideIntFromObj(NULL, baseObj, &baseVal) != TCL_OK) {
/* we accept "-now" as current date-time */
static const char *const nowOpts[] = {
"-now", NULL
};
int idx;
+
if (Tcl_GetIndexFromObj(interp, baseObj, nowOpts, "seconds",
- TCL_EXACT, &idx) == TCL_OK
- ) {
+ TCL_EXACT, &idx) == TCL_OK) {
goto baseNow;
}
@@ -3473,22 +3442,18 @@ ClockParseFmtScnArgs(
*/
if (TclHasInternalRep(baseObj, &tclBignumType)
- || baseVal < TCL_MIN_SECONDS || baseVal > TCL_MAX_SECONDS
- ) {
-baseOverflow:
+ || baseVal < TCL_MIN_SECONDS || baseVal > TCL_MAX_SECONDS) {
+ baseOverflow:
Tcl_SetObjResult(interp, dataPtr->literals[LIT_INTEGER_VALUE_TOO_LARGE]);
i = baseIdx;
goto badOption;
}
-
} else {
+ Tcl_Time now;
-baseNow:
- {
- Tcl_Time now;
- Tcl_GetTime(&now);
- baseVal = (Tcl_WideInt) now.sec;
- }
+ baseNow:
+ Tcl_GetTime(&now);
+ baseVal = (Tcl_WideInt) now.sec;
}
/*
@@ -3497,17 +3462,17 @@ baseNow:
*/
/* check base fields already cached (by TZ, last-second cache) */
- if ( dataPtr->lastBase.timezoneObj == opts->timezoneObj
- && dataPtr->lastBase.date.seconds == baseVal
- && (!(dataPtr->lastBase.date.flags & CLF_CTZ)
- || dataPtr->lastTZEpoch == TzsetIfNecessary())
- ) {
+ if (dataPtr->lastBase.timezoneObj == opts->timezoneObj
+ && dataPtr->lastBase.date.seconds == baseVal
+ && (!(dataPtr->lastBase.date.flags & CLF_CTZ)
+ || dataPtr->lastTZEpoch == TzsetIfNecessary())) {
memcpy(date, &dataPtr->lastBase.date, ClockCacheableDateFieldsSize);
} else {
/* extact fields from base */
date->seconds = baseVal;
if (ClockGetDateFields(opts->clientData, interp, date, opts->timezoneObj,
- GREGORIAN_CHANGE_DATE) != TCL_OK) { /* TODO - GREGORIAN_CHANGE_DATE should be locale-dependent */
+ GREGORIAN_CHANGE_DATE) != TCL_OK) {
+ /* TODO - GREGORIAN_CHANGE_DATE should be locale-dependent */
return TCL_ERROR;
}
/* cache last base */
@@ -3517,18 +3482,14 @@ baseNow:
return TCL_OK;
-badOptionMsg:
-
+ badOptionMsg:
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "bad option \"%s\": must be %s",
- TclGetString(objv[i]), syntax)
- );
-
-badOption:
+ "bad option \"%s\": must be %s",
+ TclGetString(objv[i]), syntax));
+ badOption:
Tcl_SetErrorCode(interp, "CLOCK", "badOption",
(i < objc) ? TclGetString(objv[i]) : (char *)NULL, (char *)NULL);
-
return TCL_ERROR;
}
@@ -3554,7 +3515,7 @@ badOption:
int
ClockFormatObjCmd(
- void *clientData, /* Client data containing literal pool */
+ void *clientData, /* Client data containing literal pool */
Tcl_Interp *interp, /* Tcl interpreter */
int objc, /* Parameter count */
Tcl_Obj *const objv[]) /* Parameter values */
@@ -3562,12 +3523,12 @@ ClockFormatObjCmd(
ClockClientData *dataPtr = (ClockClientData *)clientData;
static const char *syntax = "clock format clockval|-now "
- "?-format string? "
- "?-gmt boolean? "
- "?-locale LOCALE? ?-timezone ZONE?";
+ "?-format string? "
+ "?-gmt boolean? "
+ "?-locale LOCALE? ?-timezone ZONE?";
int ret;
ClockFmtScnCmdArgs opts; /* Format, locale, timezone and base */
- DateFormat dateFmt; /* Common structure used for formatting */
+ DateFormat dateFmt; /* Common structure used for formatting */
/* even number of arguments */
if ((objc & 1) == 1) {
@@ -3595,18 +3556,11 @@ ClockFormatObjCmd(
}
/* Use compiled version of Format - */
-
ret = ClockFormat(&dateFmt, &opts);
-done:
-
+ done:
TclUnsetObjRef(dateFmt.date.tzName);
-
- if (ret != TCL_OK) {
- return ret;
- }
-
- return TCL_OK;
+ return ret;
}
/*----------------------------------------------------------------------
@@ -3631,7 +3585,7 @@ done:
int
ClockScanObjCmd(
- void *clientData, /* Client data containing literal pool */
+ void *clientData, /* Client data containing literal pool */
Tcl_Interp *interp, /* Tcl interpreter */
int objc, /* Parameter count */
Tcl_Obj *const objv[]) /* Parameter values */
@@ -3643,8 +3597,8 @@ ClockScanObjCmd(
"?-locale LOCALE? ?-timezone ZONE? ?-validate boolean?";
int ret;
ClockFmtScnCmdArgs opts; /* Format, locale, timezone and base */
- DateInfo yy; /* Common structure used for parsing */
- DateInfo *info = &yy;
+ DateInfo yy; /* Common structure used for parsing */
+ DateInfo *info = &yy;
/* even number of arguments */
if ((objc & 1) == 1) {
@@ -3673,17 +3627,17 @@ ClockScanObjCmd(
if (opts.formatObj == NULL) {
/* Use compiled version of FreeScan - */
- /* [SB] TODO: Perhaps someday we'll localize the legacy code. Right now, it's not localized. */
+ /* [SB] TODO: Perhaps someday we'll localize the legacy code. Right now,
+ * it's not localized. */
if (opts.localeObj != NULL) {
- Tcl_SetObjResult(interp,
- Tcl_NewStringObj("legacy [clock scan] does not support -locale", -1));
+ Tcl_SetObjResult(interp, Tcl_NewStringObj(
+ "legacy [clock scan] does not support -locale", -1));
Tcl_SetErrorCode(interp, "CLOCK", "flagWithLegacyFormat", (char *)NULL);
ret = TCL_ERROR;
goto done;
}
ret = ClockFreeScan(&yy, objv[1], &opts);
- }
- else {
+ } else {
/* Use compiled version of Scan - */
ret = ClockScan(&yy, objv[1], &opts);
@@ -3698,9 +3652,8 @@ ClockScanObjCmd(
* validate with stage 1 before local time conversion, otherwise it may
* adjust date/time tokens to valid values
*/
- if ( (opts.flags & CLF_VALIDATE_S1) &&
- info->flags & (CLF_ASSEMBLE_SECONDS|CLF_LOCALSEC)
- ) {
+ if ((opts.flags & CLF_VALIDATE_S1)
+ && info->flags & (CLF_ASSEMBLE_SECONDS|CLF_LOCALSEC)) {
ret = ClockValidDate(&yy, &opts, CLF_VALIDATE_S1);
if (ret != TCL_OK) {
goto done;
@@ -3715,21 +3668,18 @@ ClockScanObjCmd(
}
/* Apply remaining validation rules, if expected */
- if ( (opts.flags & CLF_VALIDATE) ) {
+ if ((opts.flags & CLF_VALIDATE)) {
ret = ClockValidDate(&yy, &opts, opts.flags & CLF_VALIDATE);
if (ret != TCL_OK) {
goto done;
}
}
-done:
-
+ done:
TclUnsetObjRef(yy.date.tzName);
-
if (ret != TCL_OK) {
return ret;
}
-
Tcl_SetObjResult(interp, Tcl_NewWideIntObj(yy.date.seconds));
return TCL_OK;
}
@@ -3751,19 +3701,16 @@ done:
static int
ClockScanCommit(
- DateInfo *info, /* Clock scan info structure */
+ DateInfo *info, /* Clock scan info structure */
ClockFmtScnCmdArgs *opts) /* Format, locale, timezone and base */
{
/* If needed assemble julianDay using year, month, etc. */
if (info->flags & CLF_ASSEMBLE_JULIANDAY) {
if ((info->flags & CLF_ISO8601WEAK)) {
GetJulianDayFromEraYearWeekDay(&yydate, GREGORIAN_CHANGE_DATE);
- }
- else
- if ( !(info->flags & CLF_DAYOFYEAR) /* no day of year */
- || (info->flags & (CLF_DAYOFMONTH|CLF_MONTH)) /* yymmdd over yyddd */
- == (CLF_DAYOFMONTH|CLF_MONTH)
- ) {
+ } else if (!(info->flags & CLF_DAYOFYEAR) /* no day of year */
+ || (info->flags & (CLF_DAYOFMONTH|CLF_MONTH)) /* yymmdd over yyddd */
+ == (CLF_DAYOFMONTH|CLF_MONTH)) {
GetJulianDayFromEraYearMonthDay(&yydate, GREGORIAN_CHANGE_DATE);
} else {
GetJulianDayFromEraYearDay(&yydate, GREGORIAN_CHANGE_DATE);
@@ -3775,11 +3722,12 @@ ClockScanCommit(
/* some overflow checks */
if (info->flags & CLF_JULIANDAY) {
ClockClientData *dataPtr = (ClockClientData *)opts->clientData;
+
double curJDN = (double)yydate.julianDay
- + ((double)yySecondOfDay - SECONDS_PER_DAY/2) / SECONDS_PER_DAY;
+ + ((double)yySecondOfDay - SECONDS_PER_DAY/2) / SECONDS_PER_DAY;
if (curJDN > dataPtr->maxJDN) {
Tcl_SetObjResult(opts->interp, Tcl_NewStringObj(
- "requested date too large to represent", -1));
+ "requested date too large to represent", -1));
Tcl_SetErrorCode(opts->interp, "CLOCK", "dateTooLarge", (char *)NULL);
return TCL_ERROR;
}
@@ -3789,9 +3737,9 @@ ClockScanCommit(
if (info->flags & (CLF_ASSEMBLE_SECONDS)) {
yydate.localSeconds =
- -210866803200LL
- + ( SECONDS_PER_DAY * yydate.julianDay )
- + ( yySecondOfDay % SECONDS_PER_DAY );
+ -210866803200LL
+ + (SECONDS_PER_DAY * yydate.julianDay)
+ + (yySecondOfDay % SECONDS_PER_DAY);
}
if (info->flags & (CLF_ASSEMBLE_SECONDS|CLF_LOCALSEC)) {
@@ -3804,7 +3752,6 @@ ClockScanCommit(
/* Increment UTC seconds with relative time */
yydate.seconds += yyRelSeconds;
-
return TCL_OK;
}
@@ -3825,7 +3772,7 @@ ClockScanCommit(
static int
ClockValidDate(
- DateInfo *info, /* Clock scan info structure */
+ DateInfo *info, /* Clock scan info structure */
ClockFmtScnCmdArgs *opts, /* Scan options */
int stage) /* Stage to validate (1, 2 or 3 for both) */
{
@@ -3834,13 +3781,13 @@ ClockValidDate(
int tempCpyFlg = 0;
ClockClientData *dataPtr = (ClockClientData *)opts->clientData;
- #if 0
+#if 0
printf("yyMonth %d, yyDay %d, yyDayOfYear %d, yyHour %d, yyMinutes %d, yySeconds %d, "
- "yySecondOfDay %d, sec %d, daySec %d, tzOffset %d\n",
- yyMonth, yyDay, yydate.dayOfYear, yyHour, yyMinutes, yySeconds,
- yySecondOfDay, (int)yydate.localSeconds, (int)(yydate.localSeconds % SECONDS_PER_DAY),
- yydate.tzOffset);
- #endif
+ "yySecondOfDay %d, sec %d, daySec %d, tzOffset %d\n",
+ yyMonth, yyDay, yydate.dayOfYear, yyHour, yyMinutes, yySeconds,
+ yySecondOfDay, (int)yydate.localSeconds, (int)(yydate.localSeconds % SECONDS_PER_DAY),
+ yydate.tzOffset);
+#endif
if (!(stage & CLF_VALIDATE_S1) || !(opts->flags & CLF_VALIDATE_S1)) {
goto stage_2;
@@ -3850,15 +3797,19 @@ ClockValidDate(
/* first year (used later in hath / daysInPriorMonths) */
if ((info->flags & (CLF_YEAR|CLF_ISO8601YEAR))) {
if ((info->flags & CLF_ISO8601YEAR)) {
- if ( yydate.iso8601Year < dataPtr->validMinYear
- || yydate.iso8601Year > dataPtr->validMaxYear ) {
- errMsg = "invalid iso year"; errCode = "iso year"; goto error;
+ if (yydate.iso8601Year < dataPtr->validMinYear
+ || yydate.iso8601Year > dataPtr->validMaxYear) {
+ errMsg = "invalid iso year";
+ errCode = "iso year";
+ goto error;
}
}
if (info->flags & CLF_YEAR) {
- if ( yyYear < dataPtr->validMinYear
- || yyYear > dataPtr->validMaxYear ) {
- errMsg = "invalid year"; errCode = "year"; goto error;
+ if (yyYear < dataPtr->validMinYear
+ || yyYear > dataPtr->validMaxYear) {
+ errMsg = "invalid year";
+ errCode = "year";
+ goto error;
}
} else if ((info->flags & CLF_ISO8601YEAR)) {
yyYear = yydate.iso8601Year; /* used to recognize leap */
@@ -3866,61 +3817,77 @@ ClockValidDate(
if ((info->flags & (CLF_ISO8601YEAR|CLF_YEAR))
== (CLF_ISO8601YEAR|CLF_YEAR)) {
if (yyYear != yydate.iso8601Year) {
- errMsg = "ambiguous year"; errCode = "year"; goto error;
+ errMsg = "ambiguous year";
+ errCode = "year";
+ goto error;
}
}
}
/* and month (used later in hath) */
if (info->flags & CLF_MONTH) {
- if ( yyMonth < 1 || yyMonth > 12 ) {
- errMsg = "invalid month"; errCode = "month"; goto error;
+ if (yyMonth < 1 || yyMonth > 12) {
+ errMsg = "invalid month";
+ errCode = "month";
+ goto error;
}
}
/* day of month */
if (info->flags & (CLF_DAYOFMONTH|CLF_DAYOFWEEK)) {
- if ( yyDay < 1 || yyDay > 31 ) {
- errMsg = "invalid day"; errCode = "day"; goto error;
- }
- else
- if ( (info->flags & CLF_MONTH) ) {
+ if (yyDay < 1 || yyDay > 31) {
+ errMsg = "invalid day";
+ errCode = "day";
+ goto error;
+ } else if ((info->flags & CLF_MONTH)) {
const int *h = hath[IsGregorianLeapYear(&yydate)];
- if ( yyDay > h[yyMonth-1] ) {
- errMsg = "invalid day"; goto error;
+
+ if (yyDay > h[yyMonth - 1]) {
+ errMsg = "invalid day";
+ goto error;
}
}
}
if (info->flags & CLF_DAYOFYEAR) {
- if ( yydate.dayOfYear < 1
- || yydate.dayOfYear > daysInPriorMonths[IsGregorianLeapYear(&yydate)][12] ) {
- errMsg = "invalid day of year"; errCode = "day of year"; goto error;
+ if (yydate.dayOfYear < 1
+ || yydate.dayOfYear > daysInPriorMonths[IsGregorianLeapYear(&yydate)][12]) {
+ errMsg = "invalid day of year";
+ errCode = "day of year";
+ goto error;
}
}
/* mmdd !~ ddd */
if ((info->flags & (CLF_DAYOFYEAR|CLF_DAYOFMONTH|CLF_MONTH))
- == (CLF_DAYOFYEAR|CLF_DAYOFMONTH|CLF_MONTH)) {
+ == (CLF_DAYOFYEAR|CLF_DAYOFMONTH|CLF_MONTH)) {
if (!tempCpyFlg) {
memcpy(&temp, &yydate, sizeof(temp));
tempCpyFlg = 1;
}
GetJulianDayFromEraYearDay(&temp, GREGORIAN_CHANGE_DATE);
if (temp.julianDay != yydate.julianDay) {
- errMsg = "ambiguous day"; errCode = "day"; goto error;
+ errMsg = "ambiguous day";
+ errCode = "day";
+ goto error;
}
}
if (info->flags & CLF_TIME) {
/* hour */
- if ( yyHour < 0 || yyHour > ((yyMeridian == MER24) ? 23 : 12) ) {
- errMsg = "invalid time (hour)"; errCode = "hour"; goto error;
+ if (yyHour < 0 || yyHour > ((yyMeridian == MER24) ? 23 : 12)) {
+ errMsg = "invalid time (hour)";
+ errCode = "hour";
+ goto error;
}
/* minutes */
- if ( yyMinutes < 0 || yyMinutes > 59 ) {
- errMsg = "invalid time (minutes)"; errCode = "minutes"; goto error;
+ if (yyMinutes < 0 || yyMinutes > 59) {
+ errMsg = "invalid time (minutes)";
+ errCode = "minutes";
+ goto error;
}
/* oldscan could return secondOfDay (parsedTime) -1 by invalid time (ex.: 25:00:00) */
- if ( yySeconds < 0 || yySeconds > 59 || yySecondOfDay <= -1 ) {
- errMsg = "invalid time"; errCode = "seconds"; goto error;
+ if (yySeconds < 0 || yySeconds > 59 || yySecondOfDay <= -1) {
+ errMsg = "invalid time";
+ errCode = "seconds";
+ goto error;
}
}
@@ -3944,9 +3911,10 @@ ClockValidDate(
* should have valid localSeconds (was not invalidated to TCL_INV_SECONDS),
* so if it was invalidated - invalid time, outside the time-zone (in DST-hole)
*/
- if ( yydate.localSeconds == TCL_INV_SECONDS ) {
+ if (yydate.localSeconds == TCL_INV_SECONDS) {
errMsg = "invalid time (does not exist in this time-zone)";
- errCode = "out-of-time"; goto error;
+ errCode = "out-of-time";
+ goto error;
}
}
@@ -3958,15 +3926,17 @@ ClockValidDate(
}
GetYearWeekDay(&temp, GREGORIAN_CHANGE_DATE);
if (temp.dayOfWeek != yyDayOfWeek) {
- errMsg = "invalid day of week"; errCode = "day of week"; goto error;
+ errMsg = "invalid day of week";
+ errCode = "day of week";
+ goto error;
}
}
return TCL_OK;
error:
- Tcl_SetObjResult(opts->interp,
- Tcl_ObjPrintf("unable to convert input string: %s", errMsg));
+ Tcl_SetObjResult(opts->interp, Tcl_ObjPrintf(
+ "unable to convert input string: %s", errMsg));
Tcl_SetErrorCode(opts->interp, "CLOCK", "invInpStr", errCode, (char *)NULL);
return TCL_ERROR;
}
@@ -3988,13 +3958,13 @@ ClockValidDate(
int
ClockFreeScan(
- DateInfo *info, /* Date fields used for parsing & converting
+ DateInfo *info, /* Date fields used for parsing & converting
* simultaneously a yy-parse structure of the
* TclClockFreeScan */
Tcl_Obj *strObj, /* String containing the time to scan */
ClockFmtScnCmdArgs *opts) /* Command options */
{
- Tcl_Interp *interp = opts->interp;
+ Tcl_Interp *interp = opts->interp;
ClockClientData *dataPtr = (ClockClientData *)opts->clientData;
int ret = TCL_ERROR;
@@ -4011,9 +3981,10 @@ ClockFreeScan(
if (TclClockFreeScan(interp, info) != TCL_OK) {
Tcl_Obj *msg;
+
TclNewObj(msg);
Tcl_AppendPrintfToObj(msg, "unable to convert date-time string \"%s\": %s",
- TclGetString(strObj), Tcl_GetString(Tcl_GetObjResult(interp)));
+ TclGetString(strObj), Tcl_GetString(Tcl_GetObjResult(interp)));
Tcl_SetObjResult(interp, msg);
goto done;
}
@@ -4046,8 +4017,9 @@ ClockFreeScan(
Tcl_Obj *tzObjStor = NULL;
int minEast = -yyTimezone;
int dstFlag = 1 - yyDSTmode;
+
tzObjStor = ClockFormatNumericTimeZone(
- 60 * minEast + 3600 * dstFlag);
+ 60 * minEast + 3600 * dstFlag);
Tcl_IncrRefCount(tzObjStor);
opts->timezoneObj = ClockSetupTimeZone(dataPtr, interp, tzObjStor);
@@ -4056,7 +4028,7 @@ ClockFreeScan(
} else {
/* simplest case - GMT / UTC */
opts->timezoneObj = ClockSetupTimeZone(dataPtr, interp,
- dataPtr->literals[LIT_GMT]);
+ dataPtr->literals[LIT_GMT]);
}
if (opts->timezoneObj == NULL) {
goto done;
@@ -4071,7 +4043,7 @@ ClockFreeScan(
* For freescan apply validation rules (stage 1) before mixed with
* relative time (otherwise always valid recalculated date & time).
*/
- if ( (opts->flags & CLF_VALIDATE) ) {
+ if ((opts->flags & CLF_VALIDATE)) {
if (ClockValidDate(info, opts, CLF_VALIDATE_S1) != TCL_OK) {
goto done;
}
@@ -4084,24 +4056,17 @@ ClockFreeScan(
if ((info->flags & (CLF_TIME|CLF_HAVEDATE)) == CLF_HAVEDATE) {
yySecondOfDay = 0;
info->flags |= CLF_ASSEMBLE_SECONDS;
- }
- else
- if (info->flags & CLF_TIME) {
+ } else if (info->flags & CLF_TIME) {
yySecondOfDay = ToSeconds(yyHour, yyMinutes,
- yySeconds, yyMeridian);
+ yySeconds, yyMeridian);
info->flags |= CLF_ASSEMBLE_SECONDS;
- }
- else
- if ( (info->flags & (CLF_DAYOFWEEK|CLF_HAVEDATE)) == CLF_DAYOFWEEK
+ } else if ((info->flags & (CLF_DAYOFWEEK|CLF_HAVEDATE)) == CLF_DAYOFWEEK
|| (info->flags & CLF_ORDINALMONTH)
- || ( (info->flags & CLF_RELCONV)
- && ( yyRelMonth != 0
- || yyRelDay != 0 ) )
- ) {
+ || ((info->flags & CLF_RELCONV)
+ && (yyRelMonth != 0 || yyRelDay != 0))) {
yySecondOfDay = 0;
info->flags |= CLF_ASSEMBLE_SECONDS;
- }
- else {
+ } else {
yySecondOfDay = yydate.localSeconds % SECONDS_PER_DAY;
}
@@ -4113,8 +4078,7 @@ ClockFreeScan(
/* Free scanning completed - date ready */
-done:
-
+ done:
return ret;
}
@@ -4134,19 +4098,16 @@ done:
*/
int
ClockCalcRelTime(
- DateInfo *info) /* Date fields used for converting */
+ DateInfo *info) /* Date fields used for converting */
{
-
int prevDayOfWeek = yyDayOfWeek; /* preserve unchanged day of week */
/*
* Because some calculations require in-between conversion of the
* julian day, we can repeat this processing multiple times
*/
-repeat_rel:
-
+ repeat_rel:
if (info->flags & CLF_RELCONV) {
-
/*
* Relative conversion normally possible in UTC time only, because
* of possible wrong local time increment if ignores in-between DST-hole.
@@ -4192,7 +4153,6 @@ repeat_rel:
/* add days (or other parts aligned to days) */
if (yyRelDay) {
-
/* assemble julianDay using new year, month, etc. */
if (info->flags & CLF_ASSEMBLE_JULIANDAY) {
GetJulianDayFromEraYearMonthDay(&yydate, GREGORIAN_CHANGE_DATE);
@@ -4202,7 +4162,6 @@ repeat_rel:
/* julianDay was changed, on demand (lazy) extract year, month, etc. again */
info->flags |= CLF_ASSEMBLE_DATE|CLF_ASSEMBLE_SECONDS;
-
yyRelDay = 0;
}
@@ -4213,7 +4172,6 @@ repeat_rel:
/* if seconds increment outside of current date, increment day */
if (newSecs / SECONDS_PER_DAY != yySecondOfDay / SECONDS_PER_DAY) {
-
yyRelDay += newSecs / SECONDS_PER_DAY;
yySecondOfDay = 0;
yyRelSeconds = newSecs % SECONDS_PER_DAY;
@@ -4268,7 +4226,6 @@ repeat_rel:
*/
if ((info->flags & (CLF_DAYOFWEEK|CLF_HAVEDATE)) == CLF_DAYOFWEEK) {
-
/* restore scanned day of week */
yyDayOfWeek = prevDayOfWeek;
@@ -4280,7 +4237,7 @@ repeat_rel:
yydate.isBce = 0;
yydate.julianDay = WeekdayOnOrBefore(yyDayOfWeek, yydate.julianDay + 6)
- + 7 * yyDayOrdinal;
+ + 7 * yyDayOrdinal;
if (yyDayOrdinal > 0) {
yydate.julianDay -= 7;
}
@@ -4325,6 +4282,7 @@ ClockWeekdaysOffs(
/* resulting day of week */
{
int day = (offs % 7);
+
/* compiler fix for negative offs - wrap (0, -1) -> (-1, 6) */
if (day < 0) {
day = 7 + day;
@@ -4335,13 +4293,14 @@ ClockWeekdaysOffs(
/* adjust if we start from a weekend */
if (dayOfWeek > 5) {
int adj = 5 - dayOfWeek;
+
offs += adj;
resDayOfWeek += adj;
}
/* adjust if we end up on a weekend */
if (resDayOfWeek > 5) {
- offs += 2;
+ offs += 2;
}
return offs;
@@ -4392,19 +4351,19 @@ ClockWeekdaysOffs(
int
ClockAddObjCmd(
- void *clientData, /* Client data containing literal pool */
+ void *clientData, /* Client data containing literal pool */
Tcl_Interp *interp, /* Tcl interpreter */
int objc, /* Parameter count */
Tcl_Obj *const objv[]) /* Parameter values */
{
static const char *syntax = "clock add clockval|-now ?number units?..."
- "?-gmt boolean? "
- "?-locale LOCALE? ?-timezone ZONE?";
+ "?-gmt boolean? "
+ "?-locale LOCALE? ?-timezone ZONE?";
ClockClientData *dataPtr = (ClockClientData *)clientData;
int ret;
ClockFmtScnCmdArgs opts; /* Format, locale, timezone and base */
- DateInfo yy; /* Common structure used for parsing */
- DateInfo *info = &yy;
+ DateInfo yy; /* Common structure used for parsing */
+ DateInfo *info = &yy;
/* add "week" to units also (because otherwise ambiguous) */
static const char *const units[] = {
@@ -4459,14 +4418,13 @@ ClockAddObjCmd(
continue;
}
/* get unit */
- if (Tcl_GetIndexFromObj(interp, objv[i+1], units, "unit", 0,
+ if (Tcl_GetIndexFromObj(interp, objv[i + 1], units, "unit", 0,
&unitIndex) != TCL_OK) {
goto done;
}
if (TclHasInternalRep(objv[i], &tclBignumType)
- || offs > (unitIndex < CLC_ADD_HOURS ? 0x7fffffff : TCL_MAX_SECONDS)
- || offs < (unitIndex < CLC_ADD_HOURS ? -0x7fffffff : TCL_MIN_SECONDS)
- ) {
+ || offs > (unitIndex < CLC_ADD_HOURS ? 0x7fffffff : TCL_MAX_SECONDS)
+ || offs < (unitIndex < CLC_ADD_HOURS ? -0x7fffffff : TCL_MIN_SECONDS)) {
Tcl_SetObjResult(interp, dataPtr->literals[LIT_INTEGER_VALUE_TOO_LARGE]);
goto done;
}
@@ -4480,15 +4438,13 @@ ClockAddObjCmd(
* correct date info, because the date may be changed,
* so refresh it now */
- if ( (info->flags & CLF_RELCONV)
- && ( unitIndex == CLC_ADD_WEEKDAYS
- /* some months can be shorter as another */
- || yyRelMonth || yyRelDay
- /* day changed */
- || yySeconds + yyRelSeconds > SECONDS_PER_DAY
- || yySeconds + yyRelSeconds < 0
- )
- ) {
+ if ((info->flags & CLF_RELCONV)
+ && (unitIndex == CLC_ADD_WEEKDAYS
+ /* some months can be shorter as another */
+ || yyRelMonth || yyRelDay
+ /* day changed */
+ || yySeconds + yyRelSeconds > SECONDS_PER_DAY
+ || yySeconds + yyRelSeconds < 0)) {
if (ClockCalcRelTime(info) != TCL_OK) {
goto done;
}
@@ -4542,14 +4498,11 @@ ClockAddObjCmd(
ret = ClockScanCommit(&yy, &opts);
-done:
-
+ done:
TclUnsetObjRef(yy.date.tzName);
-
if (ret != TCL_OK) {
return ret;
}
-
Tcl_SetObjResult(interp, Tcl_NewWideIntObj(yy.date.seconds));
return TCL_OK;
}
@@ -4633,7 +4586,7 @@ ClockSafeCatchCmd(
return Tcl_CatchObjCmd(NULL, interp, objc, objv);
}
- statePtr = (InterpState *)Tcl_SaveInterpState(interp, 0);
+ statePtr = (InterpState *) Tcl_SaveInterpState(interp, 0);
if (!statePtr->errorInfo) {
/* todo: avoid traced get of errorInfo here */
TclInitObjRef(statePtr->errorInfo,