Blame src/funopen.c

Packit Service cbd1e2
/* funopen.c - Replacement for funopen.
Packit Service cbd1e2
 * Copyright (C) 2003, 2005 Free Software Foundation, Inc.
Packit Service cbd1e2
 *
Packit Service cbd1e2
 * This file is part of Assuan.
Packit Service cbd1e2
 *
Packit Service cbd1e2
 * Assuan is free software; you can redistribute it and/or modify it
Packit Service cbd1e2
 * under the terms of the GNU Lesser General Public License as
Packit Service cbd1e2
 * published by the Free Software Foundation; either version 2.1 of
Packit Service cbd1e2
 * the License, or (at your option) any later version.
Packit Service cbd1e2
 *
Packit Service cbd1e2
 * Assuan is distributed in the hope that it will be useful, but
Packit Service cbd1e2
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service cbd1e2
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service cbd1e2
 * Lesser General Public License for more details.
Packit Service cbd1e2
 *
Packit Service cbd1e2
 * You should have received a copy of the GNU Lesser General Public
Packit Service cbd1e2
 * License along with this program; if not, see <http://www.gnu.org/licenses/>.
Packit Service cbd1e2
 * SPDX-License-Identifier: LGPL-2.1+
Packit Service cbd1e2
 */
Packit Service cbd1e2
Packit Service cbd1e2
#ifdef HAVE_CONFIG_H
Packit Service cbd1e2
#include <config.h>
Packit Service cbd1e2
#endif
Packit Service cbd1e2
Packit Service cbd1e2
#include <stdio.h>
Packit Service cbd1e2
Packit Service cbd1e2
Packit Service cbd1e2
/* Replacement for the *BSD function:
Packit Service cbd1e2
Packit Service cbd1e2
  FILE *funopen (void *cookie,
Packit Service cbd1e2
                 int (*readfn)(void *, char *, int),
Packit Service cbd1e2
                 int (*writefn)(void *, const char *, int),
Packit Service cbd1e2
                 fpos_t (*seekfn)(void *, fpos_t, int),
Packit Service cbd1e2
                 int (*closefn)(void *));
Packit Service cbd1e2
Packit Service cbd1e2
  The functions to provide my either be NULL if not required or
Packit Service cbd1e2
  similar to the unistd function with the exception of using the
Packit Service cbd1e2
  cookie instead of the file descriptor.
Packit Service cbd1e2
*/
Packit Service cbd1e2
Packit Service cbd1e2
Packit Service cbd1e2
#ifdef HAVE_FOPENCOOKIE
Packit Service cbd1e2
FILE *
Packit Service cbd1e2
_assuan_funopen(void *cookie,
Packit Service cbd1e2
                cookie_read_function_t *readfn,
Packit Service cbd1e2
                cookie_write_function_t *writefn,
Packit Service cbd1e2
                cookie_seek_function_t *seekfn,
Packit Service cbd1e2
                cookie_close_function_t *closefn)
Packit Service cbd1e2
{
Packit Service cbd1e2
  cookie_io_functions_t io;
Packit Service cbd1e2
Packit Service cbd1e2
  io.read = readfn;
Packit Service cbd1e2
  io.write = writefn;
Packit Service cbd1e2
  io.seek = seekfn;
Packit Service cbd1e2
  io.close = closefn;
Packit Service cbd1e2
Packit Service cbd1e2
  return fopencookie (cookie,
Packit Service cbd1e2
		      readfn ? ( writefn ? "rw" : "r" )
Packit Service cbd1e2
		      : ( writefn ? "w" : ""), io);
Packit Service cbd1e2
}
Packit Service cbd1e2
#else
Packit Service cbd1e2
#error No known way to implement funopen.
Packit Service cbd1e2
#endif