public inbox for newlib@sourceware.org
 help / color / mirror / Atom feed
* Importing inttypes methods from FreeBSD
@ 2017-07-11  3:29 Aditya Upadhyay
  2017-07-11  9:06 ` Corinna Vinschen
  0 siblings, 1 reply; 18+ messages in thread
From: Aditya Upadhyay @ 2017-07-11  3:29 UTC (permalink / raw)
  To: newlib

[-- Attachment #1: Type: text/plain, Size: 175 bytes --]

Hello Developers,

I have ported these inttypes methods from FreeBSD. I am requesting you
to please review the same and suggest me changes.

Thanks & Regards,
Aditya Upadhyay

[-- Attachment #2: 0001-Importing-of-imaxabs-inttypes-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 2444 bytes --]

From 95aa10d9582de3116251704e3adbffaebf7501c4 Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Mon, 10 Jul 2017 18:40:10 +0530
Subject: [PATCH 1/4] Importing of imaxabs inttypes method from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am |  1 +
 newlib/libc/stdlib/imaxabs.c   | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+)
 create mode 100644 newlib/libc/stdlib/imaxabs.c

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index ebae00a..bf44953 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -33,6 +33,7 @@ GENERAL_SOURCES = \
 	getenv.c  	\
 	getenv_r.c	\
 	itoa.c          \
+        imaxabs.c       \
 	labs.c 		\
 	ldiv.c  	\
 	ldtoa.c		\
diff --git a/newlib/libc/stdlib/imaxabs.c b/newlib/libc/stdlib/imaxabs.c
new file mode 100644
index 0000000..301b923
--- /dev/null
+++ b/newlib/libc/stdlib/imaxabs.c
@@ -0,0 +1,33 @@
+/*-
+ * Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <inttypes.h>
+
+intmax_t
+imaxabs(intmax_t j)
+{
+	return (j < 0 ? -j : j);
+}
-- 
2.7.4


[-- Attachment #3: 0002-Importing-imaxdiv-inttypes-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 2771 bytes --]

From 1d7f20dcf57959fff9ccbee7ce71906ae16452bb Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Mon, 10 Jul 2017 18:41:38 +0530
Subject: [PATCH 2/4] Importing imaxdiv inttypes method from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am |  1 +
 newlib/libc/stdlib/imaxdiv.c   | 44 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+)
 create mode 100644 newlib/libc/stdlib/imaxdiv.c

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index bf44953..5a50c3a 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -34,6 +34,7 @@ GENERAL_SOURCES = \
 	getenv_r.c	\
 	itoa.c          \
         imaxabs.c       \
+        imaxdiv.c       \
 	labs.c 		\
 	ldiv.c  	\
 	ldtoa.c		\
diff --git a/newlib/libc/stdlib/imaxdiv.c b/newlib/libc/stdlib/imaxdiv.c
new file mode 100644
index 0000000..61f03fd
--- /dev/null
+++ b/newlib/libc/stdlib/imaxdiv.c
@@ -0,0 +1,44 @@
+/*-
+ * Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <inttypes.h>
+
+/* See comments in div.c for implementation details. */
+imaxdiv_t
+imaxdiv(intmax_t numer, intmax_t denom)
+{
+	imaxdiv_t retval;
+
+	retval.quot = numer / denom;
+	retval.rem = numer % denom;
+#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)
+	if (numer >= 0 && retval.rem < 0) {
+		retval.quot++;
+		retval.rem -= denom;
+	}
+#endif
+	return (retval);
+}
-- 
2.7.4


[-- Attachment #4: 0003-adding-xlocale_private.h-for-inttypes-methods-from-F.patch --]
[-- Type: text/x-patch, Size: 8744 bytes --]

From 2e1524dfac8b8f33373695a65c8e7b7be529fd66 Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Mon, 10 Jul 2017 21:47:34 +0530
Subject: [PATCH 3/4] adding xlocale_private.h for inttypes methods from
 FreeBSD.

---
 newlib/libc/locale/xlocale_private.h | 231 +++++++++++++++++++++++++++++++++++
 1 file changed, 231 insertions(+)
 create mode 100644 newlib/libc/locale/xlocale_private.h

diff --git a/newlib/libc/locale/xlocale_private.h b/newlib/libc/locale/xlocale_private.h
new file mode 100644
index 0000000..77b9ff4
--- /dev/null
+++ b/newlib/libc/locale/xlocale_private.h
@@ -0,0 +1,231 @@
+/*-
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by David Chisnall under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _XLOCALE_PRIVATE__H_
+#define _XLOCALE_PRIVATE__H_
+
+#include <xlocale.h>
+#include <locale.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <machine/atomic.h>
+#include "setlocale.h"
+
+enum {
+	XLC_COLLATE = 0,
+	XLC_CTYPE,
+	XLC_MONETARY,
+	XLC_NUMERIC,
+	XLC_TIME,
+	XLC_MESSAGES,
+	XLC_LAST
+};
+
+
+/**
+ * Header used for objects that are reference counted.  Objects may optionally
+ * have a destructor associated, which is responsible for destroying the
+ * structure.  Global / static versions of the structure should have no
+ * destructor set - they can then have their reference counts manipulated as
+ * normal, but will not do anything with them.
+ *
+ * The header stores a retain count - objects are assumed to have a reference
+ * count of 1 when they are created, but the retain count is 0.  When the
+ * retain count is less than 0, they are freed.
+ */
+struct xlocale_refcounted {
+	/** Number of references to this component.  */
+	long retain_count;
+	/** Function used to destroy this component, if one is required*/
+	void(*destructor)(void*);
+};
+/**
+ * Header for a locale component.  All locale components must begin with this
+ * header.
+ */
+struct xlocale_component {
+	struct xlocale_refcounted header;
+	/** Name of the locale used for this component. */
+	char locale[ENCODING_LEN+1];
+};
+
+/**
+ * xlocale structure, stores per-thread locale information.  
+ */
+struct _xlocale {
+	struct xlocale_refcounted header;
+	/** Components for the locale.  */
+	struct xlocale_component *components[XLC_LAST];
+	/** Flag indicating if components[XLC_MONETARY] has changed since the
+	 * last call to localeconv_l() with this locale. */
+	int monetary_locale_changed;
+	/** Flag indicating whether this locale is actually using a locale for
+	 * LC_MONETARY (1), or if it should use the C default instead (0). */
+	int using_monetary_locale;
+	/** Flag indicating if components[XLC_NUMERIC] has changed since the
+	 * last call to localeconv_l() with this locale. */
+	int numeric_locale_changed;
+	/** Flag indicating whether this locale is actually using a locale for
+	 * LC_NUMERIC (1), or if it should use the C default instead (0). */
+	int using_numeric_locale;
+	/** Flag indicating whether this locale is actually using a locale for
+	 * LC_TIME (1), or if it should use the C default instead (0). */
+	int using_time_locale;
+	/** Flag indicating whether this locale is actually using a locale for
+	 * LC_MESSAGES (1), or if it should use the C default instead (0). */
+	int using_messages_locale;
+	/** The structure to be returned from localeconv_l() for this locale. */
+	struct lconv lconv;
+	/** Persistent state used by mblen() calls. */
+	__mbstate_t mblen;
+	/** Persistent state used by mbrlen() calls. */
+	__mbstate_t mbrlen;
+	/** Persistent state used by mbrtoc16() calls. */
+	__mbstate_t mbrtoc16;
+	/** Persistent state used by mbrtoc32() calls. */
+	__mbstate_t mbrtoc32;
+	/** Persistent state used by mbrtowc() calls. */
+	__mbstate_t mbrtowc;
+	/** Persistent state used by mbsnrtowcs() calls. */
+	__mbstate_t mbsnrtowcs;
+	/** Persistent state used by mbsrtowcs() calls. */
+	__mbstate_t mbsrtowcs;
+	/** Persistent state used by mbtowc() calls. */
+	__mbstate_t mbtowc;
+	/** Persistent state used by c16rtomb() calls. */
+	__mbstate_t c16rtomb;
+	/** Persistent state used by c32rtomb() calls. */
+	__mbstate_t c32rtomb;
+	/** Persistent state used by wcrtomb() calls. */
+	__mbstate_t wcrtomb;
+	/** Persistent state used by wcsnrtombs() calls. */
+	__mbstate_t wcsnrtombs;
+	/** Persistent state used by wcsrtombs() calls. */
+	__mbstate_t wcsrtombs;
+	/** Persistent state used by wctomb() calls. */
+	__mbstate_t wctomb;
+	/** Buffer used by nl_langinfo_l() */
+	char *csym;
+};
+
+/**
+ * Increments the reference count of a reference-counted structure.
+ */
+__attribute__((unused)) static void*
+xlocale_retain(void *val)
+{
+	struct xlocale_refcounted *obj = val;
+	atomic_add_long(&(obj->retain_count), 1);
+	return (val);
+}
+/**
+ * Decrements the reference count of a reference-counted structure, freeing it
+ * if this is the last reference, calling its destructor if it has one.
+ */
+__attribute__((unused)) static void
+xlocale_release(void *val)
+{
+	struct xlocale_refcounted *obj = val;
+	long count;
+
+	count = atomic_fetchadd_long(&(obj->retain_count), -1) - 1;
+	if (count < 0 && obj->destructor != NULL)
+		obj->destructor(obj);
+}
+
+/**
+ * Load functions.  Each takes the name of a locale and a pointer to the data
+ * to be initialised as arguments.  Two special values are allowed for the 
+ */
+extern void* __collate_load(const char*, locale_t);
+extern void* __ctype_load(const char*, locale_t);
+extern void* __messages_load(const char*, locale_t);
+extern void* __monetary_load(const char*, locale_t);
+extern void* __numeric_load(const char*, locale_t);
+extern void* __time_load(const char*, locale_t);
+
+extern struct _xlocale __xlocale_global_locale;
+extern struct _xlocale __xlocale_C_locale;
+
+/**
+ * Caches the rune table in TLS for fast access.
+ */
+void __set_thread_rune_locale(locale_t loc);
+/**
+ * Flag indicating whether a per-thread locale has been set.  If no per-thread
+ * locale has ever been set, then we always use the global locale.
+ */
+extern int __has_thread_locale;
+#ifndef __NO_TLS
+/**
+ * The per-thread locale.  Avoids the need to use pthread lookup functions when
+ * getting the per-thread locale.
+ */
+extern _Thread_local locale_t __thread_locale;
+
+/**
+ * Returns the current locale for this thread, or the global locale if none is
+ * set.  The caller does not have to free the locale.  The return value from
+ * this call is not guaranteed to remain valid after the locale changes.  As
+ * such, this should only be called within libc functions.
+ */
+static inline locale_t __get_locale(void)
+{
+
+	if (!__has_thread_locale) {
+		return (&__xlocale_global_locale);
+	}
+	return (__thread_locale ? __thread_locale : &__xlocale_global_locale);
+}
+#else
+locale_t __get_locale(void);
+#endif
+
+/**
+ * Two magic values are allowed for locale_t objects.  NULL and -1.  This
+ * function maps those to the real locales that they represent.
+ */
+static inline locale_t get_real_locale(locale_t locale)
+{
+	switch ((intptr_t)locale) {
+		case 0: return (&__xlocale_C_locale);
+		case -1: return (&__xlocale_global_locale);
+		default: return (locale);
+	}
+}
+
+/**
+ * Replace a placeholder locale with the real global or thread-local locale_t.
+ */
+#define FIX_LOCALE(l) (l = get_real_locale(l))
+
+#endif
-- 
2.7.4


[-- Attachment #5: 0004-Importing-strtoimax-inttypes-methods-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 1387 bytes --]

From 1e914a2098de912d3d0e8c2fb350dd4f9f9b5435 Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Tue, 11 Jul 2017 08:32:42 +0530
Subject: [PATCH 4/4] Importing strtoimax inttypes methods from FreeBSD.

---
 newlib/libc/locale/Makefile.am | 2 +-
 newlib/libc/stdlib/Makefile.am | 1 +
 newlib/libc/stdlib/strtoimax.c | 0
 3 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 newlib/libc/stdlib/strtoimax.c

diff --git a/newlib/libc/locale/Makefile.am b/newlib/libc/locale/Makefile.am
index 7312654..5f00d72 100644
--- a/newlib/libc/locale/Makefile.am
+++ b/newlib/libc/locale/Makefile.am
@@ -4,7 +4,7 @@ AUTOMAKE_OPTIONS = cygnus
 
 INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
 
-GENERAL_SOURCES = setlocale.h locale.c localeconv.c
+GENERAL_SOURCES = setlocale.h locale.c localeconv.c xlocale_private.h
 
 ## The following interfaces are EL/IX level 2
 if ELIX_LEVEL_1
diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index 5a50c3a..0f05154 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -59,6 +59,7 @@ GENERAL_SOURCES = \
 	sb_charsets.c	\
 	strtod.c	\
 	strtodg.c	\
+        strtoimax.c     \
 	strtol.c	\
 	strtorx.c	\
 	strtoul.c	\
diff --git a/newlib/libc/stdlib/strtoimax.c b/newlib/libc/stdlib/strtoimax.c
new file mode 100644
index 0000000..e69de29
-- 
2.7.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
  2017-07-11  3:29 Importing inttypes methods from FreeBSD Aditya Upadhyay
@ 2017-07-11  9:06 ` Corinna Vinschen
       [not found]   ` <CAMZxAxccBx9oDRiVE-mw5JEcKrLW4GKTdvg-dt+8bTHU=5j54w@mail.gmail.com>
  0 siblings, 1 reply; 18+ messages in thread
From: Corinna Vinschen @ 2017-07-11  9:06 UTC (permalink / raw)
  To: newlib

[-- Attachment #1: Type: text/plain, Size: 3507 bytes --]

On Jul 11 08:58, Aditya Upadhyay wrote:
> Hello Developers,
> 
> I have ported these inttypes methods from FreeBSD. I am requesting you
> to please review the same and suggest me changes.

Nope, sorry, patch 3 is no-go.  Adding the infrastructure from
xlocale_private.h is not the right thing to do.  You're adding a
completely new way of doing stuff, which is differently implemented
in newlib already.  The thread-local stuff is in the reent struct,
which also points to thread local locale info.  States for
multibyte/wide char conversion are already kept in reent.  Use those.
If something's missing, add it there.

> diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
> index ebae00a..bf44953 100644
> --- a/newlib/libc/stdlib/Makefile.am
> +++ b/newlib/libc/stdlib/Makefile.am
> @@ -33,6 +33,7 @@ GENERAL_SOURCES = \
>  	getenv.c  	\
>  	getenv_r.c	\
>  	itoa.c          \
> +        imaxabs.c       \

tab, not spaces

>  	labs.c 		\
>  	ldiv.c  	\
>  	ldtoa.c		\
> [...]
> From: Aditya Upadhyay <aadit0402@gmail.com>
> Date: Mon, 10 Jul 2017 18:41:38 +0530
> Subject: [PATCH 2/4] Importing imaxdiv inttypes method from FreeBSD.
> 
> ---
>  newlib/libc/stdlib/Makefile.am |  1 +
>  newlib/libc/stdlib/imaxdiv.c   | 44 ++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 45 insertions(+)
>  create mode 100644 newlib/libc/stdlib/imaxdiv.c
> 
> diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
> index bf44953..5a50c3a 100644
> --- a/newlib/libc/stdlib/Makefile.am
> +++ b/newlib/libc/stdlib/Makefile.am
> @@ -34,6 +34,7 @@ GENERAL_SOURCES = \
>  	getenv_r.c	\
>  	itoa.c          \
>          imaxabs.c       \
> +        imaxdiv.c       \

Same here

>  	labs.c 		\
>  	ldiv.c  	\
>  	ldtoa.c		\

> From 1e914a2098de912d3d0e8c2fb350dd4f9f9b5435 Mon Sep 17 00:00:00 2001
> From: Aditya Upadhyay <aadit0402@gmail.com>
> Date: Tue, 11 Jul 2017 08:32:42 +0530
> Subject: [PATCH 4/4] Importing strtoimax inttypes methods from FreeBSD.
> 
> ---
>  newlib/libc/locale/Makefile.am | 2 +-
>  newlib/libc/stdlib/Makefile.am | 1 +
>  newlib/libc/stdlib/strtoimax.c | 0
>  3 files changed, 2 insertions(+), 1 deletion(-)
>  create mode 100644 newlib/libc/stdlib/strtoimax.c
> 
> diff --git a/newlib/libc/locale/Makefile.am b/newlib/libc/locale/Makefile.am
> index 7312654..5f00d72 100644
> --- a/newlib/libc/locale/Makefile.am
> +++ b/newlib/libc/locale/Makefile.am
> @@ -4,7 +4,7 @@ AUTOMAKE_OPTIONS = cygnus
>  
>  INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
>  
> -GENERAL_SOURCES = setlocale.h locale.c localeconv.c
> +GENERAL_SOURCES = setlocale.h locale.c localeconv.c xlocale_private.h
>  
>  ## The following interfaces are EL/IX level 2
>  if ELIX_LEVEL_1
> diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
> index 5a50c3a..0f05154 100644
> --- a/newlib/libc/stdlib/Makefile.am
> +++ b/newlib/libc/stdlib/Makefile.am
> @@ -59,6 +59,7 @@ GENERAL_SOURCES = \
>  	sb_charsets.c	\
>  	strtod.c	\
>  	strtodg.c	\
> +        strtoimax.c     \

Same here

>  	strtol.c	\
>  	strtorx.c	\
>  	strtoul.c	\
> diff --git a/newlib/libc/stdlib/strtoimax.c b/newlib/libc/stdlib/strtoimax.c
> new file mode 100644
> index 0000000..e69de29

The function is missing.  If it uses the new code from xlocale_private.h,
you'll have to reevaluate.


Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
       [not found]   ` <CAMZxAxccBx9oDRiVE-mw5JEcKrLW4GKTdvg-dt+8bTHU=5j54w@mail.gmail.com>
