blob: c6226aae81c46265ceef7d69e11fe9173ae847d6 [file] [log] [blame]
landley4f344e32006-10-05 16:18:03 -04001/* vi: set ts=4 :*/
landley09ea7ac2006-10-30 01:38:00 -05002/* lib.h - header file for lib directory
3 *
4 * Copyright 2006 Rob Landley <rob@landley.net>
5 */
landley4f344e32006-10-05 16:18:03 -04006
Rob Landley1521a9e2006-11-25 16:06:55 -05007// libc generally has this, but the headers are screwed up
8ssize_t getline(char **lineptr, size_t *n, FILE *stream);
9
Rob Landley0a04b3e2006-11-03 00:05:52 -050010// llist.c
Rob Landley0a04b3e2006-11-03 00:05:52 -050011
12struct string_list {
13 struct string_list *next;
14 char str[0];
15};
16
Rob Landley8324b892006-11-19 02:49:22 -050017struct arg_list {
18 struct arg_list *next;
19 char *arg;
20};
21
Rob Landleybc078652007-12-15 21:47:25 -060022struct double_list {
23 struct double_list *next;
24 struct double_list *prev;
25 char *data;
26};
27
Rob Landley6ef04ef2008-01-20 17:34:53 -060028void llist_free(void *list, void (*freeit)(void *data));
29void *llist_pop(void *list); // actually void **list, but the compiler's dumb
Rob Landleybdf037f2008-10-23 16:44:30 -050030struct double_list *dlist_add(struct double_list **list, char *data);
Rob Landley6ef04ef2008-01-20 17:34:53 -060031
Rob Landley103b7e02007-10-04 02:04:10 -050032// args.c
33void get_optflags(void);
34
35// dirtree.c
Rob Landleyd25f7e42007-02-03 14:11:26 -050036struct dirtree {
Rob Landley720fc262007-02-04 19:14:58 -050037 struct dirtree *next, *child, *parent;
Rob Landleyd25f7e42007-02-03 14:11:26 -050038 struct stat st;
Rob Landley988abb32008-05-12 00:52:27 -050039 int depth;
Rob Landleyd25f7e42007-02-03 14:11:26 -050040 char name[];
41};
42
Rob Landley103b7e02007-10-04 02:04:10 -050043struct dirtree *dirtree_add_node(char *path);
44struct dirtree *dirtree_read(char *path, struct dirtree *parent,
Rob Landley7f184fa2008-02-21 04:44:42 -060045 int (*callback)(char *path, struct dirtree *node));
Rob Landley8324b892006-11-19 02:49:22 -050046
Rob Landley103b7e02007-10-04 02:04:10 -050047// lib.c
Rob Landleye15850a2007-11-19 01:51:00 -060048void xstrcpy(char *dest, char *src, size_t size);
landley09ea7ac2006-10-30 01:38:00 -050049void verror_msg(char *msg, int err, va_list va);
50void error_msg(char *msg, ...);
51void perror_msg(char *msg, ...);
Rob Landleyefa93b92007-11-15 21:12:24 -060052void error_exit(char *msg, ...) noreturn;
53void perror_exit(char *msg, ...) noreturn;
landley4f344e32006-10-05 16:18:03 -040054void *xmalloc(size_t size);
landleycd9dfc32006-10-18 18:38:16 -040055void *xzalloc(size_t size);
Rob Landley0c93f6c2007-04-29 19:55:21 -040056void *xrealloc(void *ptr, size_t size);
Rob Landley1e01cd12010-01-05 10:48:32 -060057char *xstrndup(char *s, size_t n);
58char *xstrdup(char *s);
landley00f87f12006-10-25 18:38:37 -040059char *xmsprintf(char *format, ...);
Rob Landley24d1d452007-01-20 18:04:20 -050060void xprintf(char *format, ...);
Rob Landley5084fea2007-06-18 00:14:03 -040061void xputs(char *s);
Rob Landley24d1d452007-01-20 18:04:20 -050062void xputc(char c);
63void xflush(void);
landley09ea7ac2006-10-30 01:38:00 -050064void xexec(char **argv);
Rob Landleyd3e9d642007-01-08 03:25:47 -050065void xaccess(char *path, int flags);
Rob Landleye745d8e2007-12-20 06:30:19 -060066void xunlink(char *path);
Rob Landley1322beb2007-01-07 22:51:12 -050067int xcreate(char *path, int flags, int mode);
68int xopen(char *path, int flags);
Rob Landleybc078652007-12-15 21:47:25 -060069void xclose(int fd);
landley4f344e32006-10-05 16:18:03 -040070FILE *xfopen(char *path, char *mode);
Rob Landley90163772007-01-18 21:54:08 -050071ssize_t readall(int fd, void *buf, size_t len);
72ssize_t writeall(int fd, void *buf, size_t len);
73size_t xread(int fd, void *buf, size_t len);
74void xreadall(int fd, void *buf, size_t len);
75void xwrite(int fd, void *buf, size_t len);
Rob Landley52476712009-01-18 16:19:25 -060076off_t xlseek(int fd, off_t offset, int whence);
Rob Landleye824ed12008-07-18 08:43:18 -050077char *readfile(char *name);
78char *xreadfile(char *name);
landley00f87f12006-10-25 18:38:37 -040079char *xgetcwd(void);
Rob Landleyd25f7e42007-02-03 14:11:26 -050080void xstat(char *path, struct stat *st);
Rob Landleyfa98d012006-11-02 02:57:27 -050081char *xabspath(char *path);
Rob Landley988abb32008-05-12 00:52:27 -050082void xchdir(char *path);
Rob Landley35483412007-12-27 21:36:33 -060083void xmkpath(char *path, int mode);
Rob Landley0a04b3e2006-11-03 00:05:52 -050084struct string_list *find_in_path(char *path, char *filename);
landley09ea7ac2006-10-30 01:38:00 -050085void utoa_to_buf(unsigned n, char *buf, unsigned buflen);
86void itoa_to_buf(int n, char *buf, unsigned buflen);
87char *utoa(unsigned n);
88char *itoa(int n);
Rob Landleyf5757162007-02-16 21:08:22 -050089long atolx(char *c);
Rob Landleye2580db2007-01-23 13:20:38 -050090off_t fdlength(int fd);
Rob Landley0c93f6c2007-04-29 19:55:21 -040091char *xreadlink(char *name);
Rob Landley2bfaaf22008-07-03 19:19:00 -050092void loopfiles_rw(char **argv, int flags, void (*function)(int fd, char *name));
Rob Landley7634b552007-11-29 17:49:50 -060093void loopfiles(char **argv, void (*function)(int fd, char *name));
Rob Landley3fc4e0f2008-04-13 00:29:00 -050094char *get_rawline(int fd, long *plen, char end);
Rob Landleybc078652007-12-15 21:47:25 -060095char *get_line(int fd);
96void xsendfile(int in, int out);
Rob Landley42ecbab2007-12-18 02:02:21 -060097int copy_tempfile(int fdin, char *name, char **tempname);
98void delete_tempfile(int fdin, int fdout, char **tempname);
99void replace_tempfile(int fdin, int fdout, char **tempname);
Rob Landleyb15b8fa2009-01-05 01:05:43 -0600100void crc_init(unsigned int *crc_table, int little_endian);
landley4f344e32006-10-05 16:18:03 -0400101
landleycd9dfc32006-10-18 18:38:16 -0400102// getmountlist.c
landley4f344e32006-10-05 16:18:03 -0400103struct mtab_list {
104 struct mtab_list *next;
landley09ea7ac2006-10-30 01:38:00 -0500105 struct stat stat;
106 struct statvfs statvfs;
landley4f344e32006-10-05 16:18:03 -0400107 char *dir;
108 char *device;
109 char type[0];
110};
111
112struct mtab_list *getmountlist(int die);
113
Rob Landley6000f132007-01-18 22:00:12 -0500114void bunzipStream(int src_fd, int dst_fd);