[2/2] fix compile errors for efgcvt.c

Message ID 20190723121548.20384-2-uchan0+newlib@gmail.com
State New
Headers show
Series
  • [1/2] fix conflicting types (wint_t)
Related show

Commit Message

Kota Uchida July 23, 2019, 12:15 p.m.
From: uchan-nos <uchan0@gmail.com>


---
 newlib/libc/stdlib/efgcvt.c | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

-- 
2.17.1

Comments

Corinna Vinschen July 24, 2019, 7:25 a.m. | #1
On Jul 23 21:15, uchan0+newlib@gmail.com wrote:
> From: uchan-nos <uchan0@gmail.com>

> 

> ---

>  newlib/libc/stdlib/efgcvt.c | 33 ++++++++++++++++++---------------

>  1 file changed, 18 insertions(+), 15 deletions(-)

> 

> diff --git a/newlib/libc/stdlib/efgcvt.c b/newlib/libc/stdlib/efgcvt.c

> index 9314bf361..3cdb9c420 100644

> --- a/newlib/libc/stdlib/efgcvt.c

> +++ b/newlib/libc/stdlib/efgcvt.c

> @@ -102,6 +102,9 @@ Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>,

>  #include <stdlib.h>

>  #include "local.h"

>  

> +char *	ecvtbuf (double, int, int*, int*, char *);

> +char *	fcvtbuf (double, int, int*, int*, char *);

> +

>  char *

>  fcvt (double d,

>  	int ndigit,

> @@ -121,6 +124,21 @@ fcvtf (float d,

>  }

>  

>  

> +char *

> +gcvt (double d,

> +	int ndigit,

> +	char *buf)

> +{

> +  char *tbuf = buf;

> +  if (d < 0) {

> +    *buf = '-';

> +    buf++;

> +    ndigit--;

> +  }

> +  return (_gcvt (_REENT, d, ndigit, buf, 'g', 0) ? tbuf : 0);

> +}

> +

> +

>  char *

>  gcvtf (float d,

>  	int ndigit,

> @@ -148,18 +166,3 @@ ecvtf (float d,

>  {

>    return ecvt ((double) d, ndigit, decpt, sign);

>  }

> -

> -

> -char *

> -gcvt (double d,

> -	int ndigit,

> -	char *buf)

> -{

> -  char *tbuf = buf;

> -  if (d < 0) {

> -    *buf = '-';

> -    buf++;

> -    ndigit--;

> -  }

> -  return (_gcvt (_REENT, d, ndigit, buf, 'g', 0) ? tbuf : 0);

> -}

> -- 

> 2.17.1


Why does your patch arbitrarily move the gcvt function?  There's
no functional change, so this move should not be part of the patch.


Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat
Kota Uchida July 24, 2019, 8:43 a.m. | #2
On Wed, Jul 24, 2019 at 4:25 PM Corinna Vinschen <vinschen@redhat.com> wrote:
> Why does your patch arbitrarily move the gcvt function?  There's

> no functional change, so this move should not be part of the patch.


The movement is the core of this patch.

When efgcvt.c is compiled under some specific conditions,
gcvt's function prototype is NOT provided by stdlib.h.
(Its prototype is gurded by macros)

If gcvt is below gcvtf, gcvt is implicitly declared as int
since gcvtf calls gcvt.
The implicit declaration is not compatible with its actual type.

So the possible options will be:
- To move gcvt above gcvtf, or
- To declare gcvt's prototype above gcvtf.

Should I choose 2nd option?
Corinna Vinschen July 24, 2019, 9:59 a.m. | #3
On Jul 24 17:43, Kota Uchida wrote:
> On Wed, Jul 24, 2019 at 4:25 PM Corinna Vinschen <vinschen@redhat.com> wrote:

> > Why does your patch arbitrarily move the gcvt function?  There's

> > no functional change, so this move should not be part of the patch.

> 

> The movement is the core of this patch.

> 

> When efgcvt.c is compiled under some specific conditions,

> gcvt's function prototype is NOT provided by stdlib.h.

> (Its prototype is gurded by macros)

> 

> If gcvt is below gcvtf, gcvt is implicitly declared as int

> since gcvtf calls gcvt.

> The implicit declaration is not compatible with its actual type.

> 

> So the possible options will be:

> - To move gcvt above gcvtf, or

> - To declare gcvt's prototype above gcvtf.

> 

> Should I choose 2nd option?


No, I pushed the patch.


Thanks,
Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

Patch

diff --git a/newlib/libc/stdlib/efgcvt.c b/newlib/libc/stdlib/efgcvt.c
index 9314bf361..3cdb9c420 100644
--- a/newlib/libc/stdlib/efgcvt.c
+++ b/newlib/libc/stdlib/efgcvt.c
@@ -102,6 +102,9 @@  Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>,
 #include <stdlib.h>
 #include "local.h"
 
+char *	ecvtbuf (double, int, int*, int*, char *);
+char *	fcvtbuf (double, int, int*, int*, char *);
+
 char *
 fcvt (double d,
 	int ndigit,
@@ -121,6 +124,21 @@  fcvtf (float d,
 }
 
 
+char *
+gcvt (double d,
+	int ndigit,
+	char *buf)
+{
+  char *tbuf = buf;
+  if (d < 0) {
+    *buf = '-';
+    buf++;
+    ndigit--;
+  }
+  return (_gcvt (_REENT, d, ndigit, buf, 'g', 0) ? tbuf : 0);
+}
+
+
 char *
 gcvtf (float d,
 	int ndigit,
@@ -148,18 +166,3 @@  ecvtf (float d,
 {
   return ecvt ((double) d, ndigit, decpt, sign);
 }
-
-
-char *
-gcvt (double d,
-	int ndigit,
-	char *buf)
-{
-  char *tbuf = buf;
-  if (d < 0) {
-    *buf = '-';
-    buf++;
-    ndigit--;
-  }
-  return (_gcvt (_REENT, d, ndigit, buf, 'g', 0) ? tbuf : 0);
-}