@ 2017-07-12  9:50     ` Aditya Upadhyay
  2017-07-12 12:07       ` Corinna Vinschen
  0 siblings, 1 reply; 18+ messages in thread
From: Aditya Upadhyay @ 2017-07-12  9:50 UTC (permalink / raw)
  To: newlib

So, instead of xlocale_private.h, can we use reent.h for thread local
locale information ?  Previously i had ported the code from mingw-w64,
and it was working. Can we use that ported code here ?

Thanks & Regards,
Aditya Upadhyay



On Wed, Jul 12, 2017 at 10:30 AM, Aditya Upadhyay <aadit0402@gmail.com> wrote:
> Can i port these methods from mingw-w64 libraries ?.
> Previousl i had ported these methods for rtems and it was working well.
>
> On Tue, Jul 11, 2017 at 2:36 PM, Corinna Vinschen <vinschen@redhat.com> wrote:
>> On Jul 11 08:58, Aditya Upadhyay wrote:
>>> Hello Developers,
>>>
>>> I have ported these inttypes methods from FreeBSD. I am requesting you
>>> to please review the same and suggest me changes.
>>
> I am sorry for a big gap. I was not feeling well and .
>
> I had  ported these inttypes methods from mingw-w64 libraries
> previously. it was working well for rtems and Testsuite for these
> methods, psxinttypes01 was also working.But after suggestion, i have
> ported these methods from FreeBSD. I have used xlocale_private.h which
> is differently implemented in newlib already. Corinna suggested me to
> use reent.h.
>
>
>
>> Nope, sorry, patch 3 is no-go.  Adding the infrastructure from
>> xlocale_private.h is not the right thing to do.  You're adding a
>> completely new way of doing stuff, which is differently implemented
>> in newlib already.  The thread-local stuff is in the reent struct,
>> which also points to thread local locale info.  States for
>> multibyte/wide char conversion are already kept in reent.  Use those.
>> If something's missing, add it there.
>>
>>> diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
>>> index ebae00a..bf44953 100644
>>> --- a/newlib/libc/stdlib/Makefile.am
>>> +++ b/newlib/libc/stdlib/Makefile.am
>>> @@ -33,6 +33,7 @@ GENERAL_SOURCES = \
>>>       getenv.c        \
>>>       getenv_r.c      \
>>>       itoa.c          \
>>> +        imaxabs.c       \
>>
>> tab, not spaces
>>
>>>       labs.c          \
>>>       ldiv.c          \
>>>       ldtoa.c         \
>>> [...]
>>> From: Aditya Upadhyay <aadit0402@gmail.com>
>>> Date: Mon, 10 Jul 2017 18:41:38 +0530
>>> Subject: [PATCH 2/4] Importing imaxdiv inttypes method from FreeBSD.
>>>
>>> ---
>>>  newlib/libc/stdlib/Makefile.am |  1 +
>>>  newlib/libc/stdlib/imaxdiv.c   | 44 ++++++++++++++++++++++++++++++++++++++++++
>>>  2 files changed, 45 insertions(+)
>>>  create mode 100644 newlib/libc/stdlib/imaxdiv.c
>>>
>>> diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
>>> index bf44953..5a50c3a 100644
>>> --- a/newlib/libc/stdlib/Makefile.am
>>> +++ b/newlib/libc/stdlib/Makefile.am
>>> @@ -34,6 +34,7 @@ GENERAL_SOURCES = \
>>>       getenv_r.c      \
>>>       itoa.c          \
>>>          imaxabs.c       \
>>> +        imaxdiv.c       \
>>
>> Same here
>>
>>>       labs.c          \
>>>       ldiv.c          \
>>>       ldtoa.c         \
>>
>>> From 1e914a2098de912d3d0e8c2fb350dd4f9f9b5435 Mon Sep 17 00:00:00 2001
>>> From: Aditya Upadhyay <aadit0402@gmail.com>
>>> Date: Tue, 11 Jul 2017 08:32:42 +0530
>>> Subject: [PATCH 4/4] Importing strtoimax inttypes methods from FreeBSD.
>>>
>>> ---
>>>  newlib/libc/locale/Makefile.am | 2 +-
>>>  newlib/libc/stdlib/Makefile.am | 1 +
>>>  newlib/libc/stdlib/strtoimax.c | 0
>>>  3 files changed, 2 insertions(+), 1 deletion(-)
>>>  create mode 100644 newlib/libc/stdlib/strtoimax.c
>>>
>>> diff --git a/newlib/libc/locale/Makefile.am b/newlib/libc/locale/Makefile.am
>>> index 7312654..5f00d72 100644
>>> --- a/newlib/libc/locale/Makefile.am
>>> +++ b/newlib/libc/locale/Makefile.am
>>> @@ -4,7 +4,7 @@ AUTOMAKE_OPTIONS = cygnus
>>>
>>>  INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
>>>
>>> -GENERAL_SOURCES = setlocale.h locale.c localeconv.c
>>> +GENERAL_SOURCES = setlocale.h locale.c localeconv.c xlocale_private.h
>>>
>>>  ## The following interfaces are EL/IX level 2
>>>  if ELIX_LEVEL_1
>>> diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
>>> index 5a50c3a..0f05154 100644
>>> --- a/newlib/libc/stdlib/Makefile.am
>>> +++ b/newlib/libc/stdlib/Makefile.am
>>> @@ -59,6 +59,7 @@ GENERAL_SOURCES = \
>>>       sb_charsets.c   \
>>>       strtod.c        \
>>>       strtodg.c       \
>>> +        strtoimax.c     \
>>
>> Same here
>>
>>>       strtol.c        \
>>>       strtorx.c       \
>>>       strtoul.c       \
>>> diff --git a/newlib/libc/stdlib/strtoimax.c b/newlib/libc/stdlib/strtoimax.c
>>> new file mode 100644
>>> index 0000000..e69de29
>>
>> The function is missing.  If it uses the new code from xlocale_private.h,
>> you'll have to reevaluate.
>>
>>
>> Corinna
>>
>> --
>> Corinna Vinschen
>> Cygwin Maintainer
>> Red Hat

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
  2017-07-12  9:50     ` Aditya Upadhyay
@ 2017-07-12 12:07       ` Corinna Vinschen
  0 siblings, 0 replies; 18+ messages in thread
