xref: /third_party/toybox/generated/globals.h (revision 0f66f451)
1// toys/android/log.c
2
3struct log_data {
4  char *t, *p;
5};
6
7// toys/example/demo_number.c
8
9struct demo_number_data {
10  long D;
11};
12
13// toys/example/hello.c
14
15struct hello_data {
16  int unused;
17};
18
19// toys/example/skeleton.c
20
21struct skeleton_data {
22  union {
23    struct {
24      char *b;
25      long c;
26      struct arg_list *d;
27      long e;
28      char *also, *blubber;
29    } s;
30    struct {
31      long b;
32    } a;
33  };
34
35  int more_globals;
36};
37
38// toys/lsb/dmesg.c
39
40struct dmesg_data {
41  long n, s;
42
43  int use_color;
44  time_t tea;
45};
46
47// toys/lsb/gzip.c
48
49struct gzip_data {
50  int level;
51};
52
53// toys/lsb/hostname.c
54
55struct hostname_data {
56  char *F;
57};
58
59// toys/lsb/killall.c
60
61struct killall_data {
62  char *s;
63
64  int signum;
65  pid_t cur_pid;
66  char **names;
67  short *err;
68  struct int_list { struct int_list *next; int val; } *pids;
69};
70
71// toys/lsb/md5sum.c
72
73struct md5sum_data {
74  int sawline;
75
76  // Crypto variables blanked after summing
77  unsigned state[5];
78  unsigned oldstate[5];
79  uint64_t count;
80  union {
81    char c[64];
82    unsigned i[16];
83  } buffer;
84};
85
86// toys/lsb/mknod.c
87
88struct mknod_data {
89  char *Z, *m;
90};
91
92// toys/lsb/mktemp.c
93
94struct mktemp_data {
95  char *p, *tmpdir;
96};
97
98// toys/lsb/mount.c
99
100struct mount_data {
101  struct arg_list *optlist;
102  char *type;
103  char *bigO;
104
105  unsigned long flags;
106  char *opts;
107  int okuser;
108};
109
110// toys/lsb/passwd.c
111
112struct passwd_data {
113  char *a;
114};
115
116// toys/lsb/pidof.c
117
118struct pidof_data {
119  char *o;
120};
121
122// toys/lsb/seq.c
123
124struct seq_data {
125  char *s, *f;
126
127  int precision;
128};
129
130// toys/lsb/su.c
131#ifdef OHOS_LITE
132struct su_data {
133  char *s;
134  char *c;
135};
136#endif
137
138// toys/lsb/umount.c
139
140struct umount_data {
141  struct arg_list *t;
142
143  char *types;
144};
145
146// toys/net/ftpget.c
147
148struct ftpget_data {
149  char *u, *p, *P;
150
151  int fd;
152  int datafd;
153  int filefd;
154};
155
156// toys/net/ifconfig.c
157
158struct ifconfig_data {
159  int sockfd;
160};
161
162// toys/net/microcom.c
163
164struct microcom_data {
165  char *s;
166
167  int fd;
168  struct termios original_stdin_state, original_fd_state;
169};
170
171// toys/net/netcat.c
172
173struct netcat_data {
174  char *f, *s;
175  long q, p, W, w;
176};
177
178// toys/net/netstat.c
179
180struct netstat_data {
181  struct num_cache *inodes;
182  int wpad;
183};;
184
185// toys/net/ping.c
186
187struct ping_data {
188  char *I;
189  long w, W, i, s, c, t, m;
190
191  struct sockaddr *sa;
192  int sock;
193  unsigned long sent, recv, fugit, min, max;
194};
195
196// toys/net/sntp.c
197
198struct sntp_data {
199  long r;
200  char *p, *m, *M;
201};
202
203// toys/net/tunctl.c
204
205struct tunctl_data {
206  char *u;
207};
208
209// toys/other/acpi.c
210
211struct acpi_data {
212  int ac, bat, therm, cool;
213  char *cpath;
214};
215
216// toys/other/base64.c
217
218struct base64_data {
219  long w;
220  unsigned total;
221  unsigned n;  // number of bits used in encoding. 5 for base32, 6 for base64
222  unsigned align;  // number of bits to align to
223};
224
225// toys/other/blkid.c
226
227struct blkid_data {
228  struct arg_list *s;
229};
230
231// toys/other/blockdev.c
232
233struct blockdev_data {
234  long setbsz, setra;
235};
236
237// toys/other/chrt.c
238
239struct chrt_data {
240  long p;
241};
242
243// toys/other/dos2unix.c
244
245struct dos2unix_data {
246  char *tempfile;
247};
248
249// toys/other/fallocate.c
250
251struct fallocate_data {
252  long o, l;
253};
254
255// toys/other/fmt.c
256
257struct fmt_data {
258  int width;
259
260  int level, pos;
261};
262
263// toys/other/free.c
264
265struct free_data {
266  unsigned bits;
267  unsigned long long units;
268  char *buf;
269};
270
271// toys/other/hexedit.c
272
273struct hexedit_data {
274  char *data;
275  long long len, base;
276  int numlen, undo, undolen;
277  unsigned height;
278};
279
280// toys/other/hwclock.c
281
282struct hwclock_data {
283  char *f;
284
285  int utc;
286};
287
288// toys/other/ionice.c
289
290struct ionice_data {
291  long p, n, c;
292};
293
294// toys/other/login.c
295
296struct login_data {
297  char *h, *f;
298
299  int login_timeout, login_fail_timeout;
300};
301
302// toys/other/losetup.c
303
304struct losetup_data {
305  char *j;
306  long o, S;
307
308  int openflags;
309  dev_t jdev;
310  ino_t jino;
311  char *dir;
312};
313
314// toys/other/lspci.c
315
316struct lspci_data {
317  char *i;
318  long n;
319
320  FILE *db;
321};
322
323// toys/other/makedevs.c
324
325struct makedevs_data {
326  char *d;
327};
328
329// toys/other/mix.c
330
331struct mix_data {
332   long r, l;
333   char *d, *c;
334};
335
336// toys/other/mkpasswd.c
337
338struct mkpasswd_data {
339  long P;
340  char *m, *S;
341};
342
343// toys/other/mkswap.c
344
345struct mkswap_data {
346  char *L;
347};
348
349// toys/other/modinfo.c
350
351struct modinfo_data {
352  char *F, *k, *b;
353
354  long mod;
355  int count;
356};
357
358// toys/other/nsenter.c
359
360struct nsenter_data {
361  char *Uupnmi[6];
362  long t;
363};
364
365// toys/other/oneit.c
366
367struct oneit_data {
368  char *c;
369};
370
371// toys/other/pwgen.c
372
373struct pwgen_data {
374  char *r;
375};
376
377// toys/other/reboot.c
378
379struct reboot_data {
380  char *d;
381};
382
383// toys/other/setfattr.c
384
385struct setfattr_data {
386  char *x, *v, *n;
387};
388
389// toys/other/sha3sum.c
390
391struct sha3sum_data {
392  long a;
393  unsigned long long rc[24];
394};
395
396// toys/other/shred.c
397
398struct shred_data {
399  long o, n, s;
400};
401
402// toys/other/stat.c
403
404struct stat_data {
405  char *c;
406
407  union {
408    struct stat st;
409    struct statfs sf;
410  } stat;
411  char *file, *pattern;
412  int patlen;
413};
414
415// toys/other/swapon.c
416
417struct swapon_data {
418  long p;
419};
420
421// toys/other/switch_root.c
422
423struct switch_root_data {
424  char *c;
425
426  dev_t rootdev;
427};
428
429// toys/other/tac.c
430
431struct tac_data {
432  struct double_list *dl;
433};
434
435// toys/other/timeout.c
436
437struct timeout_data {
438  char *s, *k;
439
440  int nextsig;
441  pid_t pid;
442  struct timeval ktv;
443  struct itimerval itv;
444};
445
446// toys/other/truncate.c
447
448struct truncate_data {
449  char *s;
450
451  long size;
452  int type;
453};
454
455// toys/other/watch.c
456
457struct watch_data {
458  int n;
459
460  pid_t pid, oldpid;
461};
462
463// toys/other/xxd.c
464
465struct xxd_data {
466  long s, g, o, l, c;
467};
468
469// toys/pending/arp.c
470
471struct arp_data {
472    char *hw_type;
473    char *af_type_A;
474    char *af_type_p;
475    char *interface;
476
477    int sockfd;
478    char *device;
479};
480
481// toys/pending/awk.c
482struct awk_data {
483  struct arg_list *f;
484  struct arg_list *v;
485  char *F;
486
487  struct scanner_state {
488      char *p;
489      char *progstring;
490      struct arg_list *prog_args;
491      char *filename;
492      char *line;
493      size_t line_size;
494      ssize_t line_len;
495      int line_num;
496      int ch;
497      FILE *fp;
498      // state includes latest token seen
499      int tok;
500      int tokbuiltin;
501      int toktype;
502      char *tokstr;
503      size_t maxtok;
504      size_t toklen;
505      double numval;
506      int error;  // Set if lexical error.
507  } *scs;
508  char *tokstr;
509  int prevtok;
510
511  struct compiler_globals {
512    int in_print_stmt;
513    int paren_level;
514    int in_function_body;
515    int funcnum;
516    int nparms;
517    int compile_error_count;
518    int first_begin;
519    int last_begin;
520    int first_end;
521    int last_end;
522    int first_recrule;
523    int last_recrule;
524    int break_dest;
525    int continue_dest;
526    int stack_offset_to_fix;  // fixup stack if return in for(e in a)
527    int range_pattern_num;
528    int rule_type;  // tkbegin, tkend, or 0
529  } cgl;
530
531  // zvalue: the main awk value type
532  // Can be number or string or both, or else map (array) or regex
533  struct zvalue {
534    unsigned flags;
535    double num;
536    union { // anonymous union not in C99; not going to fix it now.
537      struct zstring *vst;
538      struct zmap *map;
539      regex_t *rx;
540    };
541  } nozvalue;   // to shut up compiler warning TODO FIXME
542
543  struct runtime_globals {
544    struct zvalue cur_arg;
545    //char *filename;     // UNUSED
546    FILE *fp;           // current data file
547    int narg;           // cmdline arg index
548    int nfiles;         // num of cmdline data file args processed
549    int eof;            // all cmdline files (incl. stdin) read
550    char *recptr;
551    char *recbuf;
552    size_t recbufsize;
553    char *recbuf_multx;
554    size_t recbufsize_multx;
555    struct zstring *zspr;      // Global to receive sprintf() string value
556  } rgl;
557
558  // Expanding sequential list
559  struct zlist {
560    char *base, *limit, *avail;
561    size_t size;
562  } globals_table,  // global symbol table
563    locals_table,     // local symbol table
564    func_def_table;  // function symbol table
565  // runtime lists
566  struct zlist literals, fields, zcode, stack;
567
568  char *progname;
569
570  int spec_var_limit;
571  int zcode_last;
572  struct zvalue *stackp;  // top of stack ptr
573
574  char *pbuf;   // Used for number formatting in num_to_zstring()
575#define RS_MAX  64
576  char rs_last[RS_MAX];
577  regex_t rx_rs_default, rx_rs_last;
578  regex_t rx_default, rx_last, rx_printf_fmt;
579#define FS_MAX  64
580  char fs_last[FS_MAX];
581  char one_char_fs[4];
582  int nf_internal;  // should match NF
583  char range_sw[64];   // FIXME TODO quick and dirty set of range switches
584  int file_cnt, std_file_cnt;
585
586  struct zfile {
587    struct zfile *next;
588    char *fn;
589    FILE *fp;
590    char mode;  // w, a, or r
591    char file_or_pipe;  // f or p
592    char is_std_file;
593    char *recbuf;
594    size_t recbufsize;
595    char *recbuf_multi;
596    size_t recbufsize_multi;
597    char *recbuf_multx;
598    size_t recbufsize_multx;
599    int recoffs, endoffs;
600  } *zfiles, *cfile, *zstdout;
601};
602
603// toys/pending/arping.c
604
605struct arping_data {
606    long count;
607    unsigned long time_out;
608    char *iface;
609    char *src_ip;
610
611    int sockfd;
612    unsigned long start, end;
613    unsigned sent_at, sent_nr, rcvd_nr, brd_sent, rcvd_req, brd_rcv,
614             unicast_flag;
615};
616
617// toys/pending/bc.c
618
619struct bc_data {
620  // This actually needs to be a BcVm*, but the toybox build
621  // system complains if I make it so. Instead, we'll just cast.
622  char *vm;
623
624  size_t nchars;
625  char *file, sig, max_ibase;
626  uint16_t line_len;
627};
628
629// toys/pending/bootchartd.c
630
631struct bootchartd_data {
632  char timestamp[32];
633  long msec;
634  int proc_accounting;
635
636  pid_t pid;
637};
638
639// toys/pending/brctl.c
640
641struct brctl_data {
642    int sockfd;
643};
644
645// toys/pending/chsh.c
646
647struct chsh_data {
648  char *s;
649};
650
651// toys/pending/crond.c
652
653struct crond_data {
654  char *crontabs_dir;
655  char *logfile;
656  int loglevel_d;
657  int loglevel;
658
659  time_t crontabs_dir_mtime;
660  uint8_t flagd;
661};
662
663// toys/pending/crontab.c
664
665struct crontab_data {
666  char *user;
667  char *cdir;
668};
669
670// toys/pending/dd.c
671
672struct dd_data {
673  int show_xfer, show_records;
674  unsigned long long bytes, c_count, in_full, in_part, out_full, out_part;
675  struct timeval start;
676  struct {
677    char *name;
678    int fd;
679    unsigned char *buff, *bp;
680    long sz, count;
681    unsigned long long offset;
682  } in, out;
683  unsigned conv, iflag, oflag;
684};
685
686// toys/pending/dhcp.c
687
688struct dhcp_data {
689    char *iface;
690    char *pidfile;
691    char *script;
692    long retries;
693    long timeout;
694    long tryagain;
695    struct arg_list *req_opt;
696    char *req_ip;
697    struct arg_list *pkt_opt;
698    char *fdn_name;
699    char *hostname;
700    char *vendor_cls;
701};
702
703// toys/pending/dhcp6.c
704
705struct dhcp6_data {
706  char *interface_name, *pidfile, *script;
707  long retry, timeout, errortimeout;
708  char *req_ip;
709  int length, state, request_length, sock, sock1, status, retval, retries;
710  struct timeval tv;
711  uint8_t transction_id[3];
712  struct sockaddr_in6 input_socket6;
713};
714
715// toys/pending/dhcpd.c
716
717struct dhcpd_data {
718    char *iface;
719    long port;
720};
721
722// toys/pending/diff.c
723
724struct diff_data {
725  long ct;
726  char *start;
727  struct arg_list *L_list;
728
729  int dir_num, size, is_binary, status, change, len[2];
730  int *offset[2];
731  struct stat st[2];
732};
733
734// toys/pending/dumpleases.c
735
736struct dumpleases_data {
737    char *file;
738};
739
740// toys/pending/expr.c
741
742struct expr_data {
743  char **tok; // current token, not on the stack since recursive calls mutate it
744
745  char *refree;
746};
747
748// toys/pending/fdisk.c
749
750struct fdisk_data {
751  long sect_sz;
752  long sectors;
753  long heads;
754  long cylinders;
755};
756
757// toys/pending/fold.c
758
759struct fold_data {
760  int width;
761};
762
763// toys/pending/fsck.c
764
765struct fsck_data {
766  int fd_num;
767  char *t_list;
768
769  struct double_list *devices;
770  char *arr_flag;
771  char **arr_type;
772  int negate;
773  int sum_status;
774  int nr_run;
775  int sig_num;
776  long max_nr_run;
777};
778
779// toys/pending/getfattr.c
780
781struct getfattr_data {
782  char *n;
783};
784
785// toys/pending/getopt.c
786
787struct getopt_data {
788  struct arg_list *l;
789  char *o, *n;
790};
791
792// toys/pending/getty.c
793
794struct getty_data {
795  char *issue_str;
796  char *login_str;
797  char *init_str;
798  char *host_str;
799  long timeout;
800
801  char *tty_name;
802  int  speeds[20];
803  int  sc;
804  struct termios termios;
805  char buff[128];
806};
807
808// toys/pending/groupadd.c
809
810struct groupadd_data {
811  long gid;
812};
813
814// toys/pending/hexdump.c
815
816struct hexdump_data {
817    long s, n;
818
819    long long len, pos, ppos;
820    const char *fmt;
821    unsigned int fn, bc;  // file number and byte count
822    char linebuf[16];  // line buffer - serves double duty for sqeezing repeat
823                       // lines and for accumulating full lines accross file
824                       // boundaries if necessesary.
825};
826
827// toys/pending/host.c
828
829struct host_data {
830  char *type_str;
831};
832
833// toys/pending/ip.c
834
835struct ip_data {
836  char stats, singleline, flush, *filter_dev, gbuf[8192];
837  int sockfd, connected, from_ok, route_cmd;
838  int8_t addressfamily, is_addr;
839};
840
841// toys/pending/ipcrm.c
842
843struct ipcrm_data {
844  struct arg_list *qkey;
845  struct arg_list *qid;
846  struct arg_list *skey;
847  struct arg_list *sid;
848  struct arg_list *mkey;
849  struct arg_list *mid;
850};
851
852// toys/pending/ipcs.c
853
854struct ipcs_data {
855  int id;
856};
857
858// toys/pending/klogd.c
859
860struct klogd_data {
861  long level;
862
863  int fd;
864};
865
866// toys/pending/last.c
867
868struct last_data {
869  char *file;
870
871  struct arg_list *list;
872};
873
874// toys/pending/lsof.c
875
876struct lsof_data {
877  struct arg_list *p;
878
879  struct stat *sought_files;
880  struct double_list *all_sockets, *files;
881  int last_shown_pid, shown_header;
882};
883
884// toys/pending/man.c
885
886struct man_data {
887  char *M, *k;
888
889  char any, cell, ex, *f, k_done, *line, *m, **sct, **scts, **sufs;
890  regex_t reg;
891};
892
893// toys/pending/mke2fs.c
894
895struct mke2fs_data {
896  // Command line arguments.
897  long blocksize;
898  long bytes_per_inode;
899  long inodes;           // Total inodes in filesystem.
900  long reserved_percent; // Integer precent of space to reserve for root.
901  char *gendir;          // Where to read dirtree from.
902
903  // Internal data.
904  struct dirtree *dt;    // Tree of files to copy into the new filesystem.
905  unsigned treeblocks;   // Blocks used by dt
906  unsigned treeinodes;   // Inodes used by dt
907
908  unsigned blocks;       // Total blocks in the filesystem.
909  unsigned freeblocks;   // Free blocks in the filesystem.
910  unsigned inodespg;     // Inodes per group
911  unsigned groups;       // Total number of block groups.
912  unsigned blockbits;    // Bits per block.  (Also blocks per group.)
913
914  // For gene2fs
915  unsigned nextblock;    // Next data block to allocate
916  unsigned nextgroup;    // Next group we'll be allocating from
917  int fsfd;              // File descriptor of filesystem (to output to).
918};
919
920// toys/pending/modprobe.c
921
922struct modprobe_data {
923  struct arg_list *dirs;
924
925  struct arg_list *probes;
926  struct arg_list *dbase[256];
927  char *cmdopts;
928  int nudeps;
929  uint8_t symreq;
930};
931
932// toys/pending/more.c
933
934struct more_data {
935  struct termios inf;
936  int cin_fd;
937};
938
939// toys/pending/openvt.c
940
941struct openvt_data {
942  long c;
943};
944
945// toys/pending/route.c
946
947struct route_data {
948  char *family;
949};
950
951// toys/pending/sh.c
952
953struct sh_data {
954  char *command;
955
956  long lineno;
957
958  struct double_list functions;
959  unsigned options;
960
961  // Running jobs.
962  struct sh_job {
963    struct sh_job *next, *prev;
964    unsigned jobno;
965
966    // Every pipeline has at least one set of arguments or it's Not A Thing
967    struct sh_arg {
968      char **v;
969      int c;
970    } pipeline;
971
972    // null terminated array of running processes in pipeline
973    struct sh_process {
974      struct string_list *delete; // expanded strings
975      int pid, exit;   // status? Stopped? Exited?
976      struct sh_arg arg;
977    } *procs, *proc;
978  } *jobs, *job;
979  unsigned jobcnt;
980};
981
982// toys/pending/strace.c
983
984struct strace_data {
985  long s, p;
986
987  char ioctl[32], *fmt;
988  long regs[256/sizeof(long)], syscall;
989  pid_t pid;
990  int arg;
991};
992
993// toys/pending/stty.c
994
995struct stty_data {
996  char *device;
997
998  int fd, col;
999  unsigned output_cols;
1000};
1001
1002// toys/pending/sulogin.c
1003
1004struct sulogin_data {
1005  long timeout;
1006  struct termios crntio;
1007};
1008
1009// toys/pending/syslogd.c
1010
1011struct syslogd_data {
1012  char *socket;
1013  char *config_file;
1014  char *unix_socket;
1015  char *logfile;
1016  long interval;
1017  long rot_size;
1018  long rot_count;
1019  char *remote_log;
1020  long log_prio;
1021
1022  struct unsocks *lsocks;  // list of listen sockets
1023  struct logfile *lfiles;  // list of write logfiles
1024  int sigfd[2];
1025};
1026
1027// toys/pending/tcpsvd.c
1028
1029struct tcpsvd_data {
1030  char *name;
1031  char *user;
1032  long bn;
1033  char *nmsg;
1034  long cn;
1035
1036  int maxc;
1037  int count_all;
1038  int udp;
1039};
1040
1041// toys/pending/telnet.c
1042
1043struct telnet_data {
1044  int port;
1045  int sfd;
1046  char buff[128];
1047  int pbuff;
1048  char iac[256];
1049  int piac;
1050  char *ttype;
1051  struct termios def_term;
1052  struct termios raw_term;
1053  uint8_t term_ok;
1054  uint8_t term_mode;
1055  uint8_t flags;
1056  unsigned win_width;
1057  unsigned win_height;
1058};
1059
1060// toys/pending/telnetd.c
1061
1062struct telnetd_data {
1063    char *login_path;
1064    char *issue_path;
1065    int port;
1066    char *host_addr;
1067    long w_sec;
1068
1069    int gmax_fd;
1070    pid_t fork_pid;
1071};
1072
1073// toys/pending/tftp.c
1074
1075struct tftp_data {
1076  char *local_file;
1077  char *remote_file;
1078  long block_size;
1079
1080  struct sockaddr_storage inaddr;
1081  int af;
1082};
1083
1084// toys/pending/tftpd.c
1085
1086struct tftpd_data {
1087  char *user;
1088
1089  long sfd;
1090  struct passwd *pw;
1091};
1092
1093// toys/pending/tr.c
1094
1095struct tr_data {
1096  short map[256]; //map of chars
1097  int len1, len2;
1098};
1099
1100// toys/pending/traceroute.c
1101
1102struct traceroute_data {
1103  long max_ttl;
1104  long port;
1105  long ttl_probes;
1106  char *src_ip;
1107  long tos;
1108  long wait_time;
1109  struct arg_list *loose_source;
1110  long pause_time;
1111  long first_ttl;
1112  char *iface;
1113
1114  uint32_t gw_list[9];
1115  int recv_sock;
1116  int snd_sock;
1117  unsigned msg_len;
1118  char *packet;
1119  uint32_t ident;
1120  int istraceroute6;
1121};
1122
1123// toys/pending/useradd.c
1124
1125struct useradd_data {
1126  char *dir;
1127  char *gecos;
1128  char *shell;
1129  char *u_grp;
1130  long uid;
1131
1132  long gid;
1133};
1134
1135// toys/pending/vi.c
1136
1137struct vi_data {
1138    int cur_col;
1139    int cur_row;
1140    int scr_row;
1141    int drawn_row;
1142    int drawn_col;
1143    unsigned screen_height;
1144    unsigned screen_width;
1145    int vi_mode;
1146    int count0;
1147    int count1;
1148    int vi_mov_flag;
1149    int modified;
1150    char vi_reg;
1151    char *last_search;
1152    int tabstop;
1153    int list;
1154};
1155
1156// toys/pending/wget.c
1157
1158struct wget_data {
1159  char *filename;
1160  long redirects;
1161
1162  int sock;
1163  char *url;
1164#if CFG_WGET_LIBTLS
1165  struct tls *tls;
1166#elif CFG_WGET_OPENSSL
1167  struct ssl_ctx_st *ctx;
1168  struct ssl_st *ssl;
1169#endif
1170};
1171
1172// toys/posix/basename.c
1173
1174struct basename_data {
1175  char *s;
1176};
1177
1178// toys/posix/chgrp.c
1179
1180struct chgrp_data {
1181  uid_t owner;
1182  gid_t group;
1183  char *owner_name, *group_name;
1184  int symfollow;
1185};
1186
1187// toys/posix/chmod.c
1188
1189struct chmod_data {
1190  char *mode;
1191};
1192
1193// toys/posix/cksum.c
1194
1195struct cksum_data {
1196  unsigned crc_table[256];
1197};
1198
1199// toys/posix/cmp.c
1200
1201struct cmp_data {
1202  int fd;
1203  char *name;
1204};
1205
1206// toys/posix/cp.c
1207
1208struct cp_data {
1209  union {
1210    // install's options
1211    struct {
1212      char *g, *o, *m;
1213    } i;
1214    // cp's options
1215    struct {
1216      char *preserve;
1217    } c;
1218  };
1219
1220  char *destname;
1221  struct stat top;
1222  int (*callback)(struct dirtree *try);
1223  uid_t uid;
1224  gid_t gid;
1225  int pflags;
1226};
1227
1228// toys/posix/cpio.c
1229
1230struct cpio_data {
1231  char *F, *p, *H;
1232};
1233
1234// toys/posix/cut.c
1235
1236struct cut_data {
1237  char *d, *O;
1238  struct arg_list *select[5]; // we treat them the same, so loop through
1239
1240  int pairs;
1241  regex_t reg;
1242};
1243
1244// toys/posix/date.c
1245
1246struct date_data {
1247  char *r, *D, *d;
1248
1249  unsigned nano;
1250};
1251
1252// toys/posix/df.c
1253
1254struct df_data {
1255  struct arg_list *t;
1256
1257  long units;
1258  int column_widths[5];
1259  int header_shown;
1260};
1261
1262// toys/posix/du.c
1263
1264struct du_data {
1265  long d;
1266
1267  unsigned long depth, total;
1268  dev_t st_dev;
1269  void *inodes;
1270};
1271
1272// toys/posix/env.c
1273
1274struct env_data {
1275  struct arg_list *u;
1276};;
1277
1278// toys/posix/expand.c
1279
1280struct expand_data {
1281  struct arg_list *t;
1282
1283  unsigned tabcount, *tab;
1284};
1285
1286// toys/posix/file.c
1287
1288struct file_data {
1289  int max_name_len;
1290
1291  off_t len;
1292};
1293
1294// toys/posix/find.c
1295
1296struct find_data {
1297  char **filter;
1298  struct double_list *argdata;
1299  int topdir, xdev, depth;
1300  time_t now;
1301  long max_bytes;
1302  char *start;
1303};
1304
1305// toys/posix/grep.c
1306
1307struct grep_data {
1308  long m, A, B, C;
1309  struct arg_list *f, *e, *M, *S, *exclude_dir;
1310  char *color;
1311
1312  char *purple, *cyan, *red, *green, *grey;
1313  struct double_list *reg;
1314  char indelim, outdelim;
1315  int found, tried;
1316};
1317
1318// toys/posix/head.c
1319
1320struct head_data {
1321  long c, n;
1322
1323  int file_no;
1324};
1325
1326// toys/posix/iconv.c
1327
1328struct iconv_data {
1329  char *f, *t;
1330
1331  void *ic;
1332};
1333
1334// toys/posix/id.c
1335
1336struct id_data {
1337  int is_groups;
1338};
1339
1340// toys/posix/kill.c
1341
1342struct kill_data {
1343  char *s;
1344  struct arg_list *o;
1345};
1346
1347// toys/posix/ln.c
1348
1349struct ln_data {
1350  char *t;
1351};
1352
1353// toys/posix/logger.c
1354
1355struct logger_data {
1356  char *p, *t;
1357};
1358
1359// toys/posix/ls.c
1360
1361struct ls_data {
1362  long l;
1363  char *color;
1364
1365  struct dirtree *files, *singledir;
1366  unsigned screen_width;
1367  int nl_title;
1368  char *escmore;
1369};
1370
1371// toys/posix/mkdir.c
1372
1373struct mkdir_data {
1374  char *m, *Z;
1375};
1376
1377// toys/posix/mkfifo.c
1378
1379struct mkfifo_data {
1380  char *m;
1381  char *Z;
1382
1383  mode_t mode;
1384};
1385
1386// toys/posix/nice.c
1387
1388struct nice_data {
1389  long n;
1390};
1391
1392// toys/posix/nl.c
1393
1394struct nl_data {
1395  char *s, *n, *b;
1396  long w, l, v;
1397
1398  // Count of consecutive blank lines for -l has to persist between files
1399  long lcount;
1400  long slen;
1401};
1402
1403// toys/posix/od.c
1404
1405struct od_data {
1406  struct arg_list *t;
1407  char *A;
1408  long N, w, j;
1409
1410  int address_idx;
1411  unsigned types, leftover, star;
1412  char *buf; // Points to buffers[0] or buffers[1].
1413  char *bufs[2]; // Used to detect duplicate lines.
1414  off_t pos;
1415};
1416
1417// toys/posix/paste.c
1418
1419struct paste_data {
1420  char *d;
1421
1422  int files;
1423};
1424
1425// toys/posix/patch.c
1426
1427struct patch_data {
1428  char *i, *d;
1429  long p, g;
1430
1431  struct double_list *current_hunk;
1432  long oldline, oldlen, newline, newlen;
1433  long linenum;
1434  int context, state, filein, fileout, filepatch, hunknum;
1435  char *tempname;
1436};
1437
1438// toys/posix/ps.c
1439
1440struct ps_data {
1441  union {
1442    struct {
1443      struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k;
1444    } ps;
1445    struct {
1446      long n, m, d, s;
1447      struct arg_list *u, *p, *o, *k, *O;
1448    } top;
1449    struct {
1450      char *L;
1451      struct arg_list *G, *g, *P, *s, *t, *U, *u;
1452      char *d;
1453
1454      void *regexes, *snapshot;
1455      int signal;
1456      pid_t self, match;
1457    } pgrep;
1458  };
1459
1460  struct ptr_len gg, GG, pp, PP, ss, tt, uu, UU;
1461  struct dirtree *threadparent;
1462  unsigned width, height;
1463  dev_t tty;
1464  void *fields, *kfields;
1465  long long ticks, bits, time;
1466  int kcount, forcek, sortpos;
1467  int (*match_process)(long long *slot);
1468  void (*show_process)(void *tb);
1469};
1470
1471// toys/posix/renice.c
1472
1473struct renice_data {
1474  long n;
1475};
1476
1477// toys/posix/sed.c
1478
1479struct sed_data {
1480  char *i;
1481  struct arg_list *f, *e;
1482
1483  // processed pattern list
1484  struct double_list *pattern;
1485
1486  char *nextline, *remember;
1487  void *restart, *lastregex;
1488  long nextlen, rememberlen, count;
1489  int fdout, noeol;
1490  unsigned xx;
1491  char delim;
1492};
1493
1494// toys/posix/sort.c
1495
1496struct sort_data {
1497  char *t;
1498  struct arg_list *k;
1499  char *o, *T, S;
1500
1501  void *key_list;
1502  int linecount;
1503  char **lines, *name;
1504};
1505
1506// toys/posix/split.c
1507
1508struct split_data {
1509  long n, l, b, a;
1510
1511  char *outfile;
1512};
1513
1514// toys/posix/strings.c
1515
1516struct strings_data {
1517  long n;
1518  char *t;
1519};
1520
1521// toys/posix/tail.c
1522
1523struct tail_data {
1524  long n, c;
1525
1526  int file_no, last_fd;
1527  struct xnotify *not;
1528};
1529
1530// toys/posix/tar.c
1531
1532struct tar_data {
1533  char *f, *C;
1534  struct arg_list *T, *X;
1535  char *to_command, *owner, *group, *mtime, *mode;
1536  struct arg_list *exclude;
1537
1538  struct double_list *incl, *excl, *seen;
1539  struct string_list *dirs;
1540  char *cwd;
1541  int fd, ouid, ggid, hlc, warn, adev, aino, sparselen;
1542  long long *sparse;
1543  time_t mtt;
1544
1545  // hardlinks seen so far (hlc many)
1546  struct {
1547    char *arg;
1548    ino_t ino;
1549    dev_t dev;
1550  } *hlx;
1551
1552  // Parsed information about a tar header.
1553  struct tar_header {
1554    char *name, *link_target, *uname, *gname;
1555    long long size, ssize;
1556    uid_t uid;
1557    gid_t gid;
1558    mode_t mode;
1559    time_t mtime;
1560    dev_t device;
1561  } hdr;
1562};
1563
1564// toys/posix/tee.c
1565
1566struct tee_data {
1567  void *outputs;
1568  int out;
1569};
1570
1571// toys/posix/touch.c
1572
1573struct touch_data {
1574  char *t, *r, *d;
1575};
1576
1577// toys/posix/ulimit.c
1578
1579struct ulimit_data {
1580  long P;
1581};
1582
1583// toys/posix/uniq.c
1584
1585struct uniq_data {
1586  long w, s, f;
1587
1588  long repeats;
1589};
1590
1591// toys/posix/uudecode.c
1592
1593struct uudecode_data {
1594  char *o;
1595};
1596
1597// toys/posix/wc.c
1598
1599struct wc_data {
1600  unsigned long totals[4];
1601};
1602
1603// toys/posix/xargs.c
1604
1605struct xargs_data {
1606  long s, n, P;
1607  char *E;
1608
1609  long entries, bytes;
1610  char delim;
1611  FILE *tty;
1612};
1613
1614extern union global_union {
1615	struct log_data log;
1616	struct demo_number_data demo_number;
1617	struct hello_data hello;
1618	struct skeleton_data skeleton;
1619	struct dmesg_data dmesg;
1620	struct gzip_data gzip;
1621	struct hostname_data hostname;
1622	struct killall_data killall;
1623	struct md5sum_data md5sum;
1624	struct mknod_data mknod;
1625	struct mktemp_data mktemp;
1626	struct mount_data mount;
1627	struct passwd_data passwd;
1628	struct pidof_data pidof;
1629	struct seq_data seq;
1630#ifdef OHOS_LITE
1631	struct su_data su;
1632#endif
1633	struct umount_data umount;
1634	struct ftpget_data ftpget;
1635	struct ifconfig_data ifconfig;
1636	struct microcom_data microcom;
1637	struct netcat_data netcat;
1638	struct netstat_data netstat;
1639	struct ping_data ping;
1640	struct sntp_data sntp;
1641	struct tunctl_data tunctl;
1642	struct acpi_data acpi;
1643	struct base64_data base64;
1644	struct blkid_data blkid;
1645	struct blockdev_data blockdev;
1646	struct chrt_data chrt;
1647	struct dos2unix_data dos2unix;
1648	struct fallocate_data fallocate;
1649	struct fmt_data fmt;
1650	struct free_data free;
1651	struct hexedit_data hexedit;
1652	struct hwclock_data hwclock;
1653	struct ionice_data ionice;
1654	struct login_data login;
1655	struct losetup_data losetup;
1656	struct lspci_data lspci;
1657	struct makedevs_data makedevs;
1658	struct mix_data mix;
1659	struct mkpasswd_data mkpasswd;
1660	struct mkswap_data mkswap;
1661	struct modinfo_data modinfo;
1662	struct nsenter_data nsenter;
1663	struct oneit_data oneit;
1664	struct pwgen_data pwgen;
1665	struct reboot_data reboot;
1666	struct setfattr_data setfattr;
1667	struct sha3sum_data sha3sum;
1668	struct shred_data shred;
1669	struct stat_data stat;
1670	struct swapon_data swapon;
1671	struct switch_root_data switch_root;
1672	struct tac_data tac;
1673	struct timeout_data timeout;
1674	struct truncate_data truncate;
1675	struct watch_data watch;
1676	struct xxd_data xxd;
1677	struct arp_data arp;
1678	struct arping_data arping;
1679	struct bc_data bc;
1680	struct bootchartd_data bootchartd;
1681	struct brctl_data brctl;
1682	struct chsh_data chsh;
1683	struct crond_data crond;
1684	struct crontab_data crontab;
1685	struct dd_data dd;
1686	struct dhcp_data dhcp;
1687	struct dhcp6_data dhcp6;
1688	struct dhcpd_data dhcpd;
1689	struct diff_data diff;
1690	struct dumpleases_data dumpleases;
1691	struct expr_data expr;
1692	struct fdisk_data fdisk;
1693	struct fold_data fold;
1694	struct fsck_data fsck;
1695	struct getfattr_data getfattr;
1696	struct getopt_data getopt;
1697	struct getty_data getty;
1698	struct groupadd_data groupadd;
1699	struct hexdump_data hexdump;
1700	struct host_data host;
1701	struct ip_data ip;
1702	struct ipcrm_data ipcrm;
1703	struct ipcs_data ipcs;
1704	struct klogd_data klogd;
1705	struct last_data last;
1706	struct lsof_data lsof;
1707	struct man_data man;
1708	struct mke2fs_data mke2fs;
1709	struct modprobe_data modprobe;
1710	struct more_data more;
1711	struct openvt_data openvt;
1712	struct route_data route;
1713	struct sh_data sh;
1714	struct strace_data strace;
1715	struct stty_data stty;
1716	struct sulogin_data sulogin;
1717	struct syslogd_data syslogd;
1718	struct tcpsvd_data tcpsvd;
1719	struct telnet_data telnet;
1720	struct telnetd_data telnetd;
1721	struct tftp_data tftp;
1722	struct tftpd_data tftpd;
1723	struct tr_data tr;
1724	struct traceroute_data traceroute;
1725	struct useradd_data useradd;
1726	struct vi_data vi;
1727        struct awk_data awk;
1728	struct wget_data wget;
1729	struct basename_data basename;
1730	struct chgrp_data chgrp;
1731	struct chmod_data chmod;
1732	struct cksum_data cksum;
1733	struct cmp_data cmp;
1734	struct cp_data cp;
1735	struct cpio_data cpio;
1736	struct cut_data cut;
1737	struct date_data date;
1738	struct df_data df;
1739	struct du_data du;
1740	struct env_data env;
1741	struct expand_data expand;
1742	struct file_data file;
1743	struct find_data find;
1744	struct grep_data grep;
1745	struct head_data head;
1746	struct iconv_data iconv;
1747	struct id_data id;
1748	struct kill_data kill;
1749	struct ln_data ln;
1750	struct logger_data logger;
1751	struct ls_data ls;
1752	struct mkdir_data mkdir;
1753	struct mkfifo_data mkfifo;
1754	struct nice_data nice;
1755	struct nl_data nl;
1756	struct od_data od;
1757	struct paste_data paste;
1758	struct patch_data patch;
1759	struct ps_data ps;
1760	struct renice_data renice;
1761	struct sed_data sed;
1762	struct sort_data sort;
1763	struct split_data split;
1764	struct strings_data strings;
1765	struct tail_data tail;
1766	struct tar_data tar;
1767	struct tee_data tee;
1768	struct touch_data touch;
1769	struct ulimit_data ulimit;
1770	struct uniq_data uniq;
1771	struct uudecode_data uudecode;
1772	struct wc_data wc;
1773	struct xargs_data xargs;
1774} this;
1775