| struct log_data { |
| char *t, *p; |
| |
| int pri; |
| }; |
| |
| struct dmesg_data { |
| long n, s; |
| |
| int use_color; |
| time_t tea; |
| }; |
| |
| struct gzip_data { |
| int level; |
| }; |
| |
| struct hostname_data { |
| char *F; |
| }; |
| |
| struct killall_data { |
| char *s; |
| |
| int signum; |
| pid_t cur_pid; |
| char **names; |
| short *err; |
| struct int_list { struct int_list *next; int val; } *pids; |
| }; |
| |
| struct md5sum_data { |
| int sawline; |
| }; |
| |
| struct mknod_data { |
| char *Z, *m; |
| }; |
| |
| struct mktemp_data { |
| char *p, *tmpdir; |
| }; |
| |
| struct mount_data { |
| struct arg_list *o; |
| char *t, *O; |
| |
| unsigned long flags; |
| char *opts; |
| int okuser; |
| }; |
| |
| struct pidof_data { |
| char *o; |
| }; |
| |
| struct seq_data { |
| char *s, *f; |
| |
| int precision, buflen; |
| }; |
| |
| struct umount_data { |
| struct arg_list *t; |
| |
| char *types; |
| }; |
| |
| struct ifconfig_data { |
| int sockfd; |
| }; |
| |
| struct microcom_data { |
| long s; |
| |
| int fd, stok; |
| struct termios old_stdin, old_fd; |
| }; |
| |
| struct netcat_data { |
| char *f, *s; |
| long q, p, W, w; |
| }; |
| |
| struct netstat_data { |
| struct num_cache *inodes; |
| int wpad; |
| }; |
| |
| struct ping_data { |
| char *I; |
| long w, W, i, s, c, t, m; |
| |
| struct sockaddr *sa; |
| int sock; |
| unsigned long sent, recv, fugit, min, max; |
| }; |
| |
| struct tunctl_data { |
| char *u; |
| }; |
| |
| struct base64_data { |
| long w; |
| |
| unsigned total; |
| unsigned n; // number of bits used in encoding. 5 for base32, 6 for base64 |
| unsigned align; // number of bits to align to |
| }; |
| |
| struct blkdiscard_data { |
| long o, l; |
| }; |
| |
| struct blkid_data { |
| struct arg_list *s; |
| char *o; |
| }; |
| |
| struct blockdev_data { |
| long setbsz, setra; |
| }; |
| |
| struct chrt_data { |
| long p; |
| }; |
| |
| struct dos2unix_data { |
| char *tempfile; |
| }; |
| |
| struct fallocate_data { |
| long o, l; |
| }; |
| |
| struct fmt_data { |
| long width; |
| |
| int level, pos; |
| }; |
| |
| struct free_data { |
| unsigned bits; |
| unsigned long long units; |
| char *buf; |
| }; |
| |
| struct getopt_data { |
| struct arg_list *l; |
| char *o, *n; |
| }; |
| |
| struct gpiodetect_data { |
| struct double_list *chips; |
| int chip_count; |
| }; |
| |
| struct hwclock_data { |
| char *f; |
| }; |
| |
| struct i2cdetect_data { |
| long F; |
| }; |
| |
| struct ionice_data { |
| long p, n, c; |
| }; |
| |
| struct losetup_data { |
| char *j; |
| long o, S; |
| |
| int openflags; |
| dev_t jdev; |
| ino_t jino; |
| char *dir; |
| }; |
| |
| struct lsattr_data { |
| long v, p; |
| |
| unsigned add, rm, set; |
| // !add and !rm tell us whether they were used, but `chattr =` is meaningful. |
| int have_set; |
| }; |
| |
| struct lsusb_data { |
| char *i; |
| long x, n; |
| |
| void *ids, *class; |
| int count; |
| }; |
| |
| struct makedevs_data { |
| char *d; |
| }; |
| |
| struct mkswap_data { |
| char *L; |
| }; |
| |
| struct modinfo_data { |
| char *F, *k, *b; |
| |
| long mod; |
| int count; |
| }; |
| |
| struct nbd_client_data { |
| long b; |
| |
| int nbd; |
| }; |
| |
| struct nsenter_data { |
| char *UupnmiC[7]; |
| long t; |
| }; |
| |
| struct readelf_data { |
| char *x, *p; |
| |
| char *elf, *shstrtab, *f; |
| unsigned long long shoff, phoff, size, shstrtabsz; |
| int bits, endian, shnum, shentsize, phentsize; |
| }; |
| |
| struct realpath_data { |
| char *R, *relative_base; |
| }; |
| |
| struct rtcwake_data { |
| long t, s; |
| char *m, *d; |
| }; |
| |
| struct setfattr_data { |
| char *x, *v, *n; |
| }; |
| |
| struct setsid_data { |
| long c; |
| }; |
| |
| struct stat_data { |
| char *c; |
| |
| union { |
| struct stat st; |
| struct statfs sf; |
| } stat; |
| char *file, *pattern; |
| int patlen; |
| }; |
| |
| struct swapon_data { |
| long p; |
| }; |
| |
| struct tac_data { |
| struct double_list *dl; |
| }; |
| |
| struct timeout_data { |
| char *s, *k; |
| |
| struct pollfd pfd; |
| sigjmp_buf sj; |
| int fds[2], pid, rc; |
| }; |
| |
| struct truncate_data { |
| char *s; |
| |
| long long size; |
| int type; |
| }; |
| |
| struct uclampset_data { |
| long M, m, p; |
| }; |
| |
| struct watch_data { |
| int n; |
| |
| pid_t pid, oldpid; |
| }; |
| |
| struct xxd_data { |
| long s, g, o, l, c; |
| }; |
| |
| struct brctl_data { |
| int sockfd; |
| }; |
| |
| struct diff_data { |
| long U; |
| struct arg_list *L; |
| char *F, *S, *new_line_format, *old_line_format, *unchanged_line_format; |
| |
| int dir_num, size, is_binary, differ, change, len[2], *offset[2]; |
| struct stat st[2]; |
| struct { |
| char **list; |
| int nr_elm; |
| } dir[2]; |
| struct { |
| FILE *fp; |
| int len; |
| } file[2]; |
| }; |
| |
| struct expr_data { |
| char **tok, *delete; |
| }; |
| |
| struct getfattr_data { |
| char *n; |
| }; |
| |
| struct lsof_data { |
| struct arg_list *p; |
| |
| struct stat *sought_files; |
| struct double_list *all_sockets, *files; |
| int last_shown_pid, shown_header; |
| }; |
| |
| struct modprobe_data { |
| struct arg_list *dirs; |
| |
| struct arg_list *probes, *dbase[256]; |
| char *cmdopts; |
| int nudeps, symreq; |
| }; |
| |
| struct more_data { |
| struct termios inf; |
| int cin_fd; |
| }; |
| |
| struct stty_data { |
| char *F; |
| |
| int fd, col; |
| unsigned output_cols; |
| }; |
| |
| struct tr_data { |
| short *map; |
| int len1, len2; |
| }; |
| |
| struct traceroute_data { |
| long max_ttl; |
| long port; |
| long ttl_probes; |
| char *src_ip; |
| long tos; |
| long wait_time; |
| struct arg_list *loose_source; |
| long pause_time; |
| long first_ttl; |
| char *iface; |
| |
| uint32_t gw_list[9]; |
| int recv_sock; |
| int snd_sock; |
| unsigned msg_len; |
| char *packet; |
| uint32_t ident; |
| int istraceroute6; |
| }; |
| |
| struct vi_data { |
| char *s; |
| |
| char *filename; |
| int vi_mode, tabstop, list; |
| int cur_col, cur_row, scr_row; |
| int drawn_row, drawn_col; |
| int count0, count1, vi_mov_flag; |
| unsigned screen_height, screen_width; |
| char vi_reg, *last_search; |
| struct str_line { |
| int alloc; |
| int len; |
| char *data; |
| } *il; |
| size_t screen, cursor; //offsets |
| //yank buffer |
| struct yank_buf { |
| char reg; |
| int alloc; |
| char* data; |
| } yank; |
| |
| size_t filesize; |
| // mem_block contains RO data that is either original file as mmap |
| // or heap allocated inserted data |
| struct block_list { |
| struct block_list *next, *prev; |
| struct mem_block { |
| size_t size; |
| size_t len; |
| enum alloc_flag { |
| MMAP, //can be munmap() before exit() |
| HEAP, //can be free() before exit() |
| STACK, //global or stack perhaps toybuf |
| } alloc; |
| const char *data; |
| } *node; |
| } *text; |
| |
| // slices do not contain actual allocated data but slices of data in mem_block |
| // when file is first opened it has only one slice. |
| // after inserting data into middle new mem_block is allocated for insert data |
| // and 3 slices are created, where first and last slice are pointing to original |
| // mem_block with offsets, and middle slice is pointing to newly allocated block |
| // When deleting, data is not freed but mem_blocks are sliced more such way that |
| // deleted data left between 2 slices |
| struct slice_list { |
| struct slice_list *next, *prev; |
| struct slice { |
| size_t len; |
| const char *data; |
| } *node; |
| } *slices; |
| }; |
| |
| struct basename_data { |
| char *s; |
| }; |
| |
| struct cal_data { |
| struct tm *now; |
| }; |
| |
| struct chgrp_data { |
| uid_t owner; |
| gid_t group; |
| char *owner_name, *group_name; |
| int symfollow; |
| }; |
| |
| struct chmod_data { |
| char *mode; |
| }; |
| |
| struct cmp_data { |
| long n; |
| |
| int fd; |
| char *name; |
| }; |
| |
| struct cp_data { |
| union { |
| // install's options |
| struct { |
| char *g, *o, *m, *t; |
| } i; |
| // cp's options |
| struct { |
| char *t, *preserve; |
| } c; |
| }; |
| |
| char *destname; |
| struct stat top; |
| int (*callback)(struct dirtree *try); |
| uid_t uid; |
| gid_t gid; |
| int pflags; |
| }; |
| |
| struct cpio_data { |
| char *F, *H, *R; |
| }; |
| |
| struct cut_data { |
| char *d, *O; |
| struct arg_list *select[5]; // we treat them the same, so loop through |
| |
| unsigned line; |
| int pairs; |
| regex_t reg; |
| }; |
| |
| struct date_data { |
| char *s, *r, *I, *D, *d; |
| |
| unsigned nano; |
| }; |
| |
| struct dd_data { |
| // Display fields |
| int show_xfer, show_records; |
| unsigned long long bytes, in_full, in_part, out_full, out_part, start; |
| }; |
| |
| struct df_data { |
| struct arg_list *t; |
| |
| int units, width[6]; |
| }; |
| |
| struct du_data { |
| long d; |
| |
| unsigned long depth, total; |
| dev_t st_dev; |
| void *inodes; |
| }; |
| |
| struct env_data { |
| struct arg_list *u; |
| char *e; |
| }; |
| |
| struct expand_data { |
| struct arg_list *t; |
| |
| unsigned tabcount, *tab; |
| }; |
| |
| struct file_data { |
| int max_name_len; |
| off_t len; |
| }; |
| |
| struct find_data { |
| char **filter; |
| struct double_list *argdata; |
| int topdir, xdev, depth; |
| time_t now; |
| long max_bytes; |
| char *start; |
| }; |
| |
| struct grep_data { |
| long m, A, B, C; |
| struct arg_list *f, *e, *M, *S, *exclude_dir; |
| char *color; |
| |
| char *purple, *cyan, *red, *green, *grey; |
| struct double_list *reg; |
| int found, tried, delim; |
| struct arg_list **fixed; |
| }; |
| |
| struct head_data { |
| long c, n; |
| |
| int file_no; |
| }; |
| |
| struct iconv_data { |
| char *f, *t; |
| |
| void *ic; |
| }; |
| |
| struct id_data { |
| int is_groups; |
| }; |
| |
| struct kill_data { |
| char *s; |
| struct arg_list *o; |
| }; |
| |
| struct ln_data { |
| char *t; |
| }; |
| |
| struct logger_data { |
| char *p, *t; |
| |
| int priority; |
| }; |
| |
| struct ls_data { |
| long w, l, block_size; |
| char *color, *sort; |
| |
| struct dirtree *files, *singledir; |
| unsigned screen_width; |
| int nl_title; |
| char *escmore; |
| }; |
| |
| struct mkdir_data { |
| char *m, *Z; |
| }; |
| |
| struct mkfifo_data { |
| char *m; |
| char *Z; |
| |
| mode_t mode; |
| }; |
| |
| struct nice_data { |
| long n; |
| }; |
| |
| struct nl_data { |
| char *s, *n, *b; |
| long w, l, v; |
| |
| // Count of consecutive blank lines for -l has to persist between files |
| long lcount, slen; |
| }; |
| |
| struct od_data { |
| struct arg_list *t; |
| char *A; |
| long N, w, j; |
| |
| int address_idx; |
| unsigned types, leftover, star; |
| char *buf; // Points to buffers[0] or buffers[1]. |
| char *bufs[2]; // Used to detect duplicate lines. |
| off_t pos; |
| }; |
| |
| struct paste_data { |
| char *d; |
| |
| int files; |
| }; |
| |
| struct patch_data { |
| char *i, *d; |
| long v, p, g, F; |
| |
| void *current_hunk; |
| long oldline, oldlen, newline, newlen, linenum, outnum; |
| int context, state, filein, fileout, filepatch, hunknum; |
| char *tempname; |
| }; |
| |
| struct ps_data { |
| union { |
| struct { |
| struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k; |
| } ps; |
| struct { |
| long n, m, d, s; |
| struct arg_list *u, *p, *o, *k, *O; |
| } top; |
| struct { |
| char *L; |
| struct arg_list *G, *g, *P, *s, *t, *U, *u; |
| char *d; |
| |
| void *regexes, *snapshot; |
| int signal; |
| pid_t self, match; |
| } pgrep; |
| }; |
| |
| struct ps_ptr_len { |
| void *ptr; |
| long len; |
| } gg, GG, pp, PP, ss, tt, uu, UU; |
| struct dirtree *threadparent; |
| unsigned width, height, scroll; |
| dev_t tty; |
| void *fields, *kfields; |
| long long ticks, bits, time; |
| int kcount, forcek, sortpos, pidlen; |
| int (*match_process)(long long *slot); |
| void (*show_process)(void *tb); |
| }; |
| |
| struct renice_data { |
| long n; |
| }; |
| |
| struct sed_data { |
| char *i; |
| struct arg_list *f, *e; |
| |
| // processed pattern list |
| struct double_list *pattern; |
| |
| char *nextline, *remember, *tarxform; |
| void *restart, *lastregex; |
| long nextlen, rememberlen, count; |
| int fdout, noeol; |
| unsigned xx, tarxlen, xflags; |
| char delim, xftype; |
| }; |
| |
| struct sort_data { |
| char *t; |
| struct arg_list *k; |
| char *o, *T, S; |
| |
| void *key_list; |
| unsigned linecount; |
| char **lines, *name; |
| }; |
| |
| struct split_data { |
| long n, l, b, a; |
| |
| char *outfile; |
| }; |
| |
| struct strings_data { |
| long n; |
| char *t; |
| }; |
| |
| struct tail_data { |
| long n, c; |
| char *s; |
| |
| int file_no, last_fd, ss; |
| struct xnotify *not; |
| struct { |
| char *path; |
| int fd; |
| struct dev_ino di; |
| } *F; |
| }; |
| |
| struct tar_data { |
| char *f, *C, *I; |
| struct arg_list *T, *X, *xform; |
| long strip; |
| char *to_command, *owner, *group, *mtime, *mode, *sort; |
| struct arg_list *exclude; |
| |
| struct double_list *incl, *excl, *seen; |
| struct string_list *dirs; |
| char *cwd, **xfsed; |
| int fd, ouid, ggid, hlc, warn, sparselen, pid, xfpipe[2]; |
| struct dev_ino archive_di; |
| long long *sparse; |
| time_t mtt; |
| |
| // hardlinks seen so far (hlc many) |
| struct { |
| char *arg; |
| struct dev_ino di; |
| } *hlx; |
| |
| // Parsed information about a tar header. |
| struct tar_header { |
| char *name, *link_target, *uname, *gname; |
| long long size, ssize; |
| uid_t uid; |
| gid_t gid; |
| mode_t mode; |
| time_t mtime; |
| dev_t device; |
| } hdr; |
| }; |
| |
| struct tee_data { |
| void *outputs; |
| int out; |
| }; |
| |
| struct touch_data { |
| char *t, *r, *d; |
| }; |
| |
| struct ulimit_data { |
| long P; |
| }; |
| |
| struct uniq_data { |
| long w, s, f; |
| |
| long repeats; |
| }; |
| |
| struct uudecode_data { |
| char *o; |
| }; |
| |
| struct wc_data { |
| unsigned long totals[5]; |
| }; |
| |
| struct xargs_data { |
| long s, n, P; |
| char *E; |
| |
| long entries, bytes, np; |
| char delim; |
| FILE *tty; |
| }; |
| extern union global_union { |
| struct log_data log; |
| struct dmesg_data dmesg; |
| struct gzip_data gzip; |
| struct hostname_data hostname; |
| struct killall_data killall; |
| struct md5sum_data md5sum; |
| struct mknod_data mknod; |
| struct mktemp_data mktemp; |
| struct mount_data mount; |
| struct pidof_data pidof; |
| struct seq_data seq; |
| struct umount_data umount; |
| struct ifconfig_data ifconfig; |
| struct microcom_data microcom; |
| struct netcat_data netcat; |
| struct netstat_data netstat; |
| struct ping_data ping; |
| struct tunctl_data tunctl; |
| struct base64_data base64; |
| struct blkdiscard_data blkdiscard; |
| struct blkid_data blkid; |
| struct blockdev_data blockdev; |
| struct chrt_data chrt; |
| struct dos2unix_data dos2unix; |
| struct fallocate_data fallocate; |
| struct fmt_data fmt; |
| struct free_data free; |
| struct getopt_data getopt; |
| struct gpiodetect_data gpiodetect; |
| struct hwclock_data hwclock; |
| struct i2cdetect_data i2cdetect; |
| struct ionice_data ionice; |
| struct losetup_data losetup; |
| struct lsattr_data lsattr; |
| struct lsusb_data lsusb; |
| struct makedevs_data makedevs; |
| struct mkswap_data mkswap; |
| struct modinfo_data modinfo; |
| struct nbd_client_data nbd_client; |
| struct nsenter_data nsenter; |
| struct readelf_data readelf; |
| struct realpath_data realpath; |
| struct rtcwake_data rtcwake; |
| struct setfattr_data setfattr; |
| struct setsid_data setsid; |
| struct stat_data stat; |
| struct swapon_data swapon; |
| struct tac_data tac; |
| struct timeout_data timeout; |
| struct truncate_data truncate; |
| struct uclampset_data uclampset; |
| struct watch_data watch; |
| struct xxd_data xxd; |
| struct brctl_data brctl; |
| struct diff_data diff; |
| struct expr_data expr; |
| struct getfattr_data getfattr; |
| struct lsof_data lsof; |
| struct modprobe_data modprobe; |
| struct more_data more; |
| struct stty_data stty; |
| struct tr_data tr; |
| struct traceroute_data traceroute; |
| struct vi_data vi; |
| struct basename_data basename; |
| struct cal_data cal; |
| struct chgrp_data chgrp; |
| struct chmod_data chmod; |
| struct cmp_data cmp; |
| struct cp_data cp; |
| struct cpio_data cpio; |
| struct cut_data cut; |
| struct date_data date; |
| struct dd_data dd; |
| struct df_data df; |
| struct du_data du; |
| struct env_data env; |
| struct expand_data expand; |
| struct file_data file; |
| struct find_data find; |
| struct grep_data grep; |
| struct head_data head; |
| struct iconv_data iconv; |
| struct id_data id; |
| struct kill_data kill; |
| struct ln_data ln; |
| struct logger_data logger; |
| struct ls_data ls; |
| struct mkdir_data mkdir; |
| struct mkfifo_data mkfifo; |
| struct nice_data nice; |
| struct nl_data nl; |
| struct od_data od; |
| struct paste_data paste; |
| struct patch_data patch; |
| struct ps_data ps; |
| struct renice_data renice; |
| struct sed_data sed; |
| struct sort_data sort; |
| struct split_data split; |
| struct strings_data strings; |
| struct tail_data tail; |
| struct tar_data tar; |
| struct tee_data tee; |
| struct touch_data touch; |
| struct ulimit_data ulimit; |
| struct uniq_data uniq; |
| struct uudecode_data uudecode; |
| struct wc_data wc; |
| struct xargs_data xargs; |
| } this; |