* complete copyright information.
*/
-#include <h/mh.h> /* for snprintf() */
-#include <h/nmh.h>
-#include <h/utils.h>
-#include <h/tws.h>
+#include "h/mh.h"
+#include "dtime.h"
+#include "h/nmh.h"
+#include "h/utils.h"
+#include "h/tws.h"
#include <time.h>
#if !defined(HAVE_STRUCT_TM_TM_GMTOFF)
extern long timezone;
#endif
+/* Size of largest possible int representing a time zone offset in minutes:
+ 2,147,483,648 / 60 = 35,791,394 */
+#define DTZ_BUFFER_SIZE (sizeof "+3579139459")
+
/*
* The number of days in the year, accounting for leap years
*/
char *
dasctime (struct tws *tw, int flags)
{
- char buffer[80];
+ char buffer[77];
+ char tzbuffer[DTZ_BUFFER_SIZE];
static char result[80];
int twf;
/* Display timezone if known */
if (tw->tw_flags & TW_SZEXP)
- snprintf(result, sizeof(result), " %s", dtimezone(tw->tw_zone, tw->tw_flags | flags));
+ snprintf(tzbuffer, sizeof(tzbuffer), " %s", dtimezone(tw->tw_zone, tw->tw_flags | flags));
else
- result[0] = '\0';
+ tzbuffer[0] = '\0';
snprintf(buffer, sizeof(buffer), "%02d %s %0*d %02d:%02d:%02d%s",
tw->tw_mday, tw_moty[tw->tw_mon],
tw->tw_year < 100 ? 2 : 4, tw->tw_year,
- tw->tw_hour, tw->tw_min, tw->tw_sec, result);
+ tw->tw_hour, tw->tw_min, tw->tw_sec, tzbuffer);
if ((twf = tw->tw_flags & TW_SDAY)) {
if (twf == TW_SEXP)
* return the string representation of the numeric offset.
*/
-char *dtimezone(int offset, int flags)
+char *
+dtimezone(int offset, int flags)
{
- static char buffer[sizeof "+3579139459"]; /* 2,147,483,648 / 60 = 35,791,394 */
+ static char buffer[DTZ_BUFFER_SIZE];
bool pos;
unsigned os, hours, mins;
if (tw->tw_flags & TW_DST)
result -= 60 * 60; /* One hour. */
- return (tw->tw_clock = result);
+ return tw->tw_clock = result;
}