From: Corinna Vinschen @ 2017-07-12 12:07 UTC (permalink / raw)
  To: newlib

[-- Attachment #1: Type: text/plain, Size: 1427 bytes --]

On Jul 12 15:20, Aditya Upadhyay wrote:
> So, instead of xlocale_private.h, can we use reent.h for thread local
> locale information ?

There already *is* thread-local locale information in struc _reent.
Use it.  Only if something is missing, add it there.

> Previously i had ported the code from mingw-w64,
> and it was working. Can we use that ported code here ?

No.

> > I had  ported these inttypes methods from mingw-w64 libraries
> > previously. it was working well for rtems and Testsuite for these
> > methods, psxinttypes01 was also working.But after suggestion, i have
> > ported these methods from FreeBSD. I have used xlocale_private.h which
> > is differently implemented in newlib already. Corinna suggested me to
> > use reent.h.

reent.h contains the definition of the _reent struct, which is what
constitutes thread-local storage in newlib.  You should make yourself
familiar with this structure and the available methods before adding
stuff.  struct _reent also contains a pointer to thread-local locale
information, the _locale member pointing to struct __locale_t, which is
defined in the usual headers.  Some thread-local locale stuff, especially
the mbstates, are in struct _misc_reent, pointed to by the _misc pointer
for historical reasons.

Please use what's available first, only add stuff if necessary.


Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
  2017-07-21 15:43             ` Gedare Bloom
@ 2017-07-21 19:31               ` Corinna Vinschen
  0 siblings, 0 replies; 18+ messages in thread
From: Corinna Vinschen @ 2017-07-21 19:31 UTC (permalink / raw)
  To: Gedare Bloom; +Cc: newlib, Joel Sherrill

[-- Attachment #1: Type: text/plain, Size: 1478 bytes --]

On Jul 21 11:42, Gedare Bloom wrote:
> On Thu, Jul 20, 2017 at 10:37 AM, Corinna Vinschen <vinschen@redhat.com> wrote:
> > Joel, please take an interest in Aditya's work in the first place.
> > *You* were the one who gave these tasks to Aditya, so *you* should be
> > the one guiding him and reviewing these patches, not me.
> > For any followup patches, I will not look into them unless you gave
> > your OK first.
> >
> 
> Thank you for the helpful feedback, which is important to help new
> developers to understand how to work with an open source project. It
> usually takes Joel or myself a few days to a week to review patches. I
> understand completely if you would like to ignore the patches from our
> Google Summer of Code student since he is still learning and will
> inevitably make some mistakes. He started out with private emails, but
> I encouraged him to post to this mailing list in order to increase his
> visibility and learn how to better communicate with the community
> here. Meanwhile, he has sent me a new set of patches in private that
> look good. I hope he will feel comfortable to send them to the mailing
> list soon.

To clarify:

Patches should be sent to this list and then somebody of you guys should
review them *on this list*.  Once done and you're OK with the patch, I'll
recheck the patches and either one of us will push them eventually.


Thanks,
Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
  2017-07-20 14:37           ` Corinna Vinschen
@ 2017-07-21 15:43             ` Gedare Bloom
  2017-07-21 19:31               ` Corinna Vinschen
  0 siblings, 1 reply; 18+ messages in thread
From: Gedare Bloom @ 2017-07-21 15:43 UTC (permalink / raw)
  To: newlib, Joel Sherrill

On Thu, Jul 20, 2017 at 10:37 AM, Corinna Vinschen <vinschen@redhat.com> wrote:
> Aditya,
>
> On Jul 20 13:54, Aditya Upadhyay wrote:
>> Hello All,
>>
>> This is the modified patches for inttypes methods. Now I want to make
>> testsuite for these methods in newlib, but i have no idea how to make
>> test in newlib. Can anyone please help me for the same or point me
>> some link. Please review the patch.
>
> Sorry to say that, but this is unusable.  I can't apply the below
> patches because they are missing the original patches.  On the other
> hand you're using the original subjects, as if the below patches are the
> entire thing.  They aren't.  The below patches are only relative
> patches to the ones you orignally sent, but which, of course, haven't
> been applied yet.
>
> Please, make yourself familiar with `git rebase -i'.  Go back to the
> original patches actually adding the files imaxabs.c, etc., and squash
> the below patches into the original patches.  Then send the resulting,
> *complete* patches as a patchset.  Every addition like imaxabs.c should
> be a single patch in the patchset.
>
>> diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
>> index 6cca5f005..d97b0250c 100644
>> --- a/newlib/libc/stdlib/Makefile.am
>> +++ b/newlib/libc/stdlib/Makefile.am
>> @@ -34,7 +34,6 @@ GENERAL_SOURCES = \
>>       getenv_r.c      \
>>       itoa.c          \
>>       imaxabs.c       \
>> -     imaxdiv.c       \
>>       labs.c          \
>>       ldiv.c          \
>>       ldtoa.c         \
>> @@ -59,7 +58,6 @@ GENERAL_SOURCES = \
>>       sb_charsets.c   \
>>       strtod.c        \
>>       strtodg.c       \
>> -     strtoimax.c     \
>>       strtol.c        \
>>       strtorx.c       \
>>       strtoul.c       \
>> @@ -70,8 +68,8 @@ GENERAL_SOURCES = \
>>       wcstombs.c      \
>>       wcstombs_r.c    \
>>       wctomb.c        \
>> -     wctomb_r.c
>> -
>> +     wctomb_r.c      \
>> +
>
> ^^^^^^^^^^^^
> ...and don't add gratuitious white spaces, please.
>
> Joel, please take an interest in Aditya's work in the first place.
> *You* were the one who gave these tasks to Aditya, so *you* should be
> the one guiding him and reviewing these patches, not me.
> For any followup patches, I will not look into them unless you gave
> your OK first.
>

Thank you for the helpful feedback, which is important to help new
developers to understand how to work with an open source project. It
usually takes Joel or myself a few days to a week to review patches. I
understand completely if you would like to ignore the patches from our
Google Summer of Code student since he is still learning and will
inevitably make some mistakes. He started out with private emails, but
I encouraged him to post to this mailing list in order to increase his
visibility and learn how to better communicate with the community
here. Meanwhile, he has sent me a new set of patches in private that
look good. I hope he will feel comfortable to send them to the mailing
list soon.

Gedare

>
> Corinna
>
> --
> Corinna Vinschen
> Cygwin Maintainer
> Red Hat

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
  2017-07-20  8:25         ` Aditya Upadhyay
@ 2017-07-20 14:37           ` Corinna Vinschen
  2017-07-21 15:43             ` Gedare Bloom
  0 siblings, 1 reply; 18+ messages in thread
From: Corinna Vinschen @ 2017-07-20 14:37 UTC (permalink / raw)
  To: newlib; +Cc: Joel Sherrill

[-- Attachment #1: Type: text/plain, Size: 2106 bytes --]

Aditya,

On Jul 20 13:54, Aditya Upadhyay wrote:
> Hello All,
> 
> This is the modified patches for inttypes methods. Now I want to make
> testsuite for these methods in newlib, but i have no idea how to make
> test in newlib. Can anyone please help me for the same or point me
> some link. Please review the patch.

Sorry to say that, but this is unusable.  I can't apply the below
patches because they are missing the original patches.  On the other
hand you're using the original subjects, as if the below patches are the
entire thing.  They aren't.  The below patches are only relative
patches to the ones you orignally sent, but which, of course, haven't
been applied yet.  

Please, make yourself familiar with `git rebase -i'.  Go back to the
original patches actually adding the files imaxabs.c, etc., and squash
the below patches into the original patches.  Then send the resulting,
*complete* patches as a patchset.  Every addition like imaxabs.c should
be a single patch in the patchset.

> diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
> index 6cca5f005..d97b0250c 100644
> --- a/newlib/libc/stdlib/Makefile.am
> +++ b/newlib/libc/stdlib/Makefile.am
> @@ -34,7 +34,6 @@ GENERAL_SOURCES = \
>  	getenv_r.c	\
>  	itoa.c          \
>  	imaxabs.c	\
> -	imaxdiv.c	\
>  	labs.c 		\
>  	ldiv.c  	\
>  	ldtoa.c		\
> @@ -59,7 +58,6 @@ GENERAL_SOURCES = \
>  	sb_charsets.c	\
>  	strtod.c	\
>  	strtodg.c	\
> -	strtoimax.c	\
>  	strtol.c	\
>  	strtorx.c	\
>  	strtoul.c	\
> @@ -70,8 +68,8 @@ GENERAL_SOURCES = \
>  	wcstombs.c	\
>  	wcstombs_r.c	\
>  	wctomb.c	\
> -	wctomb_r.c
> -
> +	wctomb_r.c	\
> +	

^^^^^^^^^^^^
...and don't add gratuitious white spaces, please.

Joel, please take an interest in Aditya's work in the first place.
*You* were the one who gave these tasks to Aditya, so *you* should be
the one guiding him and reviewing these patches, not me.
For any followup patches, I will not look into them unless you gave
your OK first.


Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
  2017-07-19 17:00       ` Aditya Upadhyay
@ 2017-07-20  8:25         ` Aditya Upadhyay
  2017-07-20 14:37           ` Corinna Vinschen
  0 siblings, 1 reply; 18+ messages in thread
From: Aditya Upadhyay @ 2017-07-20  8:25 UTC (permalink / raw)
  To: newlib

[-- Attachment #1: Type: text/plain, Size: 1385 bytes --]

Hello All,

This is the modified patches for inttypes methods. Now I want to make
testsuite for these methods in newlib, but i have no idea how to make
test in newlib. Can anyone please help me for the same or point me
some link. Please review the patch.

Thanks & Regards,
Aditya Upadhyay

On Wed, Jul 19, 2017 at 10:30 PM, Aditya Upadhyay <aadit0402@gmail.com> wrote:
> I am attaching the patch for inttypes methods after modification. I am
> requesting you to please review the same.
>
> Regards,
> Aditya
>
> On Wed, Jul 19, 2017 at 9:14 PM, Corinna Vinschen <vinschen@redhat.com> wrote:
>> On Jul 19 10:13, Craig Howland wrote:
>>> On 07/19/2017 08:28 AM, Corinna Vinschen wrote:
>>> > What you really want is to define a static function which takes the
>>> > reent pointer and strtoimax_l/strtoimax only calling that, like this:
>>> >
>>> > --- snip ---
>>> > static intmax_t
>>> > _strtoimax_r(struct _reent *rptr, const char * __restrict nptr,
>>> >          char ** __restrict endptr, int base, locale_t loc)
>>> Corinna:
>>>      Why static?  In general, the reentrant forms are included in the header
>>> files so that they can be called directly if an application so desires.
>>
>> Good point.  Yes, the function should better be non-static and added
>> to inttypes.h as well (unconditionally).
>>
>>
>> Corinna
>>
>> --
>> Corinna Vinschen
>> Cygwin Maintainer
>> Red Hat

[-- Attachment #2: 0001-importing-of-imaxabs-inttypes-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 1460 bytes --]

From 259ca4539ee8f4a54e1caa97bcfd000c442ab0d6 Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Thu, 20 Jul 2017 13:33:28 +0530
Subject: [PATCH 1/6] importing of imaxabs inttypes method from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am | 6 ++----
 newlib/libc/stdlib/imaxabs.c   | 5 ++---
 2 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index 6cca5f005..d97b0250c 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -34,7 +34,6 @@ GENERAL_SOURCES = \
 	getenv_r.c	\
 	itoa.c          \
 	imaxabs.c	\
-	imaxdiv.c	\
 	labs.c 		\
 	ldiv.c  	\
 	ldtoa.c		\
@@ -59,7 +58,6 @@ GENERAL_SOURCES = \
 	sb_charsets.c	\
 	strtod.c	\
 	strtodg.c	\
-	strtoimax.c	\
 	strtol.c	\
 	strtorx.c	\
 	strtoul.c	\
@@ -70,8 +68,8 @@ GENERAL_SOURCES = \
 	wcstombs.c	\
 	wcstombs_r.c	\
 	wctomb.c	\
-	wctomb_r.c
-
+	wctomb_r.c	\
+	
 if HAVE_LONG_DOUBLE
 GENERAL_SOURCES += \
 	strtold.c \
diff --git a/newlib/libc/stdlib/imaxabs.c b/newlib/libc/stdlib/imaxabs.c
index 0c76e0cbe..e43864606 100644
--- a/newlib/libc/stdlib/imaxabs.c
+++ b/newlib/libc/stdlib/imaxabs.c
@@ -25,11 +25,10 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/lib/libc/stdlib/imaxabs.c 86368 2001-11-15 02:05:03Z mike $");
 
-#include <stdint.h>
 #include <inttypes.h>
-
+#include <stdint.h>
 intmax_t
 imaxabs(intmax_t j)
 {
-- 
2.11.0


[-- Attachment #3: 0002-Importing-of-imaxdiv-inttypes-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 1176 bytes --]

From aba3f506c36b0bc5027db296019e12df2f39cad8 Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Thu, 20 Jul 2017 13:34:40 +0530
Subject: [PATCH 2/6] Importing of imaxdiv inttypes method from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am | 1 +
 newlib/libc/stdlib/imaxdiv.c   | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index d97b0250c..534a867b1 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -34,6 +34,7 @@ GENERAL_SOURCES = \
 	getenv_r.c	\
 	itoa.c          \
 	imaxabs.c	\
+	imaxdiv.c	\
 	labs.c 		\
 	ldiv.c  	\
 	ldtoa.c		\
diff --git a/newlib/libc/stdlib/imaxdiv.c b/newlib/libc/stdlib/imaxdiv.c
index 15d78baf4..eb3e99ad6 100644
--- a/newlib/libc/stdlib/imaxdiv.c
+++ b/newlib/libc/stdlib/imaxdiv.c
@@ -25,10 +25,10 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/lib/libc/stdlib/imaxdiv.c 301115 2016-06-01 10:14:25Z ache $");
 
-#include <stdint.h>
 #include <inttypes.h>
+#include <stdint.h>
 
 /* See comments in div.c for implementation details. */
 imaxdiv_t
-- 
2.11.0


[-- Attachment #4: 0003-Importing-strtoimax-inttypes-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 1219 bytes --]

From c673221f773a0a733964653e8d53580f040d6dff Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Thu, 20 Jul 2017 13:36:05 +0530
Subject: [PATCH 3/6] Importing strtoimax inttypes method from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am | 1 +
 newlib/libc/stdlib/strtoimax.c | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index 534a867b1..30723ed2a 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -59,6 +59,7 @@ GENERAL_SOURCES = \
 	sb_charsets.c	\
 	strtod.c	\
 	strtodg.c	\
+	strtoimax.c	\
 	strtol.c	\
 	strtorx.c	\
 	strtoul.c	\
diff --git a/newlib/libc/stdlib/strtoimax.c b/newlib/libc/stdlib/strtoimax.c
index 3e38b850e..82de47c9a 100644
--- a/newlib/libc/stdlib/strtoimax.c
+++ b/newlib/libc/stdlib/strtoimax.c
@@ -148,5 +148,5 @@ strtoimax_l(const char * __restrict nptr, char ** __restrict endptr, int base,
 intmax_t
 strtoimax(const char* __restrict nptr, char** __restrict endptr, int base)
 {
-	return _strtoimax_r(_REENT,nptr,endptr, base, __get_current_locale());
+	return _strtoimax_r(_REENT, nptr, endptr, base, __get_current_locale());
 }		
-- 
2.11.0


[-- Attachment #5: 0004-Importing-strtoumax-inttypes-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 5074 bytes --]

From 17b233a032933cfd2da8280760a21411c8622601 Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Thu, 20 Jul 2017 13:37:15 +0530
Subject: [PATCH 4/6] Importing strtoumax inttypes method from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am |   1 +
 newlib/libc/stdlib/strtoumax.c | 134 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 135 insertions(+)
 create mode 100644 newlib/libc/stdlib/strtoumax.c

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index 30723ed2a..7e6784758 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -63,6 +63,7 @@ GENERAL_SOURCES = \
 	strtol.c	\
 	strtorx.c	\
 	strtoul.c	\
+	strtoumax.c	\
 	utoa.c          \
 	wcstod.c	\
 	wcstol.c	\
diff --git a/newlib/libc/stdlib/strtoumax.c b/newlib/libc/stdlib/strtoumax.c
new file mode 100644
index 000000000..e959a7ddb
--- /dev/null
+++ b/newlib/libc/stdlib/strtoumax.c
@@ -0,0 +1,134 @@
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ * Portions of this software were developed by David Chisnall
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "from @(#)strtoul.c	8.1 (Berkeley) 6/4/93";
+#endif /* LIBC_SCCS and not lint */
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/lib/libc/stdlib/strtoumax.c 251672 2013-06-13 00:19:30Z emaste $");
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <inttypes.h>
+#include <stdint.h>
+#include <reent.h>
+#include "../locale/setlocale.h"
+
+/*
+ * Convert a string to a uintmax_t integer.
+ *
+ * Assumes that the upper and lower case
+ * alphabets and digits are each contiguous.
+ */
+uintmax_t
+_strtoumax_r(struct _reent *rptr, const char * __restrict nptr, 
+	     char ** __restrict endptr, int base, locale_t loc)
+{
+	const char *s = (const unsigned char *)nptr;
+	uintmax_t acc;
+	char c;
+	uintmax_t cutoff;
+	int neg = 0, any, cutlim;
+	
+	/*
+	 * See strtoimax for comments as to the logic used.
+	 */
+	do {
+		c = *s++;
+	} while (isspace_l(c, loc));
+	if (c == '-') {
+		neg = 1;
+		c = *s++;
+	} else {
+		neg = 0;
+		if (c == '+')
+			c = *s++;
+	}
+	if ((base == 0 || base == 16) &&
+	    c == '0' && (*s == 'x' || *s == 'X')) {
+		c = s[1];
+		s += 2;
+		base = 16;
+	}
+	if (base == 0)
+		base = c == '0' ? 8 : 10;
+	acc = any = 0;
+	if (base < 2 || base > 36)
+		goto noconv;
+
+	cutoff = UINTMAX_MAX / base;
+	cutlim = UINTMAX_MAX % base;
+	for ( ; ; c = *s++) {
+		if (c >= '0' && c <= '9')
+			c -= '0';
+		else if (c >= 'A' && c <= 'Z')
+			c -= 'A' - 10;
+		else if (c >= 'a' && c <= 'z')
+			c -= 'a' - 10;
+		else
+			break;
+		if (c >= base)
+			break;
+		if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
+			any = -1;
+		else {
+			any = 1;
+			acc *= base;
+			acc += c;
+		}
+	}
+	if (any < 0) {
+		acc = UINTMAX_MAX;
+		rptr->_errno = ERANGE;
+	} else if (!any) {
+noconv:
+		rptr->_errno = EINVAL;
+	} else if (neg)
+		acc = -acc;
+	if (endptr != NULL)
+		*endptr = (char *)(any ? s - 1 : nptr);
+	return (acc);
+}
+uintmax_t
+strtoumax_l(const char * __restrict nptr, char ** __restrict endptr, int base,
+	    locale_t loc)
+{
+	return _strtoumax_r(_REENT, nptr, endptr, base, loc);
+}
+uintmax_t
+strtoumax(const char* __restrict nptr, char** __restrict endptr, int base)
+{
+	return _strtoumax_r(_REENT, nptr, endptr, base, __get_current_locale());
+}
-- 
2.11.0


[-- Attachment #6: 0005-Importing-wcstoimax-inttypes-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 5284 bytes --]

From c9e3a15a3d739025fa2ed81d627f4c3fa9348504 Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Thu, 20 Jul 2017 13:38:20 +0530
Subject: [PATCH 5/6] Importing wcstoimax inttypes method from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am |   1 +
 newlib/libc/stdlib/wcstoimax.c | 141 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 142 insertions(+)
 create mode 100644 newlib/libc/stdlib/wcstoimax.c

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index 7e6784758..47c4e1bf8 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -66,6 +66,7 @@ GENERAL_SOURCES = \
 	strtoumax.c	\
 	utoa.c          \
 	wcstod.c	\
+	wcstoimax.c	\
 	wcstol.c	\
 	wcstoul.c	\
 	wcstombs.c	\
diff --git a/newlib/libc/stdlib/wcstoimax.c b/newlib/libc/stdlib/wcstoimax.c
new file mode 100644
index 000000000..af4398832
--- /dev/null
+++ b/newlib/libc/stdlib/wcstoimax.c
@@ -0,0 +1,141 @@
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ * Portions of this software were developed by David Chisnall
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#if 0
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "from @(#)strtol.c	8.1 (Berkeley) 6/4/93";
+#endif /* LIBC_SCCS and not lint */
+__FBSDID("FreeBSD: src/lib/libc/stdlib/strtoimax.c,v 1.8 2002/09/06 11:23:59 tjr Exp ");
+#endif
+__FBSDID("$FreeBSD: head/lib/libc/locale/wcstoimax.c 314436 2017-02-28 23:42:47Z imp $");
+
+#include <errno.h>
+#include <inttypes.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <wctype.h>
+#include <reent.h>
+#include <stdint.h>
+#include "../locale/setlocale.h"
+
+/*
+ * Convert a wide character string to an intmax_t integer.
+ */
+intmax_t
+_wcstoimax_r(struct _reent *rptr, const wchar_t * __restrict nptr, 
+	     wchar_t ** __restrict endptr, int base, locale_t loc)
+{
+	const wchar_t *s = nptr;
+	uintmax_t acc;
+	wchar_t c;
+	uintmax_t cutoff;
+	int neg = 0, any, cutlim;
+	
+	/*
+	 * See strtoimax for comments as to the logic used.
+	 */
+	do {
+		c = *s++;
+	} while (iswspace_l(c, loc));
+	if (c == L'-') {
+		neg = 1;
+		c = *s++;
+	} else {
+		neg = 0;
+		if (c == L'+')
+			c = *s++;
+	}
+	if ((base == 0 || base == 16) &&
+	    c == L'0' && (*s == L'x' || *s == L'X')) {
+		c = s[1];
+		s += 2;
+		base = 16;
+	}
+	if (base == 0)
+		base = c == L'0' ? 8 : 10;
+	acc = any = 0;
+	if (base < 2 || base > 36)
+		goto noconv;
+
+	cutoff = neg ? -(uintmax_t)INTMAX_MIN : INTMAX_MAX;
+	cutlim = cutoff % base;
+	cutoff /= base;
+	for ( ; ; c = *s++) {
+#ifdef notyet
+		if (iswdigit_l(c, loc))
+			c = digittoint_l(c, loc);
+		else
+#endif
+		if (c >= L'0' && c <= L'9')
+			c -= L'0';
+		else if (c >= L'A' && c <= L'Z')
+			c -= L'A' - 10;
+		else if (c >= 'a' && c <= 'z')
+			c -= L'a' - 10;
+		else
+			break;
+		if (c >= base)
+			break;
+		if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
+			any = -1;
+		else {
+			any = 1;
+			acc *= base;
+			acc += c;
+		}
+	}
+	if (any < 0) {
+		acc = neg ? INTMAX_MIN : INTMAX_MAX;
+		rptr->_errno = ERANGE;
+	} else if (!any) {
+noconv:
+		rptr->_errno = EINVAL;
+	} else if (neg)
+		acc = -acc;
+	if (endptr != NULL)
+		*endptr = (wchar_t *)(any ? s - 1 : nptr);
+	return (acc);
+}
+intmax_t
+wcstoimax_l(const wchar_t * __restrict nptr, wchar_t ** __restrict endptr,
+    	    int base, locale_t loc)
+{
+	return _wcstoimax_r(_REENT, nptr, endptr, base, loc);
+}
+intmax_t
+wcstoimax(const wchar_t* __restrict nptr, wchar_t** __restrict endptr, int base)
+{
+	return _wcstoimax_r(_REENT, nptr, endptr, base, __get_current_locale());
+}
-- 
2.11.0


[-- Attachment #7: 0006-Importing-wcstoumax-inttypes-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 5230 bytes --]

From e38393c5f7903ec9ba47f9b752ad8cf5220ac977 Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Thu, 20 Jul 2017 13:39:22 +0530
Subject: [PATCH 6/6] Importing wcstoumax inttypes method from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am |   1 +
 newlib/libc/stdlib/wcstoumax.c | 140 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 141 insertions(+)
 create mode 100644 newlib/libc/stdlib/wcstoumax.c

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index 47c4e1bf8..8f4adac6c 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -73,6 +73,7 @@ GENERAL_SOURCES = \
 	wcstombs_r.c	\
 	wctomb.c	\
 	wctomb_r.c	\
+	wcstoumax.c
 	
 if HAVE_LONG_DOUBLE
 GENERAL_SOURCES += \
diff --git a/newlib/libc/stdlib/wcstoumax.c b/newlib/libc/stdlib/wcstoumax.c
new file mode 100644
index 000000000..0ffde70c1
--- /dev/null
+++ b/newlib/libc/stdlib/wcstoumax.c
@@ -0,0 +1,140 @@
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ * Portions of this software were developed by David Chisnall
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#if 0
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "from @(#)strtoul.c	8.1 (Berkeley) 6/4/93";
+#endif /* LIBC_SCCS and not lint */
+__FBSDID("FreeBSD: src/lib/libc/stdlib/strtoumax.c,v 1.8 2002/09/06 11:23:59 tjr Exp ");
+#endif
+__FBSDID("$FreeBSD: head/lib/libc/locale/wcstoumax.c 314436 2017-02-28 23:42:47Z imp $");
+
+#include <errno.h>
+#include <inttypes.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <wctype.h>
+#include <stdint.h>
+#include <reent.h>
+#include "../locale/setlocale.h"
+
+/*
+ * Convert a wide character string to a uintmax_t integer.
+ */
+uintmax_t
+_wcstoumax_r(struct _reent *rptr,const wchar_t * __restrict nptr, wchar_t ** __restrict endptr,
+    int base, locale_t loc)
+{
+	const wchar_t *s = nptr;
+	uintmax_t acc;
+	wchar_t c;
+	uintmax_t cutoff;
+	int neg = 0, any, cutlim;
+	
+	/*
+	 * See strtoimax for comments as to the logic used.
+	 */
+	do {
+		c = *s++;
+	} while (iswspace_l(c, loc));
+	if (c == L'-') {
+		neg = 1;
+		c = *s++;
+	} else {
+		neg = 0;
+		if (c == L'+')
+			c = *s++;
+	}
+	if ((base == 0 || base == 16) &&
+	    c == L'0' && (*s == L'x' || *s == L'X')) {
+		c = s[1];
+		s += 2;
+		base = 16;
+	}
+	if (base == 0)
+		base = c == L'0' ? 8 : 10;
+	acc = any = 0;
+	if (base < 2 || base > 36)
+		goto noconv;
+
+	cutoff = UINTMAX_MAX / base;
+	cutlim = UINTMAX_MAX % base;
+	for ( ; ; c = *s++) {
+#ifdef notyet
+		if (iswdigit_l(c, loc))
+			c = digittoint_l(c, loc);
+		else
+#endif
+		if (c >= L'0' && c <= L'9')
+			c -= L'0';
+		else if (c >= L'A' && c <= L'Z')
+			c -= L'A' - 10;
+		else if (c >= L'a' && c <= L'z')
+			c -= L'a' - 10;
+		else
+			break;
+		if (c >= base)
+			break;
+		if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
+			any = -1;
+		else {
+			any = 1;
+			acc *= base;
+			acc += c;
+		}
+	}
+	if (any < 0) {
+		acc = UINTMAX_MAX;
+		rptr->_errno = ERANGE;
+	} else if (!any) {
+noconv:
+		rptr->_errno = EINVAL;
+	} else if (neg)
+		acc = -acc;
+	if (endptr != NULL)
+		*endptr = (wchar_t *)(any ? s - 1 : nptr);
+	return (acc);
+}
+uintmax_t
+wcstoumax_l(const wchar_t * __restrict nptr, wchar_t ** __restrict endptr,
+    	    int base, locale_t loc)
+{
+	return _wcstoumax_r(_REENT, nptr, endptr, base, loc);
+}
+uintmax_t
+wcstoumax(const wchar_t* __restrict nptr, wchar_t** __restrict endptr, int base)
+{
+	return _wcstoumax_r(_REENT, nptr, endptr, base, __get_current_locale());
+}
-- 
2.11.0


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
  2017-07-19 15:44     ` Corinna Vinschen
@ 2017-07-19 17:00       ` Aditya Upadhyay
  2017-07-20  8:25         ` Aditya Upadhyay
  0 siblings, 1 reply; 18+ messages in thread
From: Aditya Upadhyay @ 2017-07-19 17:00 UTC (permalink / raw)
  To: newlib

[-- Attachment #1: Type: text/plain, Size: 980 bytes --]

I am attaching the patch for inttypes methods after modification. I am
requesting you to please review the same.

Regards,
Aditya

On Wed, Jul 19, 2017 at 9:14 PM, Corinna Vinschen <vinschen@redhat.com> wrote:
> On Jul 19 10:13, Craig Howland wrote:
>> On 07/19/2017 08:28 AM, Corinna Vinschen wrote:
>> > What you really want is to define a static function which takes the
>> > reent pointer and strtoimax_l/strtoimax only calling that, like this:
>> >
>> > --- snip ---
>> > static intmax_t
>> > _strtoimax_r(struct _reent *rptr, const char * __restrict nptr,
>> >          char ** __restrict endptr, int base, locale_t loc)
>> Corinna:
>>      Why static?  In general, the reentrant forms are included in the header
>> files so that they can be called directly if an application so desires.
>
> Good point.  Yes, the function should better be non-static and added
> to inttypes.h as well (unconditionally).
>
>
> Corinna
>
> --
> Corinna Vinschen
> Cygwin Maintainer
> Red Hat

[-- Attachment #2: v2-0001-Importing-imaxabs-inttype-methods-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 2515 bytes --]

From 01214d25aea8e2501b493099468c764cda24ba3c Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Tue, 18 Jul 2017 23:19:58 +0530
Subject: [PATCH v2 1/4] Importing imaxabs inttype methods from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am |  1 +
 newlib/libc/stdlib/imaxabs.c   | 37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+)
 create mode 100644 newlib/libc/stdlib/imaxabs.c

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index ebae00ab0..117d7c495 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -33,6 +33,7 @@ GENERAL_SOURCES = \
 	getenv.c  	\
 	getenv_r.c	\
 	itoa.c          \
+	imaxabs.c	\
 	labs.c 		\
 	ldiv.c  	\
 	ldtoa.c		\
diff --git a/newlib/libc/stdlib/imaxabs.c b/newlib/libc/stdlib/imaxabs.c
new file mode 100644
index 000000000..0c76e0cbe
--- /dev/null
+++ b/newlib/libc/stdlib/imaxabs.c
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <stdint.h>
+#include <inttypes.h>
+
+intmax_t
+imaxabs(intmax_t j)
+{
+	return (j < 0 ? -j : j);
+}
-- 
2.11.0


[-- Attachment #3: v2-0002-Importing-imaxdiv-inttype-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 2827 bytes --]

From fb60d75a0402e3665079f22aaa3b40d7213c009b Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Tue, 18 Jul 2017 23:21:24 +0530
Subject: [PATCH v2 2/4] Importing imaxdiv inttype method from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am |  1 +
 newlib/libc/stdlib/imaxdiv.c   | 48 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+)
 create mode 100644 newlib/libc/stdlib/imaxdiv.c

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index 117d7c495..76a1a67e4 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -34,6 +34,7 @@ GENERAL_SOURCES = \
 	getenv_r.c	\
 	itoa.c          \
 	imaxabs.c	\
+	imaxdiv.c	\
 	labs.c 		\
 	ldiv.c  	\
 	ldtoa.c		\
diff --git a/newlib/libc/stdlib/imaxdiv.c b/newlib/libc/stdlib/imaxdiv.c
new file mode 100644
index 000000000..15d78baf4
--- /dev/null
+++ b/newlib/libc/stdlib/imaxdiv.c
@@ -0,0 +1,48 @@
+/*-
+ * Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <stdint.h>
+#include <inttypes.h>
+
+/* See comments in div.c for implementation details. */
+imaxdiv_t
+imaxdiv(intmax_t numer, intmax_t denom)
+{
+	imaxdiv_t retval;
+
+	retval.quot = numer / denom;
+	retval.rem = numer % denom;
+#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)
+	if (numer >= 0 && retval.rem < 0) {
+		retval.quot++;
+		retval.rem -= denom;
+	}
+#endif
+	return (retval);
+}
-- 
2.11.0


[-- Attachment #4: v2-0003-Importing-strtoimax-inttype-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 5825 bytes --]

From f17d999ebd54b796f20f0e7a97b6d79e2f234893 Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Tue, 18 Jul 2017 23:22:39 +0530
Subject: [PATCH v2 3/4] Importing strtoimax inttype method from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am |   1 +
 newlib/libc/stdlib/strtoimax.c | 146 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 147 insertions(+)
 create mode 100644 newlib/libc/stdlib/strtoimax.c

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index 76a1a67e4..6cca5f005 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -59,6 +59,7 @@ GENERAL_SOURCES = \
 	sb_charsets.c	\
 	strtod.c	\
 	strtodg.c	\
+	strtoimax.c	\
 	strtol.c	\
 	strtorx.c	\
 	strtoul.c	\
diff --git a/newlib/libc/stdlib/strtoimax.c b/newlib/libc/stdlib/strtoimax.c
new file mode 100644
index 000000000..0cb6e2acc
--- /dev/null
+++ b/newlib/libc/stdlib/strtoimax.c
@@ -0,0 +1,146 @@
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ * Portions of this software were developed by David Chisnall
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "from @(#)strtol.c	8.1 (Berkeley) 6/4/93";
+#endif /* LIBC_SCCS and not lint */
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <inttypes.h>
+#include <stdint.h>
+#include <reent.h>
+#include "../locale/setlocale.h"
+
+/*
+ * Convert a string to an intmax_t integer.
+ *
+ * Assumes that the upper and lower case
+ * alphabets and digits are each contiguous.
+ */
+intmax_t
+strtoimax_l(struct _reent *rptr, const char * __restrict nptr, char ** __restrict endptr, int base,
+		locale_t loc)
+{
+	const char *s = (const unsigned char *)nptr;
+	uintmax_t acc;
+	char c;
+	uintmax_t cutoff;
+	int neg = 0, any, cutlim;
+	
+	/*
+	 * Skip white space and pick up leading +/- sign if any.
+	 * If base is 0, allow 0x for hex and 0 for octal, else
+	 * assume decimal; if base is already 16, allow 0x.
+	 */
+	do {
+		c = *s++;
+	} while (isspace_l(c, loc));
+	if (c == '-') {
+		neg = 1;
+		c = *s++;
+	} else {
+		neg = 0;
+		if (c == '+')
+			c = *s++;
+	}
+	if ((base == 0 || base == 16) &&
+	    c == '0' && (*s == 'x' || *s == 'X')) {
+		c = s[1];
+		s += 2;
+		base = 16;
+	}
+	if (base == 0)
+		base = c == '0' ? 8 : 10;
+	
+	/*
+	 * Compute the cutoff value between legal numbers and illegal
+	 * numbers.  That is the largest legal value, divided by the
+	 * base.  An input number that is greater than this value, if
+	 * followed by a legal input character, is too big.  One that
+	 * is equal to this value may be valid or not; the limit
+	 * between valid and invalid numbers is then based on the last
+	 * digit.  For instance, if the range for intmax_t is
+	 * [-9223372036854775808..9223372036854775807] and the input base
+	 * is 10, cutoff will be set to 922337203685477580 and cutlim to
+	 * either 7 (neg==0) or 8 (neg==1), meaning that if we have
+	 * accumulated a value > 922337203685477580, or equal but the
+	 * next digit is > 7 (or 8), the number is too big, and we will
+	 * return a range error.
+	 *
+	 * Set 'any' if any `digits' consumed; make it negative to indicate
+	 * overflow.
+	 */
+	cutoff = neg ? -(uintmax_t)INTMAX_MIN : INTMAX_MAX;
+	cutlim = cutoff % base;
+	cutoff /= base;
+	for ( ; ; c = *s++) {
+		if (c >= '0' && c <= '9')
+			c -= '0';
+		else if (c >= 'A' && c <= 'Z')
+			c -= 'A' - 10;
+		else if (c >= 'a' && c <= 'z')
+			c -= 'a' - 10;
+		else
+			break;
+		if (c >= base)
+			break;
+		if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
+			any = -1;
+		else {
+			any = 1;
+			acc *= base;
+			acc += c;
+		}
+	}
+	if (any < 0) {
+		acc = neg ? INTMAX_MIN : INTMAX_MAX;
+		rptr->_errno = ERANGE;
+	} else if (!any) {
+noconv:
+		rptr->_errno = EINVAL;
+	} else if (neg)
+		acc = -acc;
+	if (endptr != NULL)
+		*endptr = (char *)(any ? s - 1 : nptr);
+	return (acc);
+}
+intmax_t
+strtoimax(const char * __restrict nptr, char ** __restrict endptr, int base)
+{
+	return strtoimax_l(_REENT, nptr, endptr, base, __get_current_locale ());
+}
-- 
2.11.0


[-- Attachment #5: v2-0004-Importing-strtoimax-inttype-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 1789 bytes --]

From cdbb1b0873d0f618c5ea3eda9582ce7cdccae596 Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Wed, 19 Jul 2017 21:52:33 +0530
Subject: [PATCH v2 4/4] Importing strtoimax inttype method from FreeBSD.

---
 newlib/libc/stdlib/strtoimax.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/newlib/libc/stdlib/strtoimax.c b/newlib/libc/stdlib/strtoimax.c
index 0cb6e2acc..3e38b850e 100644
--- a/newlib/libc/stdlib/strtoimax.c
+++ b/newlib/libc/stdlib/strtoimax.c
@@ -36,7 +36,7 @@
 static char sccsid[] = "from @(#)strtol.c	8.1 (Berkeley) 6/4/93";
 #endif /* LIBC_SCCS and not lint */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/lib/libc/stdlib/strtoimax.c 251672 2013-06-13 00:19:30Z emaste $");
 
 #include <ctype.h>
 #include <errno.h>
@@ -53,8 +53,8 @@ __FBSDID("$FreeBSD$");
  * alphabets and digits are each contiguous.
  */
 intmax_t
-strtoimax_l(struct _reent *rptr, const char * __restrict nptr, char ** __restrict endptr, int base,
-		locale_t loc)
+_strtoimax_r(struct _reent *rptr, const char * __restrict nptr,
+	     char ** __restrict endptr, int base, locale_t loc)
 {
 	const char *s = (const unsigned char *)nptr;
 	uintmax_t acc;
@@ -140,7 +140,13 @@ noconv:
 	return (acc);
 }
 intmax_t
-strtoimax(const char * __restrict nptr, char ** __restrict endptr, int base)
+strtoimax_l(const char * __restrict nptr, char ** __restrict endptr, int base,
+	    locale_t loc)
 {
-	return strtoimax_l(_REENT, nptr, endptr, base, __get_current_locale ());
+	return _strtoimax_r(_REENT, nptr, endptr, base, loc);
 }
+intmax_t
+strtoimax(const char* __restrict nptr, char** __restrict endptr, int base)
+{
+	return _strtoimax_r(_REENT,nptr,endptr, base, __get_current_locale());
+}		
-- 
2.11.0


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
  2017-07-19 14:13   ` Craig Howland
@ 2017-07-19 15:44     ` Corinna Vinschen
  2017-07-19 17:00       ` Aditya Upadhyay
  0 siblings, 1 reply; 18+ messages in thread
From: Corinna Vinschen @ 2017-07-19 15:44 UTC (permalink / raw)
  To: newlib

[-- Attachment #1: Type: text/plain, Size: 761 bytes --]

On Jul 19 10:13, Craig Howland wrote:
> On 07/19/2017 08:28 AM, Corinna Vinschen wrote:
> > What you really want is to define a static function which takes the
> > reent pointer and strtoimax_l/strtoimax only calling that, like this:
> > 
> > --- snip ---
> > static intmax_t
> > _strtoimax_r(struct _reent *rptr, const char * __restrict nptr,
> > 	     char ** __restrict endptr, int base, locale_t loc)
> Corinna:
>      Why static?  In general, the reentrant forms are included in the header
> files so that they can be called directly if an application so desires.

Good point.  Yes, the function should better be non-static and added
to inttypes.h as well (unconditionally).


Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
  2017-07-19 12:28 ` Corinna Vinschen
  2017-07-19 13:23   ` Aditya Upadhyay
@ 2017-07-19 14:13   ` Craig Howland
  2017-07-19 15:44     ` Corinna Vinschen
  1 sibling, 1 reply; 18+ messages in thread
From: Craig Howland @ 2017-07-19 14:13 UTC (permalink / raw)
  To: newlib

On 07/19/2017 08:28 AM, Corinna Vinschen wrote:
> What you really want is to define a static function which takes the
> reent pointer and strtoimax_l/strtoimax only calling that, like this:
>
> --- snip ---
> static intmax_t
> _strtoimax_r(struct _reent *rptr, const char * __restrict nptr,
> 	     char ** __restrict endptr, int base, locale_t loc)
Corinna:
      Why static?  In general, the reentrant forms are included in the header 
files so that they can be called directly if an application so desires.
                 Craig

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
  2017-07-19 12:28 ` Corinna Vinschen
@ 2017-07-19 13:23   ` Aditya Upadhyay
  2017-07-19 14:13   ` Craig Howland
  1 sibling, 0 replies; 18+ messages in thread
From: Aditya Upadhyay @ 2017-07-19 13:23 UTC (permalink / raw)
  To: newlib

Thanks Corinna for helping me to understand these stuff. I am making
the changes with this snippet.

Regards,
Aditya

On Wed, Jul 19, 2017 at 5:58 PM, Corinna Vinschen <vinschen@redhat.com> wrote:
> Hi Aditya,
>
> On Jul 19 03:09, Aditya Upadhyay wrote:
>> diff --git a/newlib/libc/stdlib/strtoimax.c b/newlib/libc/stdlib/strtoimax.c
>> new file mode 100644
>> index 000000000..0cb6e2acc
>> --- /dev/null
>> +++ b/newlib/libc/stdlib/strtoimax.c
>> @@ -0,0 +1,146 @@
>> [...]
>> +intmax_t
>> +strtoimax_l(struct _reent *rptr, const char * __restrict nptr, char ** __restrict endptr, int base,
>> +             locale_t loc)
>> +{
>
> This is not quite what you want.  strtoimax_l in BSD does not require a
> reent as first parameter.  By changing the function this way, you
> disallow to export the function in a BSD-compatible way.  Also keep in
> mind that it's always possible that the function name might become
> standarized (POSIX) at one point, just like the original GNU
> locale-specific functions got standarized.
>
> What you really want is to define a static function which takes the
> reent pointer and strtoimax_l/strtoimax only calling that, like this:
>
> --- snip ---
> static intmax_t
> _strtoimax_r(struct _reent *rptr, const char * __restrict nptr,
>              char ** __restrict endptr, int base, locale_t loc)
> {
>   [Add here all functionality you put into strtoimax_l]
> }
>
> intmax_t
> strtoimax_l(const char * __restrict nptr, char ** __restrict endptr, int base,
>              locale_t loc)
> {
>   return _strtoimax_r (_REENT, nptr, endptr, base, loc);
> }
>
> intmax_t
> strtoimax(const char * __restrict nptr, char ** __restrict endptr, int base)
> {
>   return _strtoimax_r (_REENT, nptr, endptr, base, __get_current_locale ());
> }
> --- snap ---
>
> Also, please keep the line length < 80 chars if possible.
>
>
> Thanks,
> Corinna
>
> --
> Corinna Vinschen
> Cygwin Maintainer
> Red Hat

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
  2017-07-18 21:40 Aditya Upadhyay
  2017-07-19  9:34 ` Sebastian Huber
@ 2017-07-19 12:28 ` Corinna Vinschen
  2017-07-19 13:23   ` Aditya Upadhyay
  2017-07-19 14:13   ` Craig Howland
  1 sibling, 2 replies; 18+ messages in thread
From: Corinna Vinschen @ 2017-07-19 12:28 UTC (permalink / raw)
  To: newlib

[-- Attachment #1: Type: text/plain, Size: 1676 bytes --]

Hi Aditya,

On Jul 19 03:09, Aditya Upadhyay wrote:
> diff --git a/newlib/libc/stdlib/strtoimax.c b/newlib/libc/stdlib/strtoimax.c
> new file mode 100644
> index 000000000..0cb6e2acc
> --- /dev/null
> +++ b/newlib/libc/stdlib/strtoimax.c
> @@ -0,0 +1,146 @@
> [...]
> +intmax_t
> +strtoimax_l(struct _reent *rptr, const char * __restrict nptr, char ** __restrict endptr, int base,
> +		locale_t loc)
> +{

This is not quite what you want.  strtoimax_l in BSD does not require a
reent as first parameter.  By changing the function this way, you
disallow to export the function in a BSD-compatible way.  Also keep in
mind that it's always possible that the function name might become
standarized (POSIX) at one point, just like the original GNU
locale-specific functions got standarized.

What you really want is to define a static function which takes the
reent pointer and strtoimax_l/strtoimax only calling that, like this:

--- snip ---
static intmax_t
_strtoimax_r(struct _reent *rptr, const char * __restrict nptr,
	     char ** __restrict endptr, int base, locale_t loc)
{
  [Add here all functionality you put into strtoimax_l]
}

intmax_t
strtoimax_l(const char * __restrict nptr, char ** __restrict endptr, int base,
             locale_t loc)
{
  return _strtoimax_r (_REENT, nptr, endptr, base, loc);
}

intmax_t
strtoimax(const char * __restrict nptr, char ** __restrict endptr, int base)
{
  return _strtoimax_r (_REENT, nptr, endptr, base, __get_current_locale ());
}
--- snap ---

Also, please keep the line length < 80 chars if possible.


Thanks,
Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
  2017-07-19 10:16   ` Aditya Upadhyay
@ 2017-07-19 10:58     ` Sebastian Huber
  0 siblings, 0 replies; 18+ messages in thread
From: Sebastian Huber @ 2017-07-19 10:58 UTC (permalink / raw)
  To: Aditya Upadhyay, newlib

On 19/07/17 12:16, Aditya Upadhyay wrote:

> Can you please point me some docs for SVN Checkout, so that i can
> configure the same in my system.

svn checkout https://svn.freebsd.org/base/head

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
  2017-07-19  9:34 ` Sebastian Huber
@ 2017-07-19 10:16   ` Aditya Upadhyay
  2017-07-19 10:58     ` Sebastian Huber
  0 siblings, 1 reply; 18+ messages in thread
From: Aditya Upadhyay @ 2017-07-19 10:16 UTC (permalink / raw)
  To: Sebastian Huber, newlib

Can you please point me some docs for SVN Checkout, so that i can
configure the same in my system.


Thanks & Regards,
Aditya Upadhyay

On Wed, Jul 19, 2017 at 3:04 PM, Sebastian Huber
<sebastian.huber@embedded-brains.de> wrote:
> Hello Aditya Upadhyay,
>
> for imports from FreeBSD, please use the SVN checkout and not the Git
> mirror. This way you get an expansion of the
>
> __FBSDID("$FreeBSD$");
>
> This makes it easier to figure out the origin of imported files.  It may
> help in case of future updates.
>
> --
> Sebastian Huber, embedded brains GmbH
>
> Address : Dornierstr. 4, D-82178 Puchheim, Germany
> Phone   : +49 89 189 47 41-16
> Fax     : +49 89 189 47 41-09
> E-Mail  : sebastian.huber@embedded-brains.de
> PGP     : Public key available on request.
>
> Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Importing inttypes methods from FreeBSD
  2017-07-18 21:40 Aditya Upadhyay
@ 2017-07-19  9:34 ` Sebastian Huber
  2017-07-19 10:16   ` Aditya Upadhyay
  2017-07-19 12:28 ` Corinna Vinschen
  1 sibling, 1 reply; 18+ messages in thread
From: Sebastian Huber @ 2017-07-19  9:34 UTC (permalink / raw)
  To: Aditya Upadhyay, newlib

Hello Aditya Upadhyay,

for imports from FreeBSD, please use the SVN checkout and not the Git 
mirror. This way you get an expansion of the

__FBSDID("$FreeBSD$");

This makes it easier to figure out the origin of imported files.  It may help in case of future updates.

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Importing inttypes methods from FreeBSD
@ 2017-07-18 21:40 Aditya Upadhyay
  2017-07-19  9:34 ` Sebastian Huber
  2017-07-19 12:28 ` Corinna Vinschen
  0 siblings, 2 replies; 18+ messages in thread
From: Aditya Upadhyay @ 2017-07-18 21:40 UTC (permalink / raw)
  To: newlib

[-- Attachment #1: Type: text/plain, Size: 313 bytes --]

Hello Developers,

I have imported these inttypes methods from FreeBSD. I have made the
strtoimax function as reentrant. I am requesting you to please review
the same and suggest me needed changes. I am porting rest of the
inttypes methods. I will send the same by late today.


Thanks & Regards,
Aditya Upadhyay

[-- Attachment #2: 0001-Importing-imaxabs-inttype-methods-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 2512 bytes --]

From 01214d25aea8e2501b493099468c764cda24ba3c Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Tue, 18 Jul 2017 23:19:58 +0530
Subject: [PATCH 1/3] Importing imaxabs inttype methods from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am |  1 +
 newlib/libc/stdlib/imaxabs.c   | 37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+)
 create mode 100644 newlib/libc/stdlib/imaxabs.c

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index ebae00ab0..117d7c495 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -33,6 +33,7 @@ GENERAL_SOURCES = \
 	getenv.c  	\
 	getenv_r.c	\
 	itoa.c          \
+	imaxabs.c	\
 	labs.c 		\
 	ldiv.c  	\
 	ldtoa.c		\
diff --git a/newlib/libc/stdlib/imaxabs.c b/newlib/libc/stdlib/imaxabs.c
new file mode 100644
index 000000000..0c76e0cbe
--- /dev/null
+++ b/newlib/libc/stdlib/imaxabs.c
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <stdint.h>
+#include <inttypes.h>
+
+intmax_t
+imaxabs(intmax_t j)
+{
+	return (j < 0 ? -j : j);
+}
-- 
2.11.0


[-- Attachment #3: 0002-Importing-imaxdiv-inttype-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 2824 bytes --]

From fb60d75a0402e3665079f22aaa3b40d7213c009b Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Tue, 18 Jul 2017 23:21:24 +0530
Subject: [PATCH 2/3] Importing imaxdiv inttype method from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am |  1 +
 newlib/libc/stdlib/imaxdiv.c   | 48 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+)
 create mode 100644 newlib/libc/stdlib/imaxdiv.c

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index 117d7c495..76a1a67e4 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -34,6 +34,7 @@ GENERAL_SOURCES = \
 	getenv_r.c	\
 	itoa.c          \
 	imaxabs.c	\
+	imaxdiv.c	\
 	labs.c 		\
 	ldiv.c  	\
 	ldtoa.c		\
diff --git a/newlib/libc/stdlib/imaxdiv.c b/newlib/libc/stdlib/imaxdiv.c
new file mode 100644
index 000000000..15d78baf4
--- /dev/null
+++ b/newlib/libc/stdlib/imaxdiv.c
@@ -0,0 +1,48 @@
+/*-
+ * Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <stdint.h>
+#include <inttypes.h>
+
+/* See comments in div.c for implementation details. */
+imaxdiv_t
+imaxdiv(intmax_t numer, intmax_t denom)
+{
+	imaxdiv_t retval;
+
+	retval.quot = numer / denom;
+	retval.rem = numer % denom;
+#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)
+	if (numer >= 0 && retval.rem < 0) {
+		retval.quot++;
+		retval.rem -= denom;
+	}
+#endif
+	return (retval);
+}
-- 
2.11.0


[-- Attachment #4: 0003-Importing-strtoimax-inttype-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 5822 bytes --]

From f17d999ebd54b796f20f0e7a97b6d79e2f234893 Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Tue, 18 Jul 2017 23:22:39 +0530
Subject: [PATCH 3/3] Importing strtoimax inttype method from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am |   1 +
 newlib/libc/stdlib/strtoimax.c | 146 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 147 insertions(+)
 create mode 100644 newlib/libc/stdlib/strtoimax.c

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index 76a1a67e4..6cca5f005 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -59,6 +59,7 @@ GENERAL_SOURCES = \
 	sb_charsets.c	\
 	strtod.c	\
 	strtodg.c	\
+	strtoimax.c	\
 	strtol.c	\
 	strtorx.c	\
 	strtoul.c	\
diff --git a/newlib/libc/stdlib/strtoimax.c b/newlib/libc/stdlib/strtoimax.c
new file mode 100644
index 000000000..0cb6e2acc
--- /dev/null
+++ b/newlib/libc/stdlib/strtoimax.c
@@ -0,0 +1,146 @@
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ * Portions of this software were developed by David Chisnall
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "from @(#)strtol.c	8.1 (Berkeley) 6/4/93";
+#endif /* LIBC_SCCS and not lint */
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <inttypes.h>
+#include <stdint.h>
+#include <reent.h>
+#include "../locale/setlocale.h"
+
+/*
+ * Convert a string to an intmax_t integer.
+ *
+ * Assumes that the upper and lower case
+ * alphabets and digits are each contiguous.
+ */
+intmax_t
+strtoimax_l(struct _reent *rptr, const char * __restrict nptr, char ** __restrict endptr, int base,
+		locale_t loc)
+{
+	const char *s = (const unsigned char *)nptr;
+	uintmax_t acc;
+	char c;
+	uintmax_t cutoff;
+	int neg = 0, any, cutlim;
+	
+	/*
+	 * Skip white space and pick up leading +/- sign if any.
+	 * If base is 0, allow 0x for hex and 0 for octal, else
+	 * assume decimal; if base is already 16, allow 0x.
+	 */
+	do {
+		c = *s++;
+	} while (isspace_l(c, loc));
+	if (c == '-') {
+		neg = 1;
+		c = *s++;
+	} else {
+		neg = 0;
+		if (c == '+')
+			c = *s++;
+	}
+	if ((base == 0 || base == 16) &&
+	    c == '0' && (*s == 'x' || *s == 'X')) {
+		c = s[1];
+		s += 2;
+		base = 16;
+	}
+	if (base == 0)
+		base = c == '0' ? 8 : 10;
+	
+	/*
+	 * Compute the cutoff value between legal numbers and illegal
+	 * numbers.  That is the largest legal value, divided by the
+	 * base.  An input number that is greater than this value, if
+	 * followed by a legal input character, is too big.  One that
+	 * is equal to this value may be valid or not; the limit
+	 * between valid and invalid numbers is then based on the last
+	 * digit.  For instance, if the range for intmax_t is
+	 * [-9223372036854775808..9223372036854775807] and the input base
+	 * is 10, cutoff will be set to 922337203685477580 and cutlim to
+	 * either 7 (neg==0) or 8 (neg==1), meaning that if we have
+	 * accumulated a value > 922337203685477580, or equal but the
+	 * next digit is > 7 (or 8), the number is too big, and we will
+	 * return a range error.
+	 *
+	 * Set 'any' if any `digits' consumed; make it negative to indicate
+	 * overflow.
+	 */
+	cutoff = neg ? -(uintmax_t)INTMAX_MIN : INTMAX_MAX;
+	cutlim = cutoff % base;
+	cutoff /= base;
+	for ( ; ; c = *s++) {
+		if (c >= '0' && c <= '9')
+			c -= '0';
+		else if (c >= 'A' && c <= 'Z')
+			c -= 'A' - 10;
+		else if (c >= 'a' && c <= 'z')
+			c -= 'a' - 10;
+		else
+			break;
+		if (c >= base)
+			break;
+		if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
+			any = -1;
+		else {
+			any = 1;
+			acc *= base;
+			acc += c;
+		}
+	}
+	if (any < 0) {
+		acc = neg ? INTMAX_MIN : INTMAX_MAX;
+		rptr->_errno = ERANGE;
+	} else if (!any) {
+noconv:
+		rptr->_errno = EINVAL;
+	} else if (neg)
+		acc = -acc;
+	if (endptr != NULL)
+		*endptr = (char *)(any ? s - 1 : nptr);
+	return (acc);
+}
+intmax_t
+strtoimax(const char * __restrict nptr, char ** __restrict endptr, int base)
+{
+	return strtoimax_l(_REENT, nptr, endptr, base, __get_current_locale ());
+}
-- 
2.11.0


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Importing inttypes methods from FreeBSD
@ 2017-07-11  6:01 Aditya Upadhyay
  0 siblings, 0 replies; 18+ messages in thread
From: Aditya Upadhyay @ 2017-07-11  6:01 UTC (permalink / raw)
  To: newlib

[-- Attachment #1: Type: text/plain, Size: 154 bytes --]

Hello Developers,

This is the patch for remaining methods from inttypes, ported from
FreeBSD. Please review the same.

Thanks & Regards,
Aditya Upadhyay

[-- Attachment #2: 0005-Importing-strtoumax-inttypes-methods-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 4819 bytes --]

From 07aecc37279b63103f2c2996a88cfc82dd822536 Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Tue, 11 Jul 2017 10:57:40 +0530
Subject: [PATCH 5/7] Importing strtoumax inttypes methods from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am |   1 +
 newlib/libc/stdlib/strtoumax.c | 128 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 129 insertions(+)
 create mode 100644 newlib/libc/stdlib/strtoumax.c

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index 0f05154..0ae91f8 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -63,6 +63,7 @@ GENERAL_SOURCES = \
 	strtol.c	\
 	strtorx.c	\
 	strtoul.c	\
+        strtoumax.c     \
 	utoa.c          \
 	wcstod.c	\
 	wcstol.c	\
diff --git a/newlib/libc/stdlib/strtoumax.c b/newlib/libc/stdlib/strtoumax.c
new file mode 100644
index 0000000..d203418
--- /dev/null
+++ b/newlib/libc/stdlib/strtoumax.c
@@ -0,0 +1,128 @@
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ * Portions of this software were developed by David Chisnall
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "from @(#)strtoul.c	8.1 (Berkeley) 6/4/93";
+#endif /* LIBC_SCCS and not lint */
+#include <ctype.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <inttypes.h>
+#include "xlocale_private.h"
+
+/*
+ * Convert a string to a uintmax_t integer.
+ *
+ * Assumes that the upper and lower case
+ * alphabets and digits are each contiguous.
+ */
+uintmax_t
+strtoumax_l(const char * __restrict nptr, char ** __restrict endptr, int base,
+		locale_t locale)
+{
+	const char *s;
+	uintmax_t acc;
+	char c;
+	uintmax_t cutoff;
+	int neg, any, cutlim;
+	FIX_LOCALE(locale);
+
+	/*
+	 * See strtoimax for comments as to the logic used.
+	 */
+	s = nptr;
+	do {
+		c = *s++;
+	} while (isspace_l((unsigned char)c, locale));
+	if (c == '-') {
+		neg = 1;
+		c = *s++;
+	} else {
+		neg = 0;
+		if (c == '+')
+			c = *s++;
+	}
+	if ((base == 0 || base == 16) &&
+	    c == '0' && (*s == 'x' || *s == 'X') &&
+	    ((s[1] >= '0' && s[1] <= '9') ||
+	    (s[1] >= 'A' && s[1] <= 'F') ||
+	    (s[1] >= 'a' && s[1] <= 'f'))) {
+		c = s[1];
+		s += 2;
+		base = 16;
+	}
+	if (base == 0)
+		base = c == '0' ? 8 : 10;
+	acc = any = 0;
+	if (base < 2 || base > 36)
+		goto noconv;
+
+	cutoff = UINTMAX_MAX / base;
+	cutlim = UINTMAX_MAX % base;
+	for ( ; ; c = *s++) {
+		if (c >= '0' && c <= '9')
+			c -= '0';
+		else if (c >= 'A' && c <= 'Z')
+			c -= 'A' - 10;
+		else if (c >= 'a' && c <= 'z')
+			c -= 'a' - 10;
+		else
+			break;
+		if (c >= base)
+			break;
+		if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
+			any = -1;
+		else {
+			any = 1;
+			acc *= base;
+			acc += c;
+		}
+	}
+	if (any < 0) {
+		acc = UINTMAX_MAX;
+		errno = ERANGE;
+	} else if (!any) {
+noconv:
+		errno = EINVAL;
+	} else if (neg)
+		acc = -acc;
+	if (endptr != NULL)
+		*endptr = (char *)(any ? s - 1 : nptr);
+	return (acc);
+}
+uintmax_t
+strtoumax(const char * __restrict nptr, char ** __restrict endptr, int base)
+{
+	return strtoumax_l(nptr, endptr, base, __get_locale());
+}
-- 
2.7.4


[-- Attachment #3: 0006-Importing-wcstoimax-inttypes-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 5022 bytes --]

From b20cccd905cc1812858396a49625bd674a77be2b Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Tue, 11 Jul 2017 11:23:38 +0530
Subject: [PATCH 6/7] Importing wcstoimax inttypes method from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am |   1 +
 newlib/libc/stdlib/wcstoimax.c | 137 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 138 insertions(+)
 create mode 100644 newlib/libc/stdlib/wcstoimax.c

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index 0ae91f8..0e4b209 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -66,6 +66,7 @@ GENERAL_SOURCES = \
         strtoumax.c     \
 	utoa.c          \
 	wcstod.c	\
+        wcstoimax.c     \
 	wcstol.c	\
 	wcstoul.c	\
 	wcstombs.c	\
diff --git a/newlib/libc/stdlib/wcstoimax.c b/newlib/libc/stdlib/wcstoimax.c
new file mode 100644
index 0000000..ce066a5
--- /dev/null
+++ b/newlib/libc/stdlib/wcstoimax.c
@@ -0,0 +1,137 @@
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ * Portions of this software were developed by David Chisnall
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#if 0
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "from @(#)strtol.c	8.1 (Berkeley) 6/4/93";
+#endif /* LIBC_SCCS and not lint */
+__FBSDID("FreeBSD: src/lib/libc/stdlib/strtoimax.c,v 1.8 2002/09/06 11:23:59 tjr Exp ");
+#endif
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <inttypes.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <wctype.h>
+#include "xlocale_private.h"
+
+/*
+ * Convert a wide character string to an intmax_t integer.
+ */
+intmax_t
+wcstoimax_l(const wchar_t * __restrict nptr, wchar_t ** __restrict endptr,
+    int base, locale_t locale)
+{
+	const wchar_t *s;
+	uintmax_t acc;
+	wchar_t c;
+	uintmax_t cutoff;
+	int neg, any, cutlim;
+	FIX_LOCALE(locale);
+
+	/*
+	 * See strtoimax for comments as to the logic used.
+	 */
+	s = nptr;
+	do {
+		c = *s++;
+	} while (iswspace_l(c, locale));
+	if (c == L'-') {
+		neg = 1;
+		c = *s++;
+	} else {
+		neg = 0;
+		if (c == L'+')
+			c = *s++;
+	}
+	if ((base == 0 || base == 16) &&
+	    c == L'0' && (*s == L'x' || *s == L'X')) {
+		c = s[1];
+		s += 2;
+		base = 16;
+	}
+	if (base == 0)
+		base = c == L'0' ? 8 : 10;
+	acc = any = 0;
+	if (base < 2 || base > 36)
+		goto noconv;
+
+	cutoff = neg ? (uintmax_t)-(INTMAX_MIN + INTMAX_MAX) + INTMAX_MAX
+	    : INTMAX_MAX;
+	cutlim = cutoff % base;
+	cutoff /= base;
+	for ( ; ; c = *s++) {
+#ifdef notyet
+		if (iswdigit_l(c, locale))
+			c = digittoint_l(c, locale);
+		else
+#endif
+		if (c >= L'0' && c <= L'9')
+			c -= L'0';
+		else if (c >= L'A' && c <= L'Z')
+			c -= L'A' - 10;
+		else if (c >= 'a' && c <= 'z')
+			c -= L'a' - 10;
+		else
+			break;
+		if (c >= base)
+			break;
+		if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
+			any = -1;
+		else {
+			any = 1;
+			acc *= base;
+			acc += c;
+		}
+	}
+	if (any < 0) {
+		acc = neg ? INTMAX_MIN : INTMAX_MAX;
+		errno = ERANGE;
+	} else if (!any) {
+noconv:
+		errno = EINVAL;
+	} else if (neg)
+		acc = -acc;
+	if (endptr != NULL)
+		*endptr = (wchar_t *)(any ? s - 1 : nptr);
+	return (acc);
+}
+intmax_t
+wcstoimax(const wchar_t * __restrict nptr, wchar_t ** __restrict endptr,
+    int base)
+{
+	return wcstoimax_l(nptr, endptr, base, __get_locale());
+}
-- 
2.7.4


[-- Attachment #4: 0007-Importing-wcstoumax-inttypes-method-from-FreeBSD.patch --]
[-- Type: text/x-patch, Size: 4936 bytes --]

From cb29e7b0615fb0ddb816ce9d0254164285f97a4b Mon Sep 17 00:00:00 2001
From: Aditya Upadhyay <aadit0402@gmail.com>
Date: Tue, 11 Jul 2017 11:25:17 +0530
Subject: [PATCH 7/7] Importing wcstoumax inttypes method from FreeBSD.

---
 newlib/libc/stdlib/Makefile.am |   1 +
 newlib/libc/stdlib/wcstoumax.c | 135 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 136 insertions(+)
 create mode 100644 newlib/libc/stdlib/wcstoumax.c

diff --git a/newlib/libc/stdlib/Makefile.am b/newlib/libc/stdlib/Makefile.am
index 0e4b209..36c9b72 100644
--- a/newlib/libc/stdlib/Makefile.am
+++ b/newlib/libc/stdlib/Makefile.am
@@ -69,6 +69,7 @@ GENERAL_SOURCES = \
         wcstoimax.c     \
 	wcstol.c	\
 	wcstoul.c	\
+        wcstoumax.c     \
 	wcstombs.c	\
 	wcstombs_r.c	\
 	wctomb.c	\
diff --git a/newlib/libc/stdlib/wcstoumax.c b/newlib/libc/stdlib/wcstoumax.c
new file mode 100644
index 0000000..397c1e3
--- /dev/null
+++ b/newlib/libc/stdlib/wcstoumax.c
@@ -0,0 +1,135 @@
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ * Portions of this software were developed by David Chisnall
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#if 0
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "from @(#)strtoul.c	8.1 (Berkeley) 6/4/93";
+#endif /* LIBC_SCCS and not lint */
+__FBSDID("FreeBSD: src/lib/libc/stdlib/strtoumax.c,v 1.8 2002/09/06 11:23:59 tjr Exp ");
+#endif
+__FBSDID("$FreeBSD$");
+
+#include <errno.h>
+#include <inttypes.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <wctype.h>
+#include "xlocale_private.h"
+
+/*
+ * Convert a wide character string to a uintmax_t integer.
+ */
+uintmax_t
+wcstoumax_l(const wchar_t * __restrict nptr, wchar_t ** __restrict endptr,
+    int base, locale_t locale)
+{
+	const wchar_t *s;
+	uintmax_t acc;
+	wchar_t c;
+	uintmax_t cutoff;
+	int neg, any, cutlim;
+	FIX_LOCALE(locale);
+
+	/*
+	 * See strtoimax for comments as to the logic used.
+	 */
+	s = nptr;
+	do {
+		c = *s++;
+	} while (iswspace_l(c, locale));
+	if (c == L'-') {
+		neg = 1;
+		c = *s++;
+	} else {
+		neg = 0;
+		if (c == L'+')
+			c = *s++;
+	}
+	if ((base == 0 || base == 16) &&
+	    c == L'0' && (*s == L'x' || *s == L'X')) {
+		c = s[1];
+		s += 2;
+		base = 16;
+	}
+	if (base == 0)
+		base = c == L'0' ? 8 : 10;
+	acc = any = 0;
+	if (base < 2 || base > 36)
+		goto noconv;
+
+	cutoff = UINTMAX_MAX / base;
+	cutlim = UINTMAX_MAX % base;
+	for ( ; ; c = *s++) {
+#ifdef notyet
+		if (iswdigit_l(c, locale))
+			c = digittoint_l(c, locale);
+		else
+#endif
+		if (c >= L'0' && c <= L'9')
+			c -= L'0';
+		else if (c >= L'A' && c <= L'Z')
+			c -= L'A' - 10;
+		else if (c >= L'a' && c <= L'z')
+			c -= L'a' - 10;
+		else
+			break;
+		if (c >= base)
+			break;
+		if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
+			any = -1;
+		else {
+			any = 1;
+			acc *= base;
+			acc += c;
+		}
+	}
+	if (any < 0) {
+		acc = UINTMAX_MAX;
+		errno = ERANGE;
+	} else if (!any) {
+noconv:
+		errno = EINVAL;
+	} else if (neg)
+		acc = -acc;
+	if (endptr != NULL)
+		*endptr = (wchar_t *)(any ? s - 1 : nptr);
+	return (acc);
+}
+uintmax_t
+wcstoumax(const wchar_t * __restrict nptr, wchar_t ** __restrict endptr,
+    int base)
+{
+	return wcstoumax_l(nptr, endptr, base, __get_locale());
+}
-- 
2.7.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2017-07-21 19:31 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-11  3:29 Importing inttypes methods from FreeBSD Aditya Upadhyay
2017-07-11  9:06 ` Corinna Vinschen
     [not found]   ` <CAMZxAxccBx9oDRiVE-mw5JEcKrLW4GKTdvg-dt+8bTHU=5j54w@mail.gmail.com>
2017-07-12  9:50     ` Aditya Upadhyay
2017-07-12 12:07       ` Corinna Vinschen
2017-07-11  6:01 Aditya Upadhyay
2017-07-18 21:40 Aditya Upadhyay
2017-07-19  9:34 ` Sebastian Huber
2017-07-19 10:16   ` Aditya Upadhyay
2017-07-19 10:58     ` Sebastian Huber
2017-07-19 12:28 ` Corinna Vinschen
2017-07-19 13:23   ` Aditya Upadhyay
2017-07-19 14:13   ` Craig Howland
2017-07-19 15:44     ` Corinna Vinschen
2017-07-19 17:00       ` Aditya Upadhyay
2017-07-20  8:25         ` Aditya Upadhyay
2017-07-20 14:37           ` Corinna Vinschen
2017-07-21 15:43             ` Gedare Bloom
2017-07-21 19:31               ` Corinna Vinschen

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 read-only IMAP folder(s) and NNTP newsgroup(s).