Only set LINES and COLUMNS environment variables for external commands
[tig.git] / io.h
blob270c7cb91dd4361fab89f6a5ffaf58d3bfb84f45
1 /* Copyright (c) 2006-2013 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.
14 #ifndef TIG_IO_H
15 #define TIG_IO_H
17 #include "tig.h"
20 * Argument array helpers.
23 bool argv_to_string(const char *argv[SIZEOF_ARG], char *buf, size_t buflen, const char *sep);
24 bool argv_from_string_no_quotes(const char *argv[SIZEOF_ARG], int *argc, char *cmd);
25 bool argv_from_string(const char *argv[SIZEOF_ARG], int *argc, char *cmd);
26 bool argv_from_env(const char **argv, const char *name);
27 void argv_free(const char *argv[]);
28 size_t argv_size(const char **argv);
29 bool argv_append(const char ***argv, const char *arg);
30 bool argv_append_array(const char ***dst_argv, const char *src_argv[]);
31 bool argv_copy(const char ***dst, const char *src[]);
32 bool argv_remove_quotes(const char *argv[]);
35 * Encoding conversion.
38 struct encoding;
40 struct encoding *encoding_open(const char *fromcode);
41 char *encoding_convert(struct encoding *encoding, char *line);
44 * Executing external commands.
47 enum io_type {
48 IO_FD, /* File descriptor based IO. */
49 IO_BG, /* Execute command in the background. */
50 IO_FG, /* Execute command with same std{in,out,err}. */
51 IO_RD, /* Read only fork+exec IO. */
52 IO_RD_STDIN, /* Read only fork+exec IO with stdin. */
53 IO_WR, /* Write only fork+exec IO. */
54 IO_AP, /* Append fork+exec output to file. */
57 struct io {
58 int pipe; /* Pipe end for reading or writing. */
59 pid_t pid; /* PID of spawned process. */
60 int error; /* Error status. */
61 char *buf; /* Read buffer. */
62 size_t bufalloc; /* Allocated buffer size. */
63 size_t bufsize; /* Buffer content size. */
64 char *bufpos; /* Current buffer position. */
65 unsigned int eof:1; /* Has end of file been reached. */
66 int status:8; /* Status exit code. */
69 typedef int (*io_read_fn)(char *, size_t, char *, size_t, void *data);
71 bool io_open(struct io *io, const char *fmt, ...) PRINTF_LIKE(2, 3);
72 bool io_kill(struct io *io);
73 bool io_done(struct io *io);
74 bool io_run(struct io *io, enum io_type type, const char *dir, char * const env[], const char *argv[], ...);
75 bool io_run_bg(const char **argv);
76 bool io_run_fg(const char **argv, const char *dir);
77 bool io_run_append(const char **argv, int fd);
78 bool io_eof(struct io *io);
79 int io_error(struct io *io);
80 char * io_strerror(struct io *io);
81 bool io_can_read(struct io *io, bool can_block);
82 ssize_t io_read(struct io *io, void *buf, size_t bufsize);
83 char * io_get(struct io *io, int c, bool can_read);
84 bool io_write(struct io *io, const void *buf, size_t bufsize);
85 bool io_printf(struct io *io, const char *fmt, ...) PRINTF_LIKE(2, 3);
86 bool io_read_buf(struct io *io, char buf[], size_t bufsize);
87 bool io_run_buf(const char **argv, char buf[], size_t bufsize);
88 int io_load(struct io *io, const char *separators,
89 io_read_fn read_property, void *data);
90 int io_run_load(const char **argv, const char *separators,
91 io_read_fn read_property, void *data);
93 #endif
95 /* vim: set ts=8 sw=8 noexpandtab: */