Allow vfork()ing an external gunzip binary instead of using fork().
[project/opkg-lede.git] / libbb / libbb.h
1 /* vi: set sw=4 ts=4: */
2 /*
3 * Busybox main internal header file
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20 #ifndef __LIBBB_H__
21 #define __LIBBB_H__ 1
22
23 #include <stdio.h>
24 #include <stdarg.h>
25 #include <sys/stat.h>
26 #include <sys/types.h>
27 #include <stdlib.h>
28 #include <netdb.h>
29
30 #include "../libopkg/opkg_message.h"
31
32 #ifndef FALSE
33 #define FALSE ((int) 0)
34 #endif
35
36 #ifndef TRUE
37 #define TRUE ((int) 1)
38 #endif
39
40 #define error_msg(fmt, args...) opkg_msg(ERROR, fmt"\n", ##args)
41 #define perror_msg(fmt, args...) opkg_perror(ERROR, fmt, ##args)
42 #define error_msg_and_die(fmt, args...) \
43 do { \
44 error_msg(fmt, ##args); \
45 exit(EXIT_FAILURE); \
46 } while (0)
47 #define perror_msg_and_die(fmt, args...) \
48 do { \
49 perror_msg(fmt, ##args); \
50 exit(EXIT_FAILURE); \
51 } while (0)
52
53 extern void archive_xread_all(int fd, char *buf, size_t count);
54
55 const char *mode_string(int mode);
56 const char *time_string(time_t timeVal);
57
58 int copy_file(const char *source, const char *dest, int flags);
59 int copy_file_chunk(FILE *src_file, FILE *dst_file, unsigned long long chunksize);
60 ssize_t safe_read(int fd, void *buf, size_t count);
61 ssize_t full_read(int fd, char *buf, int len);
62
63 extern int parse_mode( const char* s, mode_t* theMode);
64
65 extern FILE *wfopen(const char *path, const char *mode);
66 extern FILE *xfopen(const char *path, const char *mode);
67
68 extern void *xmalloc (size_t size);
69 extern void *xrealloc(void *old, size_t size);
70 extern void *xcalloc(size_t nmemb, size_t size);
71 extern char *xstrdup (const char *s);
72 extern char *xstrndup (const char *s, int n);
73 extern char *safe_strncpy(char *dst, const char *src, size_t size);
74
75 char *xreadlink(const char *path);
76 char *concat_path_file(const char *path, const char *filename);
77 char *last_char_is(const char *s, int c);
78
79 typedef struct file_headers_s {
80 char *name;
81 char *link_name;
82 off_t size;
83 uid_t uid;
84 gid_t gid;
85 mode_t mode;
86 time_t mtime;
87 dev_t device;
88 } file_header_t;
89
90 enum extract_functions_e {
91 extract_verbose_list = 1,
92 extract_list = 2,
93 extract_one_to_buffer = 4,
94 extract_to_stream = 8,
95 extract_all_to_fs = 16,
96 extract_preserve_date = 32,
97 extract_data_tar_gz = 64,
98 extract_control_tar_gz = 128,
99 extract_unzip_only = 256,
100 extract_unconditional = 512,
101 extract_create_leading_dirs = 1024,
102 extract_quiet = 2048,
103 extract_exclude_list = 4096
104 };
105
106 char *deb_extract(const char *package_filename, FILE *out_stream,
107 const int extract_function, const char *prefix,
108 const char *filename, int *err);
109
110 extern int unzip(FILE *l_in_file, FILE *l_out_file);
111 extern int gz_close(int gunzip_pid);
112 extern FILE *gz_open(FILE *compressed_file, int *pid);
113
114 int make_directory (const char *path, long mode, int flags);
115
116 enum {
117 FILEUTILS_PRESERVE_STATUS = 1,
118 FILEUTILS_PRESERVE_SYMLINKS = 2,
119 FILEUTILS_RECUR = 4,
120 FILEUTILS_FORCE = 8,
121 };
122
123 #endif /* __LIBBB_H__ */