@@ -64,9 +64,10 @@ ptime_Z_to_gmtoff(exttm* dst, const char* str, off_t& off_inout, ssize_t len)
6464 }
6565
6666 auto zone_start = (unsigned char *) &str[off_inout];
67- uint32_t zone_int = ABR_TO_INT (zone_start[0 ] & ~0x20UL ,
68- zone_start[1 ] & ~0x20UL ,
69- zone_start[2 ] & ~0x20UL );
67+ uint32_t zone_int = ABR_TO_INT4 (zone_start[0 ] & ~0x20UL ,
68+ zone_start[1 ] & ~0x20UL ,
69+ zone_start[2 ] & ~0x20UL ,
70+ avail >= 4 ? zone_start[3 ] & ~0x20UL : 0 );
7071 switch (zone_int) {
7172 case ABR_TO_INT (' U' , ' T' , ' C' ):
7273 PTIME_CONSUME (3 , { dst->et_flags |= ETF_ZONE_SET | ETF_Z_IS_UTC ; });
@@ -89,9 +90,15 @@ ptime_Z_to_gmtoff(exttm* dst, const char* str, off_t& off_inout, ssize_t len)
8990 dst->et_gmtoff = 1 * 60 * 60 ;
9091 break ;
9192 case ABR_TO_INT (' C' , ' A' , ' T' ):
93+ case ABR_TO_INT4 (' C' , ' E' , ' D' , ' T' ):
94+ case ABR_TO_INT4 (' C' , ' E' , ' S' , ' T' ):
9295 PTIME_CONSUME (3 , { dst->et_flags |= ETF_ZONE_SET ; });
9396 dst->et_gmtoff = 2 * 60 * 60 ;
9497 break ;
98+ case ABR_TO_INT (' M' , ' S' , ' K' ):
99+ PTIME_CONSUME (3 , { dst->et_flags |= ETF_ZONE_SET ; });
100+ dst->et_gmtoff = 3 * 60 * 60 ;
101+ break ;
95102 case ABR_TO_INT (' I' , ' S' , ' T' ):
96103 PTIME_CONSUME (3 , { dst->et_flags |= ETF_ZONE_SET ; });
97104 dst->et_gmtoff = 5 * 60 * 60 + 30 * 60 ;
0 commit comments