Re: cal's -y flag usage
Johannes Thyssen Tishman <[email protected]>
| Newsgroups | gmane.os.openbsd.tech |
|---|---|
| Message-ID | <[email protected]> |
2026-06-25T21:47:47+0200 Jeremie Courreges-Anglas <[email protected]>: > On Thu, Jun 25, 2026 at 09:13:44AM +0000, Johannes Thyssen Tishman wrote: > > While playing with cal I noticed that using the -y flag along with a > > single non-numerical argument or with two arguments would essentially > > cause the option to be ignored: > > > > $ cal -y jun > > $ cal -y jun 2026 > > $ cal -y 06 2026 > > > > All three commands output the calendar for June 2026 instead of the > > entire year. Before I try to patch this, is this the desired/intended > > behaviour? > > IMO -y should be ignored when a year is later specified on the command > line (current behavior), and should conflict with specifying a month. So, like this (diff below)? $ cal -y # calendar for year 2026 $ cal -y 2000 # calendar for year 2000 $ cal -y jul # error $ cal -y jul 2000 # error > > In case a change is desired, would it make sense to split the SYNOPSIS > > in the man page into two lines? E.g.: > > > > cal [-jmw] [month] [year] > > cal [-jmwy] [year] > > It doesn't really make sense to specify [year] when you specify -y. > I'm not sure the synopsis needs to be amended. I agree, I forgot that cal yyyy would print the year calendar already. Index: usr.bin/cal/cal.1 =================================================================== RCS file: /cvs/src/usr.bin/cal/cal.1,v diff -u -p -r1.33 cal.1 --- usr.bin/cal/cal.1 31 Jul 2024 17:09:23 -0000 1.33 +++ usr.bin/cal/cal.1 26 Jun 2026 12:35:41 -0000 @@ -72,6 +72,10 @@ and are mutually exclusive. .It Fl y Display a calendar for the current year. +This option is ignored if +.Ar year +is specified and conflicts with specifying a +.Ar month . .El .Pp A single numerical parameter specifies the Index: usr.bin/cal/cal.c =================================================================== RCS file: /cvs/src/usr.bin/cal/cal.c,v diff -u -p -r1.33 cal.c --- usr.bin/cal/cal.c 26 Jun 2026 12:34:45 -0000 1.33 +++ usr.bin/cal/cal.c 26 Jun 2026 12:35:41 -0000 @@ -193,10 +193,14 @@ main(int argc, char *argv[]) month = 0; switch(argc) { case 2: + if (yflag) + errx(1, "illegal year value: use 1-9999"); month = parsemonth(*argv++); /* FALLTHROUGH */ case 1: if (argc == 1 && !isdigit((unsigned char)*argv[0])) { + if (yflag) + errx(1, "illegal year value: use 1-9999"); month = parsemonth(*argv); (void)time(&now); local_time = localtime(&now);