[BACK]Return to io.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / calendar

Diff for /src/usr.bin/calendar/io.c between version 1.19 and 1.30

version 1.19, 2001/11/19 19:02:13 version 1.30, 2005/11/14 15:56:35
Line 12 
Line 12 
  * 2. Redistributions in binary form must reproduce the above copyright   * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the   *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.   *    documentation and/or other materials provided with the distribution.
  * 3. All advertising materials mentioning features or use of this software   * 3. Neither the name of the University nor the names of its contributors
  *    must display the following acknowledgement:  
  *      This product includes software developed by the University of  
  *      California, Berkeley and its contributors.  
  * 4. Neither the name of the University nor the names of its contributors  
  *    may be used to endorse or promote products derived from this software   *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.   *    without specific prior written permission.
  *   *
Line 43 
Line 39 
 #if 0  #if 0
 static const char sccsid[] = "@(#)calendar.c  8.3 (Berkeley) 3/25/94";  static const char sccsid[] = "@(#)calendar.c  8.3 (Berkeley) 3/25/94";
 #else  #else
 static char rcsid[] = "$OpenBSD$";  static const char rcsid[] = "$OpenBSD$";
 #endif  #endif
 #endif /* not lint */  #endif /* not lint */
   
Line 82 
Line 78 
   
   
 void  void
 cal()  cal(void)
 {  {
         int printing;          int printing;
         char *p;          char *p;
Line 92 
Line 88 
         char buf[2048 + 1], *prefix = NULL;          char buf[2048 + 1], *prefix = NULL;
         struct event *events, *cur_evt, *ev1, *tmp;          struct event *events, *cur_evt, *ev1, *tmp;
         struct match *m;          struct match *m;
           size_t nlen;
   
         events = NULL;          events = NULL;
         cur_evt = NULL;          cur_evt = NULL;
Line 121 
Line 118 
                         } else                          } else
                                 bodun_maybe = 0;                                  bodun_maybe = 0;
                         continue;                          continue;
                 }                  } else if (strncmp(buf, "CALENDAR=", 9) == 0) {
                 if (bodun_maybe && strncmp(buf, "BODUN=", 6) == 0) {                          char *ep;
   
                           if (buf[9] == '\0')
                                   calendar = 0;
                           else if (!strcasecmp(buf + 9, "julian")) {
                                   calendar = JULIAN;
                                   errno = 0;
                                   julian = strtoul(buf + 14, &ep, 10);
                                   if (buf[0] == '\0' || *ep != '\0')
                                           julian = 13;
                                   if ((errno == ERANGE && julian == ULONG_MAX) ||
                                       julian > 14)
                                           errx(1, "Julian calendar offset is too large");
                           } else if (!strcasecmp(buf + 9, "gregorian"))
                                   calendar = GREGORIAN;
                           else if (!strcasecmp(buf + 9, "lunar"))
                                   calendar = LUNAR;
                   } else if (bodun_maybe && strncmp(buf, "BODUN=", 6) == 0) {
                         bodun++;                          bodun++;
                         if (prefix)                          if (prefix)
                                 free(prefix);                                  free(prefix);
                         if ((prefix = strdup(buf + 6)) == NULL)                          if ((prefix = strdup(buf + 6)) == NULL)
                                 err(1, NULL);                                  err(1, NULL);
                           continue;
                 }                  }
                 /* User defined names for special events */                  /* User defined names for special events */
                 if ((p = strchr(buf, '='))) {                  if ((p = strchr(buf, '='))) {
Line 176 
Line 191 
                                         cur_evt->ldesc = NULL;                                          cur_evt->ldesc = NULL;
                                 } else {                                  } else {
                                         if (m->bodun && prefix) {                                          if (m->bodun && prefix) {
                                                 int l1 = strlen(prefix);                                                  if (asprintf(&cur_evt->ldesc,
                                                 int l2 = strlen(p);                                                      "\t%s %s", prefix, p + 1) == -1)
                                                 if ((cur_evt->ldesc =                                                          err(1, NULL);
                                                     malloc(l1 + l2)) == NULL)  
                                                         err(1, "malloc");  
                                                 sprintf(cur_evt->ldesc,  
                                                     "\t%s %s", prefix, p + 1);  
                                         } else if ((cur_evt->ldesc =                                          } else if ((cur_evt->ldesc =
                                             strdup(p)) == NULL)                                              strdup(p)) == NULL)
                                                 err(1, NULL);                                                  err(1, NULL);
Line 195 
Line 206 
                                 free(foo);                                  free(foo);
                                 }                                  }
                         }                          }
                 }                  } else if (printing) {
                 else if (printing) {                          free(ev1->ldesc);
                         if ((ev1->ldesc = realloc(ev1->ldesc,                          if (asprintf(&ev1->ldesc, "%s\n%s", ev1->ldesc,
                             (2 + strlen(ev1->ldesc) + strlen(buf)))) == NULL)                              buf) == -1)
                                 err(1, NULL);                                  err(1, NULL);
                         strcat(ev1->ldesc, "\n");  
                         strcat(ev1->ldesc, buf);  
                 }                  }
         }          }
         tmp = events;          tmp = events;
Line 315 
Line 325 
   
   
 FILE *  FILE *
 opencal()  opencal(void)
 {  {
         int pdes[2];          int pdes[2], fdin;
         int fdin;          struct stat st;
   
         /* open up calendar file as stdin */          /* open up calendar file as stdin */
         if ((fdin = open(calendarFile, O_RDONLY)) == -1) {          if ((fdin = open(calendarFile, O_RDONLY)) == -1 ||
               fstat(fdin, &st) == -1 || !S_ISREG(st.st_mode)) {
                 if (!doall) {                  if (!doall) {
                         char *home = getenv("HOME");                          char *home = getenv("HOME");
                         if (home == NULL || *home == '\0')                          if (home == NULL || *home == '\0')
Line 333 
Line 344 
                                     calendarFile, calendarHome, calendarFile);                                      calendarFile, calendarHome, calendarFile);
                 }                  }
         }          }
   
         if (pipe(pdes) < 0)          if (pipe(pdes) < 0)
                 return (NULL);                  return (NULL);
         switch (vfork()) {          switch (vfork()) {
Line 348 
Line 360 
                         (void)close(pdes[1]);                          (void)close(pdes[1]);
                 }                  }
                 (void)close(pdes[0]);                  (void)close(pdes[0]);
                 /* Set stderr to /dev/null.  Necessary so that cron does not                  /*
                    * Set stderr to /dev/null.  Necessary so that cron does not
                  * wait for cpp to finish if it's running calendar -a.                   * wait for cpp to finish if it's running calendar -a.
                  */                   */
                 if (doall) {                  if (doall) {
Line 359 
Line 372 
                         (void)dup2(fderr, STDERR_FILENO);                          (void)dup2(fderr, STDERR_FILENO);
                         (void)close(fderr);                          (void)close(fderr);
                 }                  }
                 execl(_PATH_CPP, "cpp", "-P", "-I.", _PATH_INCLUDE, (char *)NULL);                  execl(_PATH_CPP, "cpp", "-traditional", "-undef", "-U__GNUC__",
                       "-P", "-I.", _PATH_INCLUDE, (char *)NULL);
                 warn(_PATH_CPP);                  warn(_PATH_CPP);
                 _exit(1);                  _exit(1);
         }          }

Legend:
Removed from v.1.19  
changed lines
  Added in v.1.30