2004-06-23 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / gpgme / io.h
1 /* io.h - Interface to the I/O functions.
2    Copyright (C) 2000 Werner Koch (dd9jn)
3    Copyright (C) 2001, 2002, 2003 g10 Code GmbH
4
5    This file is part of GPGME.
6  
7    GPGME is free software; you can redistribute it and/or modify it
8    under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11  
12    GPGME is distributed in the hope that it will be useful, but
13    WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    General Public License for more details.
16  
17    You should have received a copy of the GNU General Public License
18    along with GPGME; if not, write to the Free Software Foundation,
19    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20
21 #ifndef IO_H
22 #define IO_H
23
24 /* A single file descriptor passed to spawn.  For child fds, dup_to
25    specifies the fd it should become in the child.  */
26 struct spawn_fd_item_s
27 {
28   int fd;
29   int dup_to;
30 };
31
32 struct io_select_fd_s
33 {
34   int fd;
35   int for_read;
36   int for_write;
37   int signaled;
38   int frozen;
39   void *opaque;
40 };
41
42 /* These function are either defined in posix-io.c or w32-io.c.  */
43 void _gpgme_io_subsystem_init (void);
44 int _gpgme_io_read (int fd, void *buffer, size_t count);
45 int _gpgme_io_write (int fd, const void *buffer, size_t count);
46 int _gpgme_io_pipe (int filedes[2], int inherit_idx);
47 int _gpgme_io_close (int fd);
48 int _gpgme_io_set_close_notify (int fd, void (*handler) (int, void *),
49                                 void *value);
50 int _gpgme_io_set_nonblocking (int fd);
51
52 /* Spawn the executable PATH with ARGV as arguments, after forking
53    close all fds in FD_PARENT_LIST in the parent and close or dup all
54    fds in FD_CHILD_LIST in the child.  */
55 int _gpgme_io_spawn (const char *path, char **argv,
56                      struct spawn_fd_item_s *fd_child_list,
57                      struct spawn_fd_item_s *fd_parent_list);
58 int _gpgme_io_waitpid (int pid, int hang, int *r_status, int *r_signal);
59 int _gpgme_io_kill (int pid, int hard);
60 int _gpgme_io_select (struct io_select_fd_s *fds, size_t nfds, int nonblock);
61
62 #endif /* IO_H */
63
64
65