diff --git a/src/sbbs3/sbbsecho.c b/src/sbbs3/sbbsecho.c index 5fea5006bb112dce0fb797e144e5b4fcbd4ba1c5..55d7469b85a0cdfc7bb7f7fdf5bd4e36902e7f75 100644 --- a/src/sbbs3/sbbsecho.c +++ b/src/sbbs3/sbbsecho.c @@ -2140,41 +2140,38 @@ time_t fmsgtime(char *str) static short fmsgzone(char* p) { - char hr[4]; - char min[4]; - short val; - BOOL west=TRUE; + char hr[4]=""; + char min[4]=""; + short val; + BOOL west=TRUE; if(*p=='-') p++; else west=FALSE; - sprintf(hr,"%.2s",p); - sprintf(min,"%.2s",p+1); + if(strlen(p)>=2) + sprintf(hr,"%.2s",p); + if(strlen(p+2)>=2) + sprintf(min,"%.2s",p+2); val=atoi(hr)*60; val+=atoi(min); if(west) - switch(val) { - case 0x0F0: - return(AST); - case 0x12C: - return(EST); - case 0x168: - return(CST); - case 0x1A4: - return(MST); - case 0x1E0: - return(PST); - case 0x21C: - return(YST); - case 0x258: - return(HST); - case 0x294: - return(BST); + switch(val|US_ZONE) { + case AST: + case EST: + case CST: + case MST: + case PST: + case YST: + case HST: + case BST: + /* standard US timezone */ + return(val|US_ZONE); default: + /* non-standard timezone */ return(-val); } return(val);