add agetline, separate estrtod to util
Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>
This commit is contained in:
parent
daad071b31
commit
d12e953f18
2
Makefile
2
Makefile
@ -7,12 +7,14 @@ HDR = crypt.h fs.h text.h md5.h sha1.h sha256.h sha512.h util.h arg.h
|
|||||||
LIB = \
|
LIB = \
|
||||||
util/afgets.o \
|
util/afgets.o \
|
||||||
util/agetcwd.o \
|
util/agetcwd.o \
|
||||||
|
util/agetline.o \
|
||||||
util/apathmax.o \
|
util/apathmax.o \
|
||||||
util/concat.o \
|
util/concat.o \
|
||||||
util/cp.o \
|
util/cp.o \
|
||||||
util/crypt.o \
|
util/crypt.o \
|
||||||
util/enmasse.o \
|
util/enmasse.o \
|
||||||
util/eprintf.o \
|
util/eprintf.o \
|
||||||
|
util/estrtod.o \
|
||||||
util/estrtol.o \
|
util/estrtol.o \
|
||||||
util/fnck.o \
|
util/fnck.o \
|
||||||
util/getlines.o \
|
util/getlines.o \
|
||||||
|
26
seq.c
26
seq.c
@ -8,7 +8,6 @@
|
|||||||
|
|
||||||
static int digitsleft(const char *);
|
static int digitsleft(const char *);
|
||||||
static int digitsright(const char *);
|
static int digitsright(const char *);
|
||||||
static double estrtod(const char *);
|
|
||||||
static bool validfmt(const char *);
|
static bool validfmt(const char *);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -75,7 +74,7 @@ main(int argc, char *argv[])
|
|||||||
left = MAX(digitsleft(starts), digitsleft(ends));
|
left = MAX(digitsleft(starts), digitsleft(ends));
|
||||||
|
|
||||||
snprintf(ftmp, sizeof ftmp, "%%0%d.%df",
|
snprintf(ftmp, sizeof ftmp, "%%0%d.%df",
|
||||||
right+left+(right != 0), right);
|
right + left + (right != 0), right);
|
||||||
} else
|
} else
|
||||||
snprintf(ftmp, sizeof ftmp, "%%.%df", right);
|
snprintf(ftmp, sizeof ftmp, "%%.%df", right);
|
||||||
}
|
}
|
||||||
@ -89,7 +88,7 @@ main(int argc, char *argv[])
|
|||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
digitsleft(const char *d)
|
digitsleft(const char *d)
|
||||||
{
|
{
|
||||||
char *exp;
|
char *exp;
|
||||||
@ -100,10 +99,10 @@ digitsleft(const char *d)
|
|||||||
exp = strpbrk(d, "eE");
|
exp = strpbrk(d, "eE");
|
||||||
shift = exp ? estrtol(&exp[1], 10) : 0;
|
shift = exp ? estrtol(&exp[1], 10) : 0;
|
||||||
|
|
||||||
return MAX(0, strspn(d, "-0123456789")+shift);
|
return MAX(0, strspn(d, "-0123456789") + shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
digitsright(const char *d)
|
digitsright(const char *d)
|
||||||
{
|
{
|
||||||
char *exp;
|
char *exp;
|
||||||
@ -113,22 +112,10 @@ digitsright(const char *d)
|
|||||||
shift = exp ? estrtol(&exp[1], 10) : 0;
|
shift = exp ? estrtol(&exp[1], 10) : 0;
|
||||||
after = (d = strchr(d, '.')) ? strspn(&d[1], "0123456789") : 0;
|
after = (d = strchr(d, '.')) ? strspn(&d[1], "0123456789") : 0;
|
||||||
|
|
||||||
return MAX(0, after-shift);
|
return MAX(0, after - shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
double
|
static bool
|
||||||
estrtod(const char *s)
|
|
||||||
{
|
|
||||||
char *end;
|
|
||||||
double d;
|
|
||||||
|
|
||||||
d = strtod(s, &end);
|
|
||||||
if(end == s || *end != '\0')
|
|
||||||
eprintf("%s: not a real number\n", s);
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
validfmt(const char *fmt)
|
validfmt(const char *fmt)
|
||||||
{
|
{
|
||||||
int occur = 0;
|
int occur = 0;
|
||||||
@ -164,4 +151,3 @@ format:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
text.h
1
text.h
@ -9,4 +9,5 @@ struct linebuf {
|
|||||||
void getlines(FILE *, struct linebuf *);
|
void getlines(FILE *, struct linebuf *);
|
||||||
|
|
||||||
char *afgets(char **, size_t *, FILE *);
|
char *afgets(char **, size_t *, FILE *);
|
||||||
|
ssize_t agetline(char **, size_t *, FILE *);
|
||||||
void concat(FILE *, const char *, FILE *, const char *);
|
void concat(FILE *, const char *, FILE *, const char *);
|
||||||
|
1
util.h
1
util.h
@ -17,6 +17,7 @@ void apathmax(char **, long *);
|
|||||||
void enmasse(int, char **, int (*)(const char *, const char *));
|
void enmasse(int, char **, int (*)(const char *, const char *));
|
||||||
void eprintf(const char *, ...);
|
void eprintf(const char *, ...);
|
||||||
void enprintf(int, const char *, ...);
|
void enprintf(int, const char *, ...);
|
||||||
|
double estrtod(const char *);
|
||||||
long estrtol(const char *, int);
|
long estrtol(const char *, int);
|
||||||
void fnck(const char *, const char *, int (*)(const char *, const char *));
|
void fnck(const char *, const char *, int (*)(const char *, const char *));
|
||||||
void putword(const char *);
|
void putword(const char *);
|
||||||
|
13
util/agetline.c
Normal file
13
util/agetline.c
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "../text.h"
|
||||||
|
#include "../util.h"
|
||||||
|
|
||||||
|
ssize_t
|
||||||
|
agetline(char **p, size_t *size, FILE *fp)
|
||||||
|
{
|
||||||
|
return getline(p, size, fp);
|
||||||
|
}
|
18
util/estrtod.c
Normal file
18
util/estrtod.c
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "../util.h"
|
||||||
|
|
||||||
|
double
|
||||||
|
estrtod(const char *s)
|
||||||
|
{
|
||||||
|
char *end;
|
||||||
|
double d;
|
||||||
|
|
||||||
|
d = strtod(s, &end);
|
||||||
|
if(end == s || *end != '\0')
|
||||||
|
eprintf("%s: not a real number\n", s);
|
||||||
|
return d;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user