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

Diff for /src/usr.bin/cvs/Attic/rcstime.c between version 1.2 and 1.3

version 1.2, 2006/03/09 16:53:56 version 1.3, 2006/04/13 19:16:15
Line 29 
Line 29 
 #include "log.h"  #include "log.h"
 #include "rcs.h"  #include "rcs.h"
   
   void
 struct tm *  rcs_set_tz(char *tz, struct rcs_delta *rdp, struct tm *tb)
 rcs_set_tz(char *tz, struct rcs_delta *rdp)  
 {  {
         int tzone;          int tzone;
           int neg, pos;
         char *h, *m;          char *h, *m;
         struct tm *tb, ltb;          struct tm *ltb;
         time_t now;          time_t now;
   
         tb = &rdp->rd_date;  
   
         if (!strcmp(tz, "LT")) {          if (!strcmp(tz, "LT")) {
                 now = mktime(&rdp->rd_date);                  now = mktime(&rdp->rd_date);
                 tb = localtime(&now);                  ltb = localtime(&now);
                 tb->tm_hour += ((int)tb->tm_gmtoff/3600);                  ltb->tm_hour += ((int)ltb->tm_gmtoff/3600);
                   memcpy(tb, ltb, sizeof(struct tm));
         } else {          } else {
                   neg = pos = 0;
                 switch (*tz) {                  switch (*tz) {
                 case '-':                  case '-':
                 case '+':                          neg = 1;
                         break;                          break;
                   case '+':
                           pos = 1;
                           break;
                 default:                  default:
                         fatal("%s: not a known time zone", tz);                          fatal("%s: not a known time zone", tz);
                 }                  }
   
                 h = tz;                  h = (tz + 1);
                 if ((m = strrchr(tz, ':')) != NULL)                  if ((m = strrchr(tz, ':')) != NULL)
                         *(m++) = '\0';                          *(m++) = '\0';
   
                 ltb = rdp->rd_date;                  memcpy(tb, &rdp->rd_date, sizeof(struct tm));
                 tb = &ltb;  
   
                 tzone = atoi(h);                  tzone = atoi(h);
                 if ((tzone >= 24) && (tzone <= -24))                  if ((tzone >= 24) && (tzone <= -24))
                         fatal("%s: not a known time zone", tz);                          fatal("%s: not a known time zone", tz);
   
                 tb->tm_hour += tzone;                  if (pos) {
                 if ((tb->tm_hour >= 24) && (tb->tm_hour <= -24))                          tb->tm_hour += tzone;
                           tb->tm_gmtoff += (tzone * 3600);
                   } else {
                           tb->tm_hour -= tzone;
                           tb->tm_gmtoff -= (tzone * 3600);
                   }
   
                   if ((tb->tm_hour >= 24) || (tb->tm_hour <= -24))
                         tb->tm_hour = 0;                          tb->tm_hour = 0;
   
                 tb->tm_gmtoff += (tzone*3600);  
   
                 if (m != NULL) {                  if (m != NULL) {
                         tzone = atoi(m);                          tzone = atoi(m);
                         if (tzone >= 60)                          if (tzone >= 60)
Line 77 
Line 84 
   
                         if ((tb->tm_min + tzone) >= 60) {                          if ((tb->tm_min + tzone) >= 60) {
                                 tb->tm_hour++;                                  tb->tm_hour++;
                                 tb->tm_min -= tzone;                                  tb->tm_min -= (60 - tzone);
                         } else                          } else
                                 tb->tm_min += tzone;                                  tb->tm_min += tzone;
   
                         tb->tm_gmtoff += (tzone*60);                          tb->tm_gmtoff += (tzone*60);
                 }                  }
         }          }
   
         return (tb);  
 }  }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3