/* Public domain */ /* * Serialization of floating-point numbers. */ #ifndef _LIBPERCGI_LOAD_REAL_H_ #define _LIBPERCGI_LOAD_REAL_H_ #include #include __BEGIN_DECLS /* * single-precision floats */ static __inline__ float SYS_ReadFloat(int fd) { float f; if (SYS_Read(fd, &f, sizeof(f)) != 0) { CGI_Exit(CGI_EX_IOERR, NULL); } return CGI_SwapLEFLT(f); } static __inline__ int SYS_ReadFloatv(int fd, float *fv) { float f; if (SYS_Read(fd, &f, sizeof(f)) != 0) { return (-1); } *fv = CGI_SwapLEFLT(f); return (0); } static __inline__ void SYS_WriteFloat(int fd, float fv) { float f = CGI_SwapLEFLT(fv); if (SYS_Write(fd, &f, sizeof(f)) != 0) CGI_Exit(CGI_EX_IOERR, NULL); } static __inline__ int SYS_WriteFloatv(int fd, float *fv) { float f = CGI_SwapLEFLT(*fv); return SYS_Write(fd, &f, sizeof(f)); } /* * double-precision floats */ static __inline__ double SYS_ReadDouble(int fd) { double f; if (SYS_Read(fd, &f, sizeof(f)) != 0) { CGI_Exit(CGI_EX_IOERR, NULL); } return CGI_SwapLEDBL(f); } static __inline__ int SYS_ReadDoublev(int fd, double *fv) { double f; if (SYS_Read(fd, &f, sizeof(f)) != 0) { return (-1); } *fv = CGI_SwapLEDBL(f); return (0); } static __inline__ void SYS_WriteDouble(int fd, double fv) { double f = CGI_SwapLEDBL(fv); if (SYS_Write(fd, &f, sizeof(f)) != 0) CGI_Exit(CGI_EX_IOERR, NULL); } static __inline__ int SYS_WriteDoublev(int fd, double *fv) { double f = CGI_SwapLEDBL(*fv); return SYS_Write(fd, &f, sizeof(f)); } #ifdef HAVE_LONG_DOUBLE /* * quad-precision floats */ static __inline__ long double SYS_ReadLongDouble(int fd) { long double f; if (SYS_Read(fd, &f, sizeof(f)) != 0) { CGI_Exit(CGI_EX_IOERR, NULL); } return CGI_SwapLELDBL(f); } static __inline__ int SYS_ReadLongDoublev(int fd, long double *fv) { long double f; if (SYS_Read(fd, &f, sizeof(f)) != 0) { return (-1); } *fv = CGI_SwapLELDBL(f); return (0); } static __inline__ void SYS_WriteLongDouble(int fd, long double fv) { long double f = CGI_SwapLELDBL(fv); if (SYS_Write(fd, &f, sizeof(f)) != 0) CGI_Exit(CGI_EX_IOERR, NULL); } static __inline__ int SYS_WriteLongDoublev(int fd, long double *fv) { long double f = CGI_SwapLELDBL(*fv); return SYS_Write(fd, &f, sizeof(f)); } #endif /* HAVE_LONG_DOUBLE */ __END_DECLS #endif /* _LIBPERCGI_LOAD_REAL_H_ */