Fossil SCM

Allow the optional "Z" zulu-time designator even on 8-character punctuationless date-time values.

drh 2024-12-26 12:03 trunk
Commit 3a3ce2fc65184cc089561ec1b6d7c07ea2d910ba4f4b07dca5c19dde9f509845
1 file changed +17 -12
+17 -12
--- src/name.c
+++ src/name.c
@@ -73,24 +73,23 @@
7373
int i, j;
7474
int addZulu = 0;
7575
7676
/* These forms are allowed:
7777
**
78
- ** (1) YYYYMMDD
79
- ** (2) YYYYMMDDHHMM
80
- ** (3) YYYYMMDDHHMMSS
78
+ ** 123456789 1234 123456789 123456789
79
+ ** (1) YYYYMMDD => YYYY-MM-DD
80
+ ** (2) YYYYMMDDHHMM => YYYY-MM-DD HH:MM
81
+ ** (3) YYYYMMDDHHMMSS => YYYY-MM-DD HH:MM:SS
8182
**
82
- ** Forms (2) and (3) may be followed by a "Z" zulu timezone designator,
83
- ** which is carried through into the output.
83
+ ** An optional "Z" zulu timezone designator is allowed at the end.
8484
*/
85
+ if( n>0 && (zIn[n-1]=='Z' || zIn[n-1]=='z') ){
86
+ n--;
87
+ addZulu = 1;
88
+ }
8589
if( n!=8 && n!=12 && n!=14 ){
86
- if( (n==13 || n==15) && (zIn[12]=='z' || zIn[12]=='Z') ){
87
- n--;
88
- addZulu = 1;
89
- }else{
90
- return 0;
91
- }
90
+ return 0;
9291
}
9392
9493
/* Every character must be a digit */
9594
for(i=0; fossil_isdigit(zIn[i]); i++){}
9695
if( i!=n && (!addZulu || i!=n+1) ) return 0;
@@ -100,11 +99,17 @@
10099
if( i>=4 && (i%2)==0 ){
101100
zEDate[j++] = aPunct[i/2];
102101
}
103102
zEDate[j++] = zIn[i];
104103
}
105
- if( addZulu ) zEDate[j++] = 'Z';
104
+ if( addZulu ){
105
+ if( j==10 ){
106
+ memcpy(&zEDate[10]," 00:00", 6);
107
+ j += 6;
108
+ }
109
+ zEDate[j++] = 'Z';
110
+ }
106111
zEDate[j] = 0;
107112
108113
/* Check for reasonable date values.
109114
** Offset references:
110115
** YYYY-MM-DD HH:MM:SS
111116
--- src/name.c
+++ src/name.c
@@ -73,24 +73,23 @@
73 int i, j;
74 int addZulu = 0;
75
76 /* These forms are allowed:
77 **
78 ** (1) YYYYMMDD
79 ** (2) YYYYMMDDHHMM
80 ** (3) YYYYMMDDHHMMSS
 
81 **
82 ** Forms (2) and (3) may be followed by a "Z" zulu timezone designator,
83 ** which is carried through into the output.
84 */
 
 
 
 
85 if( n!=8 && n!=12 && n!=14 ){
86 if( (n==13 || n==15) && (zIn[12]=='z' || zIn[12]=='Z') ){
87 n--;
88 addZulu = 1;
89 }else{
90 return 0;
91 }
92 }
93
94 /* Every character must be a digit */
95 for(i=0; fossil_isdigit(zIn[i]); i++){}
96 if( i!=n && (!addZulu || i!=n+1) ) return 0;
@@ -100,11 +99,17 @@
100 if( i>=4 && (i%2)==0 ){
101 zEDate[j++] = aPunct[i/2];
102 }
103 zEDate[j++] = zIn[i];
104 }
105 if( addZulu ) zEDate[j++] = 'Z';
 
 
 
 
 
 
106 zEDate[j] = 0;
107
108 /* Check for reasonable date values.
109 ** Offset references:
110 ** YYYY-MM-DD HH:MM:SS
111
--- src/name.c
+++ src/name.c
@@ -73,24 +73,23 @@
73 int i, j;
74 int addZulu = 0;
75
76 /* These forms are allowed:
77 **
78 ** 123456789 1234 123456789 123456789
79 ** (1) YYYYMMDD => YYYY-MM-DD
80 ** (2) YYYYMMDDHHMM => YYYY-MM-DD HH:MM
81 ** (3) YYYYMMDDHHMMSS => YYYY-MM-DD HH:MM:SS
82 **
83 ** An optional "Z" zulu timezone designator is allowed at the end.
 
84 */
85 if( n>0 && (zIn[n-1]=='Z' || zIn[n-1]=='z') ){
86 n--;
87 addZulu = 1;
88 }
89 if( n!=8 && n!=12 && n!=14 ){
90 return 0;
 
 
 
 
 
91 }
92
93 /* Every character must be a digit */
94 for(i=0; fossil_isdigit(zIn[i]); i++){}
95 if( i!=n && (!addZulu || i!=n+1) ) return 0;
@@ -100,11 +99,17 @@
99 if( i>=4 && (i%2)==0 ){
100 zEDate[j++] = aPunct[i/2];
101 }
102 zEDate[j++] = zIn[i];
103 }
104 if( addZulu ){
105 if( j==10 ){
106 memcpy(&zEDate[10]," 00:00", 6);
107 j += 6;
108 }
109 zEDate[j++] = 'Z';
110 }
111 zEDate[j] = 0;
112
113 /* Check for reasonable date values.
114 ** Offset references:
115 ** YYYY-MM-DD HH:MM:SS
116

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button