Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Apr 1998 13:10:12 -0700 (PDT)
From:      Max Euston <meuston@jmrodgers.com>
To:        freebsd-bugs
Subject:   RE: bin/6308: date(1) -v argument cannot vary seconds
Message-ID:  <199804152010.NAA27889@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/6308; it has been noted by GNATS.

From: Max Euston <meuston@jmrodgers.com>
To: "'nsmart@indigo.ie'" <nsmart@indigo.ie>,
        "FreeBSD-gnats-submit@FreeBSD.ORG" <FreeBSD-gnats-submit@FreeBSD.ORG>
Cc:  Subject: RE: bin/6308: date(1) -v argument cannot vary seconds
Date: Wed, 15 Apr 1998 16:05:48 -0400

 Boy, I must be bored or something... 8-)
 
 
 diff -u /usr/src/bin/date/date.1 ./date.1
 --- /usr/src/bin/date/date.1	Fri Feb 20 15:32:31 1998
 +++ ./date.1	Wed Apr 15 14:41:01 1998
 @@ -47,7 +47,7 @@
  .Op Fl d Ar dst
  .Op Fl r Ar seconds
  .Op Fl t Ar minutes_west
 -.Op Fl v Ns Ar [+|-]val Ns Op ymwdHM
 +.Op Fl v Ns Ar [+|-]val Ns Op ymwdHMS
  .Ar ...
  .Op Fl f Ar fmt Ar date | [[[[yy]mm]dd]HH]MM[\&.ss]
  .Op Cm + Ns Ar format
 @@ -108,8 +108,8 @@
  .Tn UCT
  (universal) time.
  .It Fl v
 -Adjust the minute, hour, month day, week day, month or year according to
 -.Ar val .
 +Adjust the second, minute, hour, month day, week day, month or year according to
 +.Ar val .  
  If
  .Ar val
  is preceeded with a plus or minus sign, the date is adjusted forwards
 @@ -117,7 +117,8 @@
  part of the date is set.  The date can be adjusted as many times as
  required using these flags.  Flags are processed in the order given.
  .Pp
 -Minutes are in the range 0-59, hours are in the range 1-12, month days
 +Seconds are in the range 0-59,
 +minutes are in the range 0-59, hours are in the range 1-12, month days
  are in the range 1-31, week days are in the range 0-6 (sun-sat), months
  are in the range 1-12 (jan-dec) and years are in the range 80-38 or
  1980-2038.
 @@ -129,9 +130,10 @@
  .Ar m ,
  .Ar w ,
  .Ar d ,
 -.Ar H
 -or
 +.Ar H ,
  .Ar M
 +or
 +.Ar S
  must be used to specify which part of the date is to be adjusted.
  .Pp
  The week day or month may be specified using a name rather than a
 
 
 diff -u /usr/src/bin/date/date.c ./date.c
 --- /usr/src/bin/date/date.c	Fri Feb 20 15:32:31 1998
 +++ ./date.c	Wed Apr 15 14:45:04 1998
 @@ -277,7 +277,7 @@
  {
  	(void)fprintf(stderr, "%s\n%s\n",
  	    "usage: date [-nu] [-d dst] [-r seconds] [-t west] "
 -	    "[-v[+|-]val[ymwdHM]] ... ",
 +	    "[-v[+|-]val[ymwdHMS]] ... ",
  	    "            [-f fmt date | [[[[yy]mm]dd]HH]MM[.ss]] [+format]");
  	exit(1);
  }
 
 
 diff -u /usr/src/bin/date/vary.c ./vary.c
 --- /usr/src/bin/date/vary.c	Fri Feb 20 15:32:32 1998
 +++ ./vary.c	Wed Apr 15 14:25:16 1998
 @@ -329,6 +329,43 @@
    return mktime(t) != -1;
  }
  
 +static int
 +adjsec(struct tm *t, char type, int val)
 +{
 +  if (val < 0)
 +    return 0;
 +
 +  switch (type) {
 +    case '+':
 +      if (!adjmin(t, '+', (t->tm_sec + val) / 60))
 +        return 0;
 +      val %= 60;
 +      t->tm_sec += val;
 +      if (t->tm_sec > 59)
 +        t->tm_sec -= 60;
 +      break;
 +
 +    case '-':
 +      if (!adjmin(t, '-', val / 60))
 +        return 0;
 +      val %= 60;
 +      if (val > t->tm_sec) {
 +        if (!adjmin(t, '-', 1))
 +          return 0;
 +        val -= 60;
 +      }
 +      t->tm_sec -= val;
 +      break;
 +
 +    default:
 +      if (val > 59)
 +        return 0;
 +      t->tm_sec = val;
 +  }
 +
 +  return mktime(t) != -1;
 +}
 +
  const struct vary *
  vary_apply(const struct vary *v, struct tm *t)
  {
 @@ -367,6 +404,10 @@
        which = arg[len-1];
        
        switch (which) {
 +        case 'S':
 +          if (!adjsec(t, type, val))
 +            return v;
 +          break;
          case 'M':
            if (!adjmin(t, type, val))
              return v;
 
 
 
 Max
 
 -----
 Max Euston <meuston@jmrodgers.com>
 
 

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199804152010.NAA27889>