1290001Sglebius/* 2290001Sglebius * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") 3290001Sglebius * Copyright (C) 2000, 2001 Internet Software Consortium. 4290001Sglebius * 5290001Sglebius * Permission to use, copy, modify, and/or distribute this software for any 6290001Sglebius * purpose with or without fee is hereby granted, provided that the above 7290001Sglebius * copyright notice and this permission notice appear in all copies. 8290001Sglebius * 9290001Sglebius * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 10290001Sglebius * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 11290001Sglebius * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 12290001Sglebius * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13290001Sglebius * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 14290001Sglebius * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15290001Sglebius * PERFORMANCE OF THIS SOFTWARE. 16290001Sglebius */ 17290001Sglebius 18290001Sglebius/* $Id: stdio.c,v 1.6 2007/06/19 23:47:19 tbox Exp $ */ 19290001Sglebius 20290001Sglebius#include <config.h> 21290001Sglebius 22290001Sglebius#include <io.h> 23290001Sglebius#include <errno.h> 24290001Sglebius 25290001Sglebius#include <isc/stdio.h> 26290001Sglebius 27290001Sglebius#include "errno2result.h" 28290001Sglebius 29290001Sglebiusisc_result_t 30290001Sglebiusisc_stdio_open(const char *filename, const char *mode, FILE **fp) { 31290001Sglebius FILE *f; 32290001Sglebius 33290001Sglebius f = fopen(filename, mode); 34290001Sglebius if (f == NULL) 35290001Sglebius return (isc__errno2result(errno)); 36290001Sglebius *fp = f; 37290001Sglebius return (ISC_R_SUCCESS); 38290001Sglebius} 39290001Sglebius 40290001Sglebiusisc_result_t 41290001Sglebiusisc_stdio_close(FILE *f) { 42290001Sglebius int r; 43290001Sglebius 44290001Sglebius r = fclose(f); 45290001Sglebius if (r == 0) 46290001Sglebius return (ISC_R_SUCCESS); 47290001Sglebius else 48290001Sglebius return (isc__errno2result(errno)); 49290001Sglebius} 50290001Sglebius 51290001Sglebiusisc_result_t 52290001Sglebiusisc_stdio_seek(FILE *f, long offset, int whence) { 53290001Sglebius int r; 54290001Sglebius 55290001Sglebius r = fseek(f, offset, whence); 56290001Sglebius if (r == 0) 57290001Sglebius return (ISC_R_SUCCESS); 58290001Sglebius else 59290001Sglebius return (isc__errno2result(errno)); 60290001Sglebius} 61290001Sglebius 62290001Sglebiusisc_result_t 63290001Sglebiusisc_stdio_read(void *ptr, size_t size, size_t nmemb, FILE *f, size_t *nret) { 64290001Sglebius isc_result_t result = ISC_R_SUCCESS; 65290001Sglebius size_t r; 66290001Sglebius 67290001Sglebius clearerr(f); 68290001Sglebius r = fread(ptr, size, nmemb, f); 69290001Sglebius if (r != nmemb) { 70290001Sglebius if (feof(f)) 71290001Sglebius result = ISC_R_EOF; 72290001Sglebius else 73290001Sglebius result = isc__errno2result(errno); 74290001Sglebius } 75290001Sglebius if (nret != NULL) 76290001Sglebius *nret = r; 77290001Sglebius return (result); 78290001Sglebius} 79290001Sglebius 80290001Sglebiusisc_result_t 81290001Sglebiusisc_stdio_write(const void *ptr, size_t size, size_t nmemb, FILE *f, 82290001Sglebius size_t *nret) 83290001Sglebius{ 84290001Sglebius isc_result_t result = ISC_R_SUCCESS; 85290001Sglebius size_t r; 86290001Sglebius 87290001Sglebius clearerr(f); 88290001Sglebius r = fwrite(ptr, size, nmemb, f); 89290001Sglebius if (r != nmemb) 90290001Sglebius result = isc__errno2result(errno); 91290001Sglebius if (nret != NULL) 92290001Sglebius *nret = r; 93290001Sglebius return (result); 94290001Sglebius} 95290001Sglebius 96290001Sglebiusisc_result_t 97290001Sglebiusisc_stdio_flush(FILE *f) { 98290001Sglebius int r; 99290001Sglebius 100290001Sglebius r = fflush(f); 101290001Sglebius if (r == 0) 102290001Sglebius return (ISC_R_SUCCESS); 103290001Sglebius else 104290001Sglebius return (isc__errno2result(errno)); 105290001Sglebius} 106290001Sglebius 107290001Sglebiusisc_result_t 108290001Sglebiusisc_stdio_sync(FILE *f) { 109290001Sglebius int r; 110290001Sglebius 111290001Sglebius r = _commit(_fileno(f)); 112290001Sglebius if (r == 0) 113290001Sglebius return (ISC_R_SUCCESS); 114290001Sglebius else 115290001Sglebius return (isc__errno2result(errno)); 116290001Sglebius} 117290001Sglebius 118