Skip to content

Commit

Permalink
add some additional files
Browse files Browse the repository at this point in the history
  • Loading branch information
cooljeanius committed Jun 29, 2024
1 parent 0beb756 commit a98a88a
Show file tree
Hide file tree
Showing 14 changed files with 1,052 additions and 39 deletions.
30 changes: 15 additions & 15 deletions Makefile.in

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 5 additions & 6 deletions TODO
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
TODO list:
- add implementations for the following functions:
* catopen
* catgets
* catclose
* ecvt
* fcvt
- add files implementing the following functions:
* catopen (currently in msgcat.c; split out to a separate file)
* catgets (currently in msgcat.c; split out to a separate file)
* catclose (currently in msgcat.c; split out to a separate file)
* fcvt (currently in ecvt.c; split out to a separate file)
* setmntent
* addmntent
* endmntent
Expand Down
6 changes: 6 additions & 0 deletions config.h.in

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

60 changes: 48 additions & 12 deletions configure

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 4 additions & 5 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -432,21 +432,20 @@ AC_CHECK_FUNCS_IF_NOT_CACHED([CFLocaleCopyCurrent \
## source files to replace them yet:
dnl# (move from "_CHECK" to "_REPLACE" once we do have source files)
unset ac_cv_func_catgets
AC_CHECK_FUNCS([catopen catgets catclose ecvt fcvt gcvt \
setmntent addmntent endmntent \
hasmntopt sbrk shmget swapon swapoff])
AC_CHECK_FUNCS([catopen catgets catclose fcvt setmntent addmntent \
endmntent hasmntopt sbrk shmget swapon swapoff])
## functions that we might want replacements for, and have source files for:
unset ac_cv_func_btowc
unset ac_cv_func_wctob
unset ac_cv_func_getmntent
unset ac_cv_func_poll
AC_REPLACE_FUNCS([btowc wctob dysize fclose fcloseall getmntent poll \
cuserid brk crypt fpending])dnl
cuserid brk crypt fpending msgcat ecvt gcvt])dnl
## keep autoscan happy:
if test "x" = "Y0"; then
test -x "`which autoscan`" || echo "no autoscan!" >&2
AC_CHECK_FUNCS([__fpending btowc dup2 fchdir ftruncate getcwd getdelim \
getpagesize memchr mempcpy pathconf setenv strndup])dnl
getpagesize memchr mempcpy pathconf setenv stpcpy strndup])dnl
## should never actually get here though...
fi

Expand Down
2 changes: 1 addition & 1 deletion configure.scan
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ AC_FUNC_MKTIME
AC_FUNC_REALLOC
AC_FUNC_STRERROR_R
AC_FUNC_STRNLEN
AC_CHECK_FUNCS([__fpending atexit btowc dup2 fchdir fs_stat_dev ftruncate getcwd getdelim getmntent getmntinfo getpagesize iswprint listmntent localeconv mblen mbrlen memchr memmove mempcpy memset next_dev nl_langinfo pathconf select setenv setlocale strcasecmp strchr strdup strerror strncasecmp strndup strrchr strspn strstr strtoul wcwidth])
AC_CHECK_FUNCS([__fpending atexit btowc dup2 fchdir fs_stat_dev ftruncate getcwd getdelim getmntent getmntinfo getpagesize iswprint listmntent localeconv mblen mbrlen memchr memmove mempcpy memset next_dev nl_langinfo pathconf select setenv setlocale stpcpy strcasecmp strchr strdup strerror strncasecmp strndup strrchr strspn strstr strtoul wcwidth])

AC_CONFIG_FILES([Makefile
autoscan/Makefile
Expand Down
108 changes: 108 additions & 0 deletions ecvt.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
/* $OpenBSD: ecvt.c,v 1.7 2009/10/16 12:15:03 martynas Exp $ */

/*
* Copyright (c) 2002, 2006 Todd C. Miller <[email protected]>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* Sponsored in part by the Defense Advanced Research Projects
* Agency (DARPA) and Air Force Research Laboratory, Air Force
* Materiel Command, USAF, under agreement number F39502-99-1-0512.
*/

#include <sys/cdefs.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

extern char *__dtoa(double, int, int, int *, int *, char **);
extern void __freedtoa(char *);
static char *__cvt(double, int, int *, int *, int, int);

static char *
__cvt(double value, int ndigit, int * __restrict decpt, int * __restrict sign, int fmode, int pad)
{
static char *s;
char *p, *rve, c;
size_t siz;

if (ndigit == 0) {
*sign = value < 0.0;
*decpt = 0;
return (char *)("");
}

if (s) {
free(s);
s = NULL;
}

if (ndigit < 0)
siz = -ndigit + 1;
else
siz = ndigit + 1;


/* __dtoa() doesn't allocate space for 0 so we do it by hand */
if (value == 0.0) {
*decpt = 1 - fmode; /* 1 for 'e', 0 for 'f' */
*sign = 0;
if ((rve = s = (char *)malloc(siz)) == NULL)
return(NULL);
*rve++ = '0';
*rve = '\0';
} else {
p = __dtoa(value, fmode + 2, ndigit, decpt, sign, &rve);
if (p == NULL)
return (NULL);
if (*decpt == 9999) {
/* Infinity or Nan, convert to inf or nan like printf */
*decpt = 0;
c = *p;
__freedtoa(p);
return (char *)((c == 'I') ? "inf" : "nan");
}
/* Make a local copy and adjust rve to be in terms of s */
if (pad && fmode)
siz += *decpt;
if ((s = (char *)malloc(siz)) == NULL) {
__freedtoa(p);
return(NULL);
}
(void) strlcpy(s, p, siz);
rve = s + (rve - p);
__freedtoa(p);
}

/* Add trailing zeros */
if (pad) {
siz -= rve - s;
while (--siz)
*rve++ = '0';
*rve = '\0';
}

return(s);
}

char *
ecvt(double value, int ndigit, int * __restrict decpt, int * __restrict sign)
{
return(__cvt(value, ndigit, decpt, sign, 0, 1));
}

char *
fcvt(double value, int ndigit, int * __restrict decpt, int * __restrict sign)
{
return(__cvt(value, ndigit, decpt, sign, 1, 1));
}
Loading

0 comments on commit a98a88a

Please sign in to comment.