This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RFA: Fix PowerPC version of vfprintf.c


Hi Jeff,

  The PowerPC specific version of the vfprintf.c file needs a few
  fixes so that it will compile with the latest newlib sources.  The
  attached patch takes care of this.  Is it OK to apply ?

Cheers
  Nick

newlib/ChangeLog
2007-03-20  Nick Clifton  <nickc@redhat.com>

	Reflect changes made to generic vfprintf.c:
	* libc/machine/powerpc/vfprintf.c (__sprint): Rename to __sprint_r
	and add a "struct reent *" argument.
	(__sbprintf): Rename to __sbprintf_r, add a "struct reent *"
	argument and call _VFPRINTF_R instead of VFPRINTF.
	(_VFPRINTF_R): Add data pointer to call to cantwrite().
	Fix uses of __sprint() and __sbprintf.

Index: newlib/libc/machine/powerpc/vfprintf.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/machine/powerpc/vfprintf.c,v
retrieving revision 1.12
diff -c -3 -p -r1.12 vfprintf.c
*** newlib/libc/machine/powerpc/vfprintf.c	26 Sep 2006 21:22:19 -0000	1.12
--- newlib/libc/machine/powerpc/vfprintf.c	20 Mar 2007 15:40:57 -0000
*************** typedef union
*** 207,213 ****
   * then reset it so that it can be reused.
   */
  static int
! __sprint(fp, uio)
  	FILE *fp;
  	register struct __suio *uio;
  {
--- 207,214 ----
   * then reset it so that it can be reused.
   */
  static int
! __sprint_r(rptr, fp, uio)
! 	struct _reent *rptr;
  	FILE *fp;
  	register struct __suio *uio;
  {
*************** __sprint(fp, uio)
*** 217,223 ****
  		uio->uio_iovcnt = 0;
  		return (0);
  	}
! 	err = __sfvwrite(fp, uio);
  	uio->uio_resid = 0;
  	uio->uio_iovcnt = 0;
  	return (err);
--- 218,224 ----
  		uio->uio_iovcnt = 0;
  		return (0);
  	}
! 	err = __sfvwrite_r(rptr, fp, uio);
  	uio->uio_resid = 0;
  	uio->uio_iovcnt = 0;
  	return (err);
*************** __sprint(fp, uio)
*** 229,235 ****
   * worries about ungetc buffers and so forth.
   */
  static int
! __sbprintf(fp, fmt, ap)
  	register FILE *fp;
  	const char *fmt;
  	va_list ap;
--- 230,237 ----
   * worries about ungetc buffers and so forth.
   */
  static int
! __sbprintf_r(rptr, fp, fmt, ap)
! 	struct _reent *rptr;
  	register FILE *fp;
  	const char *fmt;
  	va_list ap;
*************** __sbprintf(fp, fmt, ap)
*** 250,256 ****
  	fake._lbfsize = 0;	/* not actually used, but Just In Case */
  
  	/* do the work, then copy any error status */
! 	ret = VFPRINTF(&fake, fmt, ap);
  	if (ret >= 0 && fflush(&fake))
  		ret = EOF;
  	if (fake._flags & __SERR)
--- 252,258 ----
  	fake._lbfsize = 0;	/* not actually used, but Just In Case */
  
  	/* do the work, then copy any error status */
! 	ret = _VFPRINTF_R(rptr, &fake, fmt, ap);
  	if (ret >= 0 && fflush(&fake))
  		ret = EOF;
  	if (fake._flags & __SERR)
*************** _DEFUN (_VFPRINTF_R, (data, fp, fmt0, ap
*** 410,416 ****
  	uio.uio_resid += (len); \
  	iovp++; \
  	if (++uio.uio_iovcnt >= NIOV) { \
! 		if (__sprint(fp, &uio)) \
  			goto error; \
  		iovp = iov; \
  	} \
--- 412,418 ----
  	uio.uio_resid += (len); \
  	iovp++; \
  	if (++uio.uio_iovcnt >= NIOV) { \
! 		if (__sprint_r(data, fp, &uio)) \
  			goto error; \
  		iovp = iov; \
  	} \
*************** _DEFUN (_VFPRINTF_R, (data, fp, fmt0, ap
*** 425,431 ****
  	} \
  }
  #define	FLUSH() { \
! 	if (uio.uio_resid && __sprint(fp, &uio)) \
  		goto error; \
  	uio.uio_iovcnt = 0; \
  	iovp = iov; \
--- 427,433 ----
  	} \
  }
  #define	FLUSH() { \
! 	if (uio.uio_resid && __sprint_r(data, fp, &uio)) \
  		goto error; \
  	uio.uio_iovcnt = 0; \
  	iovp = iov; \
*************** _DEFUN (_VFPRINTF_R, (data, fp, fmt0, ap
*** 520,532 ****
          memset (&state, '\0', sizeof (state));
  
  	/* sorry, fprintf(read_only_file, "") returns EOF, not 0 */
! 	if (cantwrite(fp))
  		return (EOF);
  
  	/* optimise fprintf(stderr) (and other unbuffered Unix files) */
  	if ((fp->_flags & (__SNBF|__SWR|__SRW)) == (__SNBF|__SWR) &&
  	    fp->_file >= 0)
! 		return (__sbprintf(fp, fmt0, ap));
  
  	fmt = (char *)fmt0;
  	uio.uio_iov = iovp = iov;
--- 522,536 ----
          memset (&state, '\0', sizeof (state));
  
  	/* sorry, fprintf(read_only_file, "") returns EOF, not 0 */
! 	if (cantwrite (data, fp)) {
! 		_funlockfile (fp);	
  		return (EOF);
+ 	}
  
  	/* optimise fprintf(stderr) (and other unbuffered Unix files) */
  	if ((fp->_flags & (__SNBF|__SWR|__SRW)) == (__SNBF|__SWR) &&
  	    fp->_file >= 0)
! 		return (__sbprintf_r(data, fp, fmt0, ap));
  
  	fmt = (char *)fmt0;
  	uio.uio_iov = iovp = iov;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]