* mdocml: In a2roffsu(), do not parse the number twice.
@ 2014-12-23 3:28 schwarze
0 siblings, 0 replies; only message in thread
From: schwarze @ 2014-12-23 3:28 UTC (permalink / raw)
To: source
Log Message:
-----------
In a2roffsu(), do not parse the number twice.
Gets rid of 25 lines of code and one static buffer.
No functional change for numbers shorter than BUFSIZ characters.
Modified Files:
--------------
mdocml:
out.c
Revision Data
-------------
Index: out.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/out.c,v
retrieving revision 1.54
retrieving revision 1.55
diff -Lout.c -Lout.c -u -p -r1.54 -r1.55
--- out.c
+++ out.c
@@ -20,8 +20,6 @@
#include <sys/types.h>
#include <assert.h>
-#include <ctype.h>
-#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
@@ -39,53 +37,23 @@ static void tblcalc_number(struct rofftb
/*
- * Convert a `scaling unit' to a consistent form, or fail. Scaling
- * units are documented in groff.7, mdoc.7, man.7.
+ * Parse the *src string and store a scaling unit into *dst.
+ * If the string doesn't specify the unit, use the default.
+ * If no default is specified, fail.
+ * Return 1 on success and 0 on failure.
*/
int
a2roffsu(const char *src, struct roffsu *dst, enum roffscale def)
{
- char buf[BUFSIZ], hasd;
- int i;
+ char *endptr;
+ double scale;
enum roffscale unit;
- if ('\0' == *src)
+ scale = strtod(src, &endptr);
+ if (endptr == src || (endptr[0] != '\0' && endptr[1] != '\0'))
return(0);
- i = hasd = 0;
-
- switch (*src) {
- case '+':
- src++;
- break;
- case '-':
- buf[i++] = *src++;
- break;
- default:
- break;
- }
-
- if ('\0' == *src)
- return(0);
-
- while (i < BUFSIZ) {
- if ( ! isdigit((unsigned char)*src)) {
- if ('.' != *src)
- break;
- else if (hasd)
- break;
- else
- hasd = 1;
- }
- buf[i++] = *src++;
- }
-
- if (BUFSIZ == i || (*src && *(src + 1)))
- return(0);
-
- buf[i] = '\0';
-
- switch (*src) {
+ switch (*endptr) {
case 'c':
unit = SCALE_CM;
break;
@@ -126,8 +94,9 @@ a2roffsu(const char *src, struct roffsu
}
/* FIXME: do this in the caller. */
- if ((dst->scale = atof(buf)) < 0.0)
- dst->scale = 0.0;
+ if (scale < 0.0)
+ scale = 0.0;
+ dst->scale = scale;
dst->unit = unit;
return(1);
}
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2014-12-23 3:28 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-23 3:28 mdocml: In a2roffsu(), do not parse the number twice schwarze
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).