[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.13 and 1.19

version 1.13, 2001/09/03 15:53:00 version 1.19, 2001/11/19 19:02:13
Line 53 
Line 53 
 #include <sys/types.h>  #include <sys/types.h>
 #include <sys/uio.h>  #include <sys/uio.h>
 #include <sys/wait.h>  #include <sys/wait.h>
 #include <sys/file.h>  
   
 #include <ctype.h>  #include <ctype.h>
 #include <err.h>  #include <err.h>
 #include <errno.h>  #include <errno.h>
   #include <fcntl.h>
 #include <locale.h>  #include <locale.h>
 #include <pwd.h>  #include <pwd.h>
 #include <stdio.h>  #include <stdio.h>
Line 81 
Line 81 
 };  };
   
   
 int     openf(char *path);  
   
 void  void
 cal()  cal()
 {  {
         register int printing;          int printing;
         register char *p;          char *p;
         FILE *fp;          FILE *fp;
         int ch, l, i;          int ch, l, i, bodun = 0, bodun_maybe = 0;
         int var;          int var;
         char buf[2048 + 1];          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;
   
Line 112 
Line 110 
                 if (strncmp(buf, "LANG=", 5) == 0) {                  if (strncmp(buf, "LANG=", 5) == 0) {
                         (void) setlocale(LC_ALL, buf + 5);                          (void) setlocale(LC_ALL, buf + 5);
                         setnnames();                          setnnames();
                           if (!strcmp(buf + 5, "ru_RU.KOI8-R") ||
                               !strcmp(buf + 5, "uk_UA.KOI8-U") ||
                               !strcmp(buf + 5, "by_BY.KOI8-B")) {
                                   bodun_maybe++;
                                   bodun = 0;
                                   if (prefix)
                                           free(prefix);
                                   prefix = NULL;
                           } else
                                   bodun_maybe = 0;
                         continue;                          continue;
                 }                  }
                   if (bodun_maybe && strncmp(buf, "BODUN=", 6) == 0) {
                           bodun++;
                           if (prefix)
                                   free(prefix);
                           if ((prefix = strdup(buf + 6)) == NULL)
                                   err(1, NULL);
                   }
                 /* User defined names for special events */                  /* User defined names for special events */
                 if ((p = strchr(buf, '='))) {                  if ((p = strchr(buf, '='))) {
                         for (i = 0; i < NUMEV; i++) {                          for (i = 0; i < NUMEV; i++) {
Line 132 
Line 147 
                         continue;                          continue;
                 }                  }
                 if (buf[0] != '\t') {                  if (buf[0] != '\t') {
                         printing = (m = isnow(buf)) ? 1 : 0;                          printing = (m = isnow(buf, bodun)) ? 1 : 0;
                         if ((p = strchr(buf, '\t')) == NULL) {                          if ((p = strchr(buf, '\t')) == NULL) {
                                 printing = 0;                                  printing = 0;
                                 continue;                                  continue;
Line 160 
Line 175 
                                         cur_evt->desc = ev1->desc;                                          cur_evt->desc = ev1->desc;
                                         cur_evt->ldesc = NULL;                                          cur_evt->ldesc = NULL;
                                 } else {                                  } else {
                                         if ((cur_evt->ldesc = strdup(p)) == NULL)                                          if (m->bodun && prefix) {
                                                   int l1 = strlen(prefix);
                                                   int l2 = strlen(p);
                                                   if ((cur_evt->ldesc =
                                                       malloc(l1 + l2)) == NULL)
                                                           err(1, "malloc");
                                                   sprintf(cur_evt->ldesc,
                                                       "\t%s %s", prefix, p + 1);
                                           } else if ((cur_evt->ldesc =
                                               strdup(p)) == NULL)
                                                 err(1, NULL);                                                  err(1, NULL);
                                         cur_evt->desc = &(cur_evt->ldesc);                                          cur_evt->desc = &(cur_evt->ldesc);
                                         ev1 = cur_evt;                                          ev1 = cur_evt;
Line 289 
Line 313 
         return (val);          return (val);
 }  }
   
 char path[MAXPATHLEN];  
   
 int  
 openf(path)  
         char *path;  
 {  
         struct stat st;  
         int fd;  
   
         fd = open(path, O_RDONLY|O_NONBLOCK);  
         if (fd == -1)  
                 return (-1);  
         if (fstat(fd, &st) == -1) {  
                 close(fd);  
                 return (-1);  
         }  
         if ((st.st_mode & S_IFMT) != S_IFREG) {  
                 close (fd);  
                 return (-1);  
         }  
   
         fcntl(fd, F_SETFD, fcntl(fd, F_GETFD, 0) &~ O_NONBLOCK);  
         return (fd);  
 }  
   
 FILE *  FILE *
 opencal()  opencal()
 {  {
Line 321 
Line 321 
         int fdin;          int fdin;
   
         /* open up calendar file as stdin */          /* open up calendar file as stdin */
         if ((fdin = openf(calendarFile)) == -1) {          if ((fdin = open(calendarFile, O_RDONLY)) == -1) {
                 if (!doall) {                  if (!doall) {
                         char *home = getenv("HOME");                          char *home = getenv("HOME");
                         if (home == NULL || *home == '\0')                          if (home == NULL || *home == '\0')
                                 errx(1, "cannot get home directory");                                  errx(1, "cannot get home directory");
                         if (!(chdir(home) == 0 &&                          if (!(chdir(home) == 0 &&
                             chdir(calendarHome) == 0 &&                              chdir(calendarHome) == 0 &&
                             (fdin = openf(calendarFile)) != -1))                              (fdin = open(calendarFile, O_RDONLY)) != -1))
                                 errx(1, "no calendar file: ``%s'' or ``~/%s/%s",                                  errx(1, "no calendar file: ``%s'' or ``~/%s/%s''",
                                     calendarFile, calendarHome, calendarFile);                                      calendarFile, calendarHome, calendarFile);
                 }                  }
         }          }

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