1%% options 2 3copyright owner = Dirk Krause 4copyright year = 2015-xxxx 5SPDX-License-Identifier: BSD-3-Clause 6 7 8 9%% header 10 11/** @file dk4membf.h Save buffer data to file. 12*/ 13 14#ifndef DK4CONF_H_INCLUDED 15#if DK4_BUILDING_DKTOOLS4 16#include "dk4conf.h" 17#else 18#include <dktools-4/dk4conf.h> 19#endif 20#endif 21 22#ifndef STDIO_H_INCLUDED 23#include <stdio.h> 24#define STDIO_H_INCLUDED 1 25#endif 26 27#ifndef DK4MEMBUF_H_INCLUDED 28#if DK4_BUILDING_DKTOOLS4 29#include <libdk4c/dk4membuf.h> 30#else 31#include <dktools-4/dk4membuf.h> 32#endif 33#endif 34 35#ifdef __cplusplus 36extern "C" { 37#endif 38 39/** Save buffer contents to file. 40 @param fipo Output file. 41 @param mbptr Buffer containing data to write. 42 @param erp Error report, may be NULL. 43 @return 1 on success, 0 on error. 44 45 Error codes: 46 - DK4_E_INVALID_ARGUMENTS<br> 47 if fipo or mbptr is NULL, 48 - DK4_E_WRITE_FAILED<br> 49 if a write attempt to file failed. 50*/ 51int 52dk4membuf_to_file(FILE *fipo, dk4_membuf_t const *mbptr, dk4_er_t *erp); 53 54#ifdef __cplusplus 55} 56#endif 57 58 59 60%% module 61 62#include "dk4conf.h" 63#include <libdk4c/dk4membf.h> 64 65#if DK4_HAVE_ERRNO_H 66#ifndef ERRNO_H_INCLUDED 67#include <errno.h> 68#define ERRNO_H_INCLUDED 1 69#endif 70#endif 71 72#if DK4_HAVE_ASSERT_H 73#ifndef ASSERT_H_INCLUDED 74#include <assert.h> 75#define ASSERT_H_INCLUDED 1 76#endif 77#endif 78 79 80int 81dk4membuf_to_file(FILE *fipo, dk4_membuf_t const *mbptr, dk4_er_t *erp) 82{ 83 dk4_membuf_cell_t *pc = NULL; 84 dk4_membuf_cell_t *pn = NULL; 85 size_t wrb = 0; 86 int back = 0; 87 88#if DK4_USE_ASSERT 89 assert(NULL != fipo); 90 assert(NULL != mbptr); 91#endif 92 if ((NULL != fipo) && (NULL != mbptr)) { 93 back = 1; 94 pc = mbptr->first; 95 while (NULL != pc) { 96 pn = pc->next; 97 if (0 < pc->used) { 98 errno = 0; 99 wrb = fwrite(pc->buf, 1, pc->used, fipo); 100 if (wrb != pc->used) { 101 back = 0; 102 dk4error_set_idetails(erp, DK4_E_WRITE_FAILED, errno); 103 } 104 } 105 pc = pn; 106 } 107 } else { 108 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); 109 } 110 return back; 111} 112 113 114