bin/date: Upgrade calculations
Use long instead of int for numerous calculations, fixing a number of date calculation overflow issues. Obtained from: DragonflyBSD Git log: 4238ce6f0c6df33ce677ae298b245c62cd60fb43 (only partial)
This commit is contained in:
parent
ee8b0c436d
commit
4456846a1a
@ -34,7 +34,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include "vary.h"
|
||||
|
||||
struct trans {
|
||||
int val;
|
||||
long val;
|
||||
const char *str;
|
||||
};
|
||||
|
||||
@ -52,7 +52,7 @@ static struct trans trans_wday[] = {
|
||||
};
|
||||
|
||||
static char digits[] = "0123456789";
|
||||
static int adjhour(struct tm *, char, int, int);
|
||||
static int adjhour(struct tm *, char, long, int);
|
||||
|
||||
static int
|
||||
domktime(struct tm *t, char type)
|
||||
@ -125,7 +125,7 @@ daysinmonth(const struct tm *t)
|
||||
|
||||
|
||||
static int
|
||||
adjyear(struct tm *t, char type, int val, int mk)
|
||||
adjyear(struct tm *t, char type, long val, int mk)
|
||||
{
|
||||
switch (type) {
|
||||
case '+':
|
||||
@ -146,7 +146,7 @@ adjyear(struct tm *t, char type, int val, int mk)
|
||||
}
|
||||
|
||||
static int
|
||||
adjmon(struct tm *t, char type, int val, int istext, int mk)
|
||||
adjmon(struct tm *t, char type, long val, int istext, int mk)
|
||||
{
|
||||
int lmdays;
|
||||
|
||||
@ -206,7 +206,7 @@ adjmon(struct tm *t, char type, int val, int istext, int mk)
|
||||
}
|
||||
|
||||
static int
|
||||
adjday(struct tm *t, char type, int val, int mk)
|
||||
adjday(struct tm *t, char type, long val, int mk)
|
||||
{
|
||||
int lmdays;
|
||||
|
||||
@ -250,7 +250,7 @@ adjday(struct tm *t, char type, int val, int mk)
|
||||
}
|
||||
|
||||
static int
|
||||
adjwday(struct tm *t, char type, int val, int istext, int mk)
|
||||
adjwday(struct tm *t, char type, long val, int istext, int mk)
|
||||
{
|
||||
if (val < 0)
|
||||
return 0;
|
||||
@ -286,7 +286,7 @@ adjwday(struct tm *t, char type, int val, int istext, int mk)
|
||||
}
|
||||
|
||||
static int
|
||||
adjhour(struct tm *t, char type, int val, int mk)
|
||||
adjhour(struct tm *t, char type, long val, int mk)
|
||||
{
|
||||
if (val < 0)
|
||||
return 0;
|
||||
@ -331,7 +331,7 @@ adjhour(struct tm *t, char type, int val, int mk)
|
||||
}
|
||||
|
||||
static int
|
||||
adjmin(struct tm *t, char type, int val, int mk)
|
||||
adjmin(struct tm *t, char type, long val, int mk)
|
||||
{
|
||||
if (val < 0)
|
||||
return 0;
|
||||
@ -372,7 +372,7 @@ adjmin(struct tm *t, char type, int val, int mk)
|
||||
}
|
||||
|
||||
static int
|
||||
adjsec(struct tm *t, char type, int val, int mk)
|
||||
adjsec(struct tm *t, char type, long val, int mk)
|
||||
{
|
||||
if (val < 0)
|
||||
return 0;
|
||||
@ -419,7 +419,7 @@ vary_apply(const struct vary *v, struct tm *t)
|
||||
char which;
|
||||
char *arg;
|
||||
size_t len;
|
||||
int val;
|
||||
long val;
|
||||
|
||||
for (; v; v = v->next) {
|
||||
type = *v->arg;
|
||||
|
Loading…
Reference in New Issue
Block a user