1 /* Copyright (c) 2006-2010 Jonas Fonseca <fonseca@diku.dk>
3 * This program is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU General Public License as
5 * published by the Free Software Foundation; either version 2 of
6 * the License, or (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
18 * Argument array helpers.
21 bool argv_from_string_no_quotes(const char *argv
[SIZEOF_ARG
], int *argc
, char *cmd
);
22 bool argv_from_string(const char *argv
[SIZEOF_ARG
], int *argc
, char *cmd
);
23 bool argv_from_env(const char **argv
, const char *name
);
24 void argv_free(const char *argv
[]);
25 size_t argv_size(const char **argv
);
26 bool argv_append(const char ***argv
, const char *arg
);
27 bool argv_append_array(const char ***dst_argv
, const char *src_argv
[]);
28 bool argv_copy(const char ***dst
, const char *src
[]);
31 * Executing external commands.
35 IO_FD
, /* File descriptor based IO. */
36 IO_BG
, /* Execute command in the background. */
37 IO_FG
, /* Execute command with same std{in,out,err}. */
38 IO_RD
, /* Read only fork+exec IO. */
39 IO_WR
, /* Write only fork+exec IO. */
40 IO_AP
, /* Append fork+exec output to file. */
44 int pipe
; /* Pipe end for reading or writing. */
45 pid_t pid
; /* PID of spawned process. */
46 int error
; /* Error status. */
47 char *buf
; /* Read buffer. */
48 size_t bufalloc
; /* Allocated buffer size. */
49 size_t bufsize
; /* Buffer content size. */
50 char *bufpos
; /* Current buffer position. */
51 unsigned int eof
:1; /* Has end of file been reached. */
54 typedef int (*io_read_fn
)(char *, size_t, char *, size_t, void *data
);
56 bool io_open(struct io
*io
, const char *fmt
, ...);
57 bool io_kill(struct io
*io
);
58 bool io_done(struct io
*io
);
59 bool io_run(struct io
*io
, enum io_type type
, const char *dir
, const char *argv
[], ...);
60 bool io_run_bg(const char **argv
);
61 bool io_run_fg(const char **argv
, const char *dir
);
62 bool io_run_append(const char **argv
, int fd
);
63 bool io_eof(struct io
*io
);
64 int io_error(struct io
*io
);
65 char * io_strerror(struct io
*io
);
66 bool io_can_read(struct io
*io
, bool can_block
);
67 ssize_t
io_read(struct io
*io
, void *buf
, size_t bufsize
);
68 char * io_get(struct io
*io
, int c
, bool can_read
);
69 bool io_write(struct io
*io
, const void *buf
, size_t bufsize
);
70 bool io_read_buf(struct io
*io
, char buf
[], size_t bufsize
);
71 bool io_run_buf(const char **argv
, char buf
[], size_t bufsize
);
72 int io_load(struct io
*io
, const char *separators
,
73 io_read_fn read_property
, void *data
);
74 int io_run_load(const char **argv
, const char *separators
,
75 io_read_fn read_property
, void *data
);