ignoring non-normalized values
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@927 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/skeletons/GeneralizedTime.c b/skeletons/GeneralizedTime.c
index 45a082b..e9aa478 100644
--- a/skeletons/GeneralizedTime.c
+++ b/skeletons/GeneralizedTime.c
@@ -559,18 +559,23 @@
/*
* Deal with fractions.
*/
- if(frac_base >= 10 && frac_value > 0) {
+ if(frac_base >= 10
+ && frac_value > 0
+ /* 1001 ms? should ignore or adjust seconds */
+ && (frac_value/frac_base) == 0
+ ) {
char *end = p + 1 + 6; /* '.' + maximum 6 digits */
- char *z;
- *p++ = '.';
+ char *z = p;
+ *z++ = '.';
+ frac_value %= frac_base;
do {
int digit;
frac_base /= 10;
digit = frac_value / frac_base;
frac_value %= frac_base;
- *p++ = digit + 0x30;
- } while(frac_base >= 10 && frac_value > 0 && p < end);
- for(z = p - 1; *z == 0x30; --z); /* Strip zeroes */
+ *z++ = digit + 0x30;
+ } while(frac_base >= 10 && frac_value > 0 && z < end);
+ for(--z; *z == 0x30; --z); /* Strip zeroes */
p = z + (*z != '.');
size = p - buf;
}