From 34c5ee4c2a489a506e93d5b303fbc80b263747f0 Mon Sep 17 00:00:00 2001 From: onefang Date: Thu, 27 Feb 2020 11:18:47 +1000 Subject: The new sledjchisl binary, to replace the management scripts and web stuff. --- src/toybox.h | 278 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 src/toybox.h (limited to 'src/toybox.h') diff --git a/src/toybox.h b/src/toybox.h new file mode 100644 index 0000000..1f64310 --- /dev/null +++ b/src/toybox.h @@ -0,0 +1,278 @@ + +#ifdef __GNUC__ +#define printf_format __attribute__((format(printf, 1, 2))) +#else +#define printf_format +#endif + +// General posix-2008 headers +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Posix networking + +#include +#include +#include +#include +#include +#include +#include +#include + +// Linux headers not listed by POSIX or LSB +#include +#ifdef __linux__ +#include +#include +#include +#endif + +#define WARN_ONLY (1<<31) + +// xwrap.c +//void xstrncpy(char *dest, char *src, size_t size); +//void xstrncat(char *dest, char *src, size_t size); +void _xexit(void) __attribute__((__noreturn__)); +void xexit(void) __attribute__((__noreturn__)); +//void *xmmap(void *addr, size_t length, int prot, int flags, int fd, off_t off); +void *xmalloc(size_t size); +void *xzalloc(size_t size); +void *xrealloc(void *ptr, size_t size); +char *xstrndup(char *s, size_t n); +char *xstrdup(char *s); +void *xmemdup(void *s, long len); +char *xmprintf(char *format, ...) printf_format; +//void xprintf(char *format, ...) printf_format; +//void xputsl(char *s, int len); +//void xputsn(char *s); +//void xputs(char *s); +//void xputc(char c); +void xflush(int flush); +//void xexec(char **argv); +//pid_t xpopen_setup(char **argv, int *pipes, void (*callback)(void)); +//pid_t xpopen_both(char **argv, int *pipes); +//int xwaitpid(pid_t pid); +//int xpclose_both(pid_t pid, int *pipes); +//pid_t xpopen(char **argv, int *pipe, int isstdout); +//pid_t xpclose(pid_t pid, int pipe); +//int xrun(char **argv); +//int xpspawn(char **argv, int*pipes); +//void xaccess(char *path, int flags); +//void xunlink(char *path); +//void xrename(char *from, char *to); +//int xtempfile(char *name, char **tempname); +//int xcreate(char *path, int flags, int mode); +int xopen(char *path, int flags); +int xcreate_stdio(char *path, int flags, int mode); +int xopen_stdio(char *path, int flags); +int openro(char *path, int flags); +int xopenro(char *path); +//void xpipe(int *pp); +void xclose(int fd); +int xdup(int fd); +int notstdio(int fd); +//FILE *xfdopen(int fd, char *mode); +//FILE *xfopen(char *path, char *mode); +//size_t xread(int fd, void *buf, size_t len); +//void xreadall(int fd, void *buf, size_t len); +//void xwrite(int fd, void *buf, size_t len); +//off_t xlseek(int fd, off_t offset, int whence); +//char *xreadfile(char *name, char *buf, off_t len); +//int xioctl(int fd, int request, void *data); +//char *xgetcwd(void); +//void xstat(char *path, struct stat *st); +//char *xabspath(char *path, int exact); +//void xchdir(char *path); +//void xchroot(char *path); +//struct passwd *xgetpwuid(uid_t uid); +//struct group *xgetgrgid(gid_t gid); +//struct passwd *xgetpwnam(char *name); +//struct group *xgetgrnam(char *name); +//unsigned xgetuid(char *name); +//unsigned xgetgid(char *name); +//void xsetuser(struct passwd *pwd); +//char *xreadlink(char *name); +//double xstrtod(char *s); +//long xparsetime(char *arg, long units, long *fraction); +//long long xparsemillitime(char *arg); +//void xpidfile(char *name); +void xregcomp(regex_t *preg, char *rexec, int cflags); +//char *xtzset(char *new); +//void xsignal_flags(int signal, void *handler, int flags); +//void xsignal(int signal, void *handler); +//time_t xvali_date(struct tm *tm, char *str); +//void xparsedate(char *str, time_t *t, unsigned *nano, int endian); +//char *xgetline(FILE *fp, int *len); + +// lib.c +void tb_verror_msg(char *msg, int err, va_list va); +void tb_error_msg(char *msg, ...) printf_format; +void tb_perror_msg(char *msg, ...) printf_format; +void tb_error_exit(char *msg, ...) printf_format __attribute__((__noreturn__)); +void tb_perror_exit(char *msg, ...) printf_format __attribute__((__noreturn__)); +//void help_exit(char *msg, ...) printf_format __attribute__((__noreturn__)); +void tb_error_msg_raw(char *msg); +void tb_perror_msg_raw(char *msg); +void tb_error_exit_raw(char *msg); +void tb_perror_exit_raw(char *msg); +//ssize_t readall(int fd, void *buf, size_t len); +//ssize_t writeall(int fd, void *buf, size_t len); +//off_t lskip(int fd, off_t offset); +//#define MKPATHAT_MKLAST 1 +//#define MKPATHAT_MAKE 2 +//#define MKPATHAT_VERBOSE 4 +//int mkpathat(int atfd, char *dir, mode_t lastmode, int flags); +//int mkpath(char *dir); +//struct string_list **splitpath(char *path, struct string_list **list); +//char *readfileat(int dirfd, char *name, char *buf, off_t *len); +//char *readfile(char *name, char *buf, off_t len); +void msleep(long milliseconds); +//void nanomove(struct timespec *ts, long long offset); +//long long nanodiff(struct timespec *old, struct timespec *new); +//int highest_bit(unsigned long l); +//int64_t peek_le(void *ptr, unsigned size); +//int64_t peek_be(void *ptr, unsigned size); +//int64_t peek(void *ptr, unsigned size); +//void poke_le(void *ptr, long long val, unsigned size); +//void poke_be(void *ptr, long long val, unsigned size); +//void poke(void *ptr, long long val, unsigned size); +//struct string_list *find_in_path(char *path, char *filename); +//long long estrtol(char *str, char **end, int base); +//long long xstrtol(char *str, char **end, int base); +//long long atolx(char *c); +//long long atolx_range(char *numstr, long long low, long long high); +//int stridx(char *haystack, char needle); +//int utf8towc(wchar_t *wc, char *str, unsigned len); +//char *strlower(char *s); +//char *strafter(char *haystack, char *needle); +//char *chomp(char *s); +//int unescape(char c); +//char *strend(char *str, char *suffix); +//int strstart(char **a, char *b); +//int strcasestart(char **a, char *b); +//off_t fdlength(int fd); +//void loopfiles_rw(char **argv, int flags, int permissions, +// void (*function)(int fd, char *name)); +//void loopfiles(char **argv, void (*function)(int fd, char *name)); +//void loopfiles_lines(char **argv, void (*function)(char **pline, long len)); +//long long sendfile_len(int in, int out, long long len, long long *consumed); +//long long xsendfile_len(int in, int out, long long len); +//void xsendfile_pad(int in, int out, long long len); +//long long xsendfile(int in, int out); +//int wfchmodat(int rc, char *name, mode_t mode); +//int copy_tempfile(int fdin, char *name, char **tempname); +//void delete_tempfile(int fdin, int fdout, char **tempname); +//void replace_tempfile(int fdin, int fdout, char **tempname); +//void crc_init(unsigned int *crc_table, int little_endian); +//void base64_init(char *p); +//int yesno(int def); +//int fyesno(FILE *fp, int def); +int qstrcmp(const void *a, const void *b); +//void tb_create_uuid(char *uuid); +//char *tb_show_uuid(char *uuid); +//char *next_printf(char *s, char **start); +//struct passwd *bufgetpwuid(uid_t uid); +//struct group *bufgetgrgid(gid_t gid); +//int readlinkat0(int dirfd, char *path, char *buf, int len); +//int readlink0(char *path, char *buf, int len); +//int regexec0(regex_t *preg, char *string, long len, int nmatch, +// regmatch_t pmatch[], int eflags); +//char *getusername(uid_t uid); +//char *getgroupname(gid_t gid); +//void do_lines(int fd, char delim, void (*call)(char **pline, long len)); +//long long millitime(void); +//char *format_iso_time(char *buf, size_t len, struct timespec *ts); +//void reset_env(struct passwd *p, int clear); +//void loggit(int priority, char *format, ...); +//unsigned tar_cksum(void *data); +//int is_tar_header(void *pkt); +//char *elf_arch_name(int type); + + +// pending.c +char *get_line(int fd); + + +// dirtree.c + +// Values returnable from callback function (bitfield, or them together) +// Default with no callback is 0 + +// Add this node to the tree +#define TB_DIRTREE_SAVE 1 +// Recurse into children +#define TB_DIRTREE_RECURSE 2 +// Call again after handling all children of this directory +// (Ignored for non-directories, sets linklen = -1 before second call.) +#define TB_DIRTREE_COMEAGAIN 4 +// Follow symlinks to directories +#define TB_DIRTREE_SYMFOLLOW 8 +// Don't warn about failure to stat +#define TB_DIRTREE_SHUTUP 16 +// Breadth first traversal, conserves filehandles at the expense of memory +#define TB_DIRTREE_BREADTH 32 +// skip non-numeric entries +#define TB_DIRTREE_PROC 64 +// Return files we can't stat +#define TB_DIRTREE_STATLESS 128 +// Don't look at any more files in this directory. +#define TB_DIRTREE_ABORT 256 + +#define TB_DIRTREE_ABORTVAL ((struct tb_dirtree *)1) + +struct tb_dirtree { + struct tb_dirtree *next, *parent, *child; + long extra; // place for user to store their stuff (can be pointer) + char *symlink; + int dirfd; + struct stat st; + char again; + char name[]; +}; + +int tb_isdotdot(char *name); +struct tb_dirtree *tb_dirtree_add_node(struct tb_dirtree *p, char *name, int flags); +char *tb_dirtree_path(struct tb_dirtree *node, int *plen); +int tb_dirtree_notdotdot(struct tb_dirtree *catch); +int tb_dirtree_parentfd(struct tb_dirtree *node); +int tb_dirtree_recurse(struct tb_dirtree *node, int (*callback)(struct tb_dirtree *node), + int dirfd, int symfollow); + +// Rob forget to do this, but at least he didn't declare it static. +struct tb_dirtree *tb_dirtree_handle_callback(struct tb_dirtree *new, int (*callback)(struct tb_dirtree *node)); +void tb_dirtree_free(struct tb_dirtree *new); + -- cgit v1.1