1 // toys/android/getprop.c
2 
3 struct getprop_data {
4   size_t size;
5   char **nv; // name/value pairs: even=name, odd=value
6   struct selabel_handle *handle;
7 };
8 
9 // toys/android/log.c
10 
11 struct log_data {
12   char *t, *p;
13 };
14 
15 // toys/example/hello.c
16 
17 struct hello_data {
18   int unused;
19 };
20 
21 // toys/example/skeleton.c
22 
23 struct skeleton_data {
24   union {
25     struct {
26       char *b;
27       long c;
28       struct arg_list *d;
29       long e;
30       char *also, *blubber;
31     } s;
32     struct {
33       long b;
34     } a;
35   };
36 
37   int more_globals;
38 };
39 
40 // toys/lsb/dmesg.c
41 
42 struct dmesg_data {
43   long n, s;
44 
45   int use_color;
46   time_t tea;
47 };
48 
49 // toys/lsb/hostname.c
50 
51 struct hostname_data {
52   char *F;
53 };
54 
55 // toys/lsb/killall.c
56 
57 struct killall_data {
58   char *s;
59 
60   int signum;
61   pid_t cur_pid;
62   char **names;
63   short *err;
64 };
65 
66 // toys/lsb/md5sum.c
67 
68 struct md5sum_data {
69   int sawline;
70 
71   // Crypto variables blanked after summing
72   unsigned state[5];
73   unsigned oldstate[5];
74   uint64_t count;
75   union {
76     char c[64];
77     unsigned i[16];
78   } buffer;
79 };
80 
81 // toys/lsb/mknod.c
82 
83 struct mknod_data {
84   char *Z, *m;
85 };
86 
87 // toys/lsb/mktemp.c
88 
89 struct mktemp_data {
90   char *p;
91 };
92 
93 // toys/lsb/mount.c
94 
95 struct mount_data {
96   struct arg_list *optlist;
97   char *type;
98   char *bigO;
99 
100   unsigned long flags;
101   char *opts;
102   int okuser;
103 };
104 
105 // toys/lsb/passwd.c
106 
107 struct passwd_data {
108   char *a;
109 };
110 
111 // toys/lsb/pidof.c
112 
113 struct pidof_data {
114   char *omit;
115 };
116 
117 // toys/lsb/seq.c
118 
119 struct seq_data {
120   char *s, *f;
121 
122   int precision;
123 };
124 
125 // toys/lsb/su.c
126 
127 struct su_data {
128   char *s;
129   char *c;
130 };
131 
132 // toys/lsb/umount.c
133 
134 struct umount_data {
135   struct arg_list *t;
136 
137   char *types;
138 };
139 
140 // toys/net/ftpget.c
141 
142 struct ftpget_data {
143   char *u, *p, *P;
144 
145   int fd;
146 };
147 
148 // toys/net/ifconfig.c
149 
150 struct ifconfig_data {
151   int sockfd;
152 };
153 
154 // toys/net/microcom.c
155 
156 struct microcom_data {
157   char *s;
158 
159   int fd;
160   struct termios original_stdin_state, original_fd_state;
161 };
162 
163 // toys/net/netcat.c
164 
165 struct netcat_data {
166   char *f, *s;
167   long q, p, W, w;
168 };
169 
170 // toys/net/netstat.c
171 
172 struct netstat_data {
173   struct num_cache *inodes;
174   int wpad;
175 };;
176 
177 // toys/net/ping.c
178 
179 struct ping_data {
180   char *I;
181   long w, W, i, s, c, t, m;
182 
183   struct sockaddr *sa;
184   int sock;
185   unsigned long sent, recv, fugit, min, max;
186 };
187 
188 // toys/net/sntp.c
189 
190 struct sntp_data {
191   long r;
192   char *p, *m, *M;
193 };
194 
195 // toys/net/tunctl.c
196 
197 struct tunctl_data {
198   char *u;
199 };
200 
201 // toys/other/acpi.c
202 
203 struct acpi_data {
204   int ac, bat, therm, cool;
205   char *cpath;
206 };
207 
208 // toys/other/base64.c
209 
210 struct base64_data {
211   long w;
212 
213   unsigned total;
214 };
215 
216 // toys/other/blockdev.c
217 
218 struct blockdev_data {
219   long setbsz, setra;
220 };
221 
222 // toys/other/chrt.c
223 
224 struct chrt_data {
225   long p;
226 };
227 
228 // toys/other/dos2unix.c
229 
230 struct dos2unix_data {
231   char *tempfile;
232 };
233 
234 // toys/other/fallocate.c
235 
236 struct fallocate_data {
237   long offset;
238   long size;
239 };
240 
241 // toys/other/fmt.c
242 
243 struct fmt_data {
244   int width;
245 
246   int level, pos;
247 };
248 
249 // toys/other/free.c
250 
251 struct free_data {
252   unsigned bits;
253   unsigned long long units;
254   char *buf;
255 };
256 
257 // toys/other/hexedit.c
258 
259 struct hexedit_data {
260   char *data;
261   long long len, base;
262   int numlen, undo, undolen;
263   unsigned height;
264 };
265 
266 // toys/other/hwclock.c
267 
268 struct hwclock_data {
269   char *f;
270 
271   int utc;
272 };
273 
274 // toys/other/ionice.c
275 
276 struct ionice_data {
277   long pid;
278   long level;
279   long class;
280 };
281 
282 // toys/other/login.c
283 
284 struct login_data {
285   char *h, *f;
286 
287   int login_timeout, login_fail_timeout;
288 };
289 
290 // toys/other/losetup.c
291 
292 struct losetup_data {
293   char *j;
294   long o, S;
295 
296   int openflags;
297   dev_t jdev;
298   ino_t jino;
299 };
300 
301 // toys/other/lspci.c
302 
303 struct lspci_data {
304   char *i;
305   long n;
306 
307   FILE *db;
308 };
309 
310 // toys/other/makedevs.c
311 
312 struct makedevs_data {
313   char *fname;
314 };
315 
316 // toys/other/mix.c
317 
318 struct mix_data {
319    long r, l;
320    char *d, *c;
321 };
322 
323 // toys/other/mkpasswd.c
324 
325 struct mkpasswd_data {
326   long P;
327   char *m, *S;
328 };
329 
330 // toys/other/mkswap.c
331 
332 struct mkswap_data {
333   char *L;
334 };
335 
336 // toys/other/modinfo.c
337 
338 struct modinfo_data {
339   char *F, *k, *b;
340 
341   long mod;
342 };
343 
344 // toys/other/nsenter.c
345 
346 struct nsenter_data {
347   char *Uupnmi[6];
348   long t;
349 };
350 
351 // toys/other/oneit.c
352 
353 struct oneit_data {
354   char *c;
355 };
356 
357 // toys/other/setfattr.c
358 
359 struct setfattr_data {
360   char *x, *v, *n;
361 };
362 
363 // toys/other/shred.c
364 
365 struct shred_data {
366   long o, n, s;
367 };
368 
369 // toys/other/stat.c
370 
371 struct stat_data {
372   char *c;
373 
374   union {
375     struct stat st;
376     struct statfs sf;
377   } stat;
378   char *file, *pattern;
379   int patlen;
380 };
381 
382 // toys/other/swapon.c
383 
384 struct swapon_data {
385   long p;
386 };
387 
388 // toys/other/switch_root.c
389 
390 struct switch_root_data {
391   char *c;
392 
393   dev_t rootdev;
394 };
395 
396 // toys/other/timeout.c
397 
398 struct timeout_data {
399   char *s, *k;
400 
401   int nextsig;
402   pid_t pid;
403   struct timeval ktv;
404   struct itimerval itv;
405 };
406 
407 // toys/other/truncate.c
408 
409 struct truncate_data {
410   char *s;
411 
412   long size;
413   int type;
414 };
415 
416 // toys/other/watch.c
417 
418 struct watch_data {
419   int n;
420 
421   pid_t pid, oldpid;
422 };
423 
424 // toys/other/xxd.c
425 
426 struct xxd_data {
427   long s, g, o, l, c;
428 };
429 
430 // toys/pending/arp.c
431 
432 struct arp_data {
433     char *hw_type;
434     char *af_type_A;
435     char *af_type_p;
436     char *interface;
437 
438     int sockfd;
439     char *device;
440 };
441 
442 // toys/pending/arping.c
443 
444 struct arping_data {
445     long count;
446     unsigned long time_out;
447     char *iface;
448     char *src_ip;
449 
450     int sockfd;
451     unsigned long start, end;
452     unsigned sent_at, sent_nr, rcvd_nr, brd_sent, rcvd_req, brd_rcv,
453              unicast_flag;
454 };
455 
456 // toys/pending/bc.c
457 
458 struct bc_data {
459   // This actually needs to be a BcVm*, but the toybox build
460   // system complains if I make it so. Instead, we'll just cast.
461   char *vm;
462 
463   size_t nchars;
464   char *file, sig, max_ibase;
465   uint16_t line_len;
466 };
467 
468 // toys/pending/bootchartd.c
469 
470 struct bootchartd_data {
471   char buf[32];
472   long smpl_period_usec;
473   int proc_accounting;
474   int is_login;
475 
476   void *head;
477 };
478 
479 // toys/pending/brctl.c
480 
481 struct brctl_data {
482     int sockfd;
483 };
484 
485 // toys/pending/crond.c
486 
487 struct crond_data {
488   char *crontabs_dir;
489   char *logfile;
490   int loglevel_d;
491   int loglevel;
492 
493   time_t crontabs_dir_mtime;
494   uint8_t flagd;
495 };
496 
497 // toys/pending/crontab.c
498 
499 struct crontab_data {
500   char *user;
501   char *cdir;
502 };
503 
504 // toys/pending/dd.c
505 
506 struct dd_data {
507   int show_xfer, show_records;
508   unsigned long long bytes, c_count, in_full, in_part, out_full, out_part;
509   struct timeval start;
510   struct {
511     char *name;
512     int fd;
513     unsigned char *buff, *bp;
514     long sz, count;
515     unsigned long long offset;
516   } in, out;
517 };;
518 
519 // toys/pending/dhcp.c
520 
521 struct dhcp_data {
522     char *iface;
523     char *pidfile;
524     char *script;
525     long retries;
526     long timeout;
527     long tryagain;
528     struct arg_list *req_opt;
529     char *req_ip;
530     struct arg_list *pkt_opt;
531     char *fdn_name;
532     char *hostname;
533     char *vendor_cls;
534 };
535 
536 // toys/pending/dhcp6.c
537 
538 struct dhcp6_data {
539   char *interface_name, *pidfile, *script;
540   long retry, timeout, errortimeout;
541   char *req_ip;
542   int length, state, request_length, sock, sock1, status, retval, retries;
543   struct timeval tv;
544   uint8_t transction_id[3];
545   struct sockaddr_in6 input_socket6;
546 };
547 
548 // toys/pending/dhcpd.c
549 
550 struct dhcpd_data {
551     char *iface;
552     long port;
553 };;
554 
555 // toys/pending/diff.c
556 
557 struct diff_data {
558   long ct;
559   char *start;
560   struct arg_list *L_list;
561 
562   int dir_num, size, is_binary, status, change, len[2];
563   int *offset[2];
564   struct stat st[2];
565 };
566 
567 // toys/pending/dumpleases.c
568 
569 struct dumpleases_data {
570     char *file;
571 };
572 
573 // toys/pending/expr.c
574 
575 struct expr_data {
576   char **tok; // current token, not on the stack since recursive calls mutate it
577 
578   char *refree;
579 };
580 
581 // toys/pending/fdisk.c
582 
583 struct fdisk_data {
584   long sect_sz;
585   long sectors;
586   long heads;
587   long cylinders;
588 };
589 
590 // toys/pending/fold.c
591 
592 struct fold_data {
593   int width;
594 };
595 
596 // toys/pending/fsck.c
597 
598 struct fsck_data {
599   int fd_num;
600   char *t_list;
601 
602   struct double_list *devices;
603   char *arr_flag;
604   char **arr_type;
605   int negate;
606   int sum_status;
607   int nr_run;
608   int sig_num;
609   long max_nr_run;
610 };
611 
612 // toys/pending/getfattr.c
613 
614 struct getfattr_data {
615   char *n;
616 };
617 
618 // toys/pending/getty.c
619 
620 struct getty_data {
621   char *issue_str;
622   char *login_str;
623   char *init_str;
624   char *host_str;
625   long timeout;
626 
627   char *tty_name;
628   int  speeds[20];
629   int  sc;
630   struct termios termios;
631   char buff[128];
632 };
633 
634 // toys/pending/groupadd.c
635 
636 struct groupadd_data {
637   long gid;
638 };
639 
640 // toys/pending/gzip.c
641 
642 struct gzip_data {
643   int level;
644 };
645 
646 // toys/pending/host.c
647 
648 struct host_data {
649   char *type_str;
650 };
651 
652 // toys/pending/ip.c
653 
654 struct ip_data {
655   char stats, singleline, flush, *filter_dev, gbuf[8192];
656   int sockfd, connected, from_ok, route_cmd;
657   int8_t addressfamily, is_addr;
658 };
659 
660 // toys/pending/ipcrm.c
661 
662 struct ipcrm_data {
663   struct arg_list *qkey;
664   struct arg_list *qid;
665   struct arg_list *skey;
666   struct arg_list *sid;
667   struct arg_list *mkey;
668   struct arg_list *mid;
669 };
670 
671 // toys/pending/ipcs.c
672 
673 struct ipcs_data {
674   int id;
675 };
676 
677 // toys/pending/klogd.c
678 
679 struct klogd_data {
680   long level;
681 
682   int fd;
683 };
684 
685 // toys/pending/last.c
686 
687 struct last_data {
688   char *file;
689 
690   struct arg_list *list;
691 };
692 
693 // toys/pending/lsof.c
694 
695 struct lsof_data {
696   struct arg_list *p;
697 
698   struct stat *sought_files;
699   struct double_list *all_sockets, *files;
700   int last_shown_pid, shown_header;
701 };
702 
703 // toys/pending/mke2fs.c
704 
705 struct mke2fs_data {
706   // Command line arguments.
707   long blocksize;
708   long bytes_per_inode;
709   long inodes;           // Total inodes in filesystem.
710   long reserved_percent; // Integer precent of space to reserve for root.
711   char *gendir;          // Where to read dirtree from.
712 
713   // Internal data.
714   struct dirtree *dt;    // Tree of files to copy into the new filesystem.
715   unsigned treeblocks;   // Blocks used by dt
716   unsigned treeinodes;   // Inodes used by dt
717 
718   unsigned blocks;       // Total blocks in the filesystem.
719   unsigned freeblocks;   // Free blocks in the filesystem.
720   unsigned inodespg;     // Inodes per group
721   unsigned groups;       // Total number of block groups.
722   unsigned blockbits;    // Bits per block.  (Also blocks per group.)
723 
724   // For gene2fs
725   unsigned nextblock;    // Next data block to allocate
726   unsigned nextgroup;    // Next group we'll be allocating from
727   int fsfd;              // File descriptor of filesystem (to output to).
728 };
729 
730 // toys/pending/modprobe.c
731 
732 struct modprobe_data {
733   struct arg_list *dirs;
734 
735   struct arg_list *probes;
736   struct arg_list *dbase[256];
737   char *cmdopts;
738   int nudeps;
739   uint8_t symreq;
740 };
741 
742 // toys/pending/more.c
743 
744 struct more_data {
745   struct termios inf;
746   int cin_fd;
747 };
748 
749 // toys/pending/openvt.c
750 
751 struct openvt_data {
752   unsigned long vt_num;
753 };
754 
755 // toys/pending/route.c
756 
757 struct route_data {
758   char *family;
759 };
760 
761 // toys/pending/sh.c
762 
763 struct sh_data {
764   char *command;
765 
766   long lineno;
767 };
768 
769 // toys/pending/stty.c
770 
771 struct stty_data {
772   char *device;
773 
774   int fd, col;
775   unsigned output_cols;
776 };
777 
778 // toys/pending/sulogin.c
779 
780 struct sulogin_data {
781   long timeout;
782   struct termios crntio;
783 };
784 
785 // toys/pending/syslogd.c
786 
787 struct syslogd_data {
788   char *socket;
789   char *config_file;
790   char *unix_socket;
791   char *logfile;
792   long interval;
793   long rot_size;
794   long rot_count;
795   char *remote_log;
796   long log_prio;
797 
798   struct unsocks *lsocks;  // list of listen sockets
799   struct logfile *lfiles;  // list of write logfiles
800   int sigfd[2];
801 };
802 
803 // toys/pending/tar.c
804 
805 struct tar_data {
806   char *fname;
807   char *dir;
808   struct arg_list *inc_file;
809   struct arg_list *exc_file;
810   char *tocmd;
811   struct arg_list *exc;
812 
813   struct arg_list *inc, *pass;
814   void *inodes, *handle;
815 };
816 
817 // toys/pending/tcpsvd.c
818 
819 struct tcpsvd_data {
820   char *name;
821   char *user;
822   long bn;
823   char *nmsg;
824   long cn;
825 
826   int maxc;
827   int count_all;
828   int udp;
829 };
830 
831 // toys/pending/telnet.c
832 
833 struct telnet_data {
834   int port;
835   int sfd;
836   char buff[128];
837   int pbuff;
838   char iac[256];
839   int piac;
840   char *ttype;
841   struct termios def_term;
842   struct termios raw_term;
843   uint8_t term_ok;
844   uint8_t term_mode;
845   uint8_t flags;
846   unsigned win_width;
847   unsigned win_height;
848 };
849 
850 // toys/pending/telnetd.c
851 
852 struct telnetd_data {
853     char *login_path;
854     char *issue_path;
855     int port;
856     char *host_addr;
857     long w_sec;
858 
859     int gmax_fd;
860     pid_t fork_pid;
861 };
862 
863 // toys/pending/tftp.c
864 
865 struct tftp_data {
866   char *local_file;
867   char *remote_file;
868   long block_size;
869 
870   struct sockaddr_storage inaddr;
871   int af;
872 };
873 
874 // toys/pending/tftpd.c
875 
876 struct tftpd_data {
877   char *user;
878 
879   long sfd;
880   struct passwd *pw;
881 };
882 
883 // toys/pending/tr.c
884 
885 struct tr_data {
886   short map[256]; //map of chars
887   int len1, len2;
888 };
889 
890 // toys/pending/traceroute.c
891 
892 struct traceroute_data {
893   long max_ttl;
894   long port;
895   long ttl_probes;
896   char *src_ip;
897   long tos;
898   long wait_time;
899   struct arg_list *loose_source;
900   long pause_time;
901   long first_ttl;
902   char *iface;
903 
904   uint32_t gw_list[9];
905   int recv_sock;
906   int snd_sock;
907   unsigned msg_len;
908   char *packet;
909   uint32_t ident;
910   int istraceroute6;
911 };
912 
913 // toys/pending/useradd.c
914 
915 struct useradd_data {
916   char *dir;
917   char *gecos;
918   char *shell;
919   char *u_grp;
920   long uid;
921 
922   long gid;
923 };
924 
925 // toys/pending/vi.c
926 
927 struct vi_data {
928     int cur_col;
929     int cur_row;
930     unsigned screen_height;
931     unsigned screen_width;
932     int vi_mode;
933 };
934 
935 // toys/pending/wget.c
936 
937 struct wget_data {
938   char *filename;
939 };
940 
941 // toys/posix/basename.c
942 
943 struct basename_data {
944   char *s;
945 };
946 
947 // toys/posix/chgrp.c
948 
949 struct chgrp_data {
950   uid_t owner;
951   gid_t group;
952   char *owner_name, *group_name;
953   int symfollow;
954 };
955 
956 // toys/posix/chmod.c
957 
958 struct chmod_data {
959   char *mode;
960 };
961 
962 // toys/posix/cksum.c
963 
964 struct cksum_data {
965   unsigned crc_table[256];
966 };
967 
968 // toys/posix/cmp.c
969 
970 struct cmp_data {
971   int fd;
972   char *name;
973 };
974 
975 // toys/posix/cp.c
976 
977 struct cp_data {
978   union {
979     // install's options
980     struct {
981       char *g, *o, *m;
982     } i;
983     // cp's options
984     struct {
985       char *preserve;
986     } c;
987   };
988 
989   char *destname;
990   struct stat top;
991   int (*callback)(struct dirtree *try);
992   uid_t uid;
993   gid_t gid;
994   int pflags;
995 };
996 
997 // toys/posix/cpio.c
998 
999 struct cpio_data {
1000   char *F, *p, *H;
1001 };
1002 
1003 // toys/posix/cut.c
1004 
1005 struct cut_data {
1006   char *d, *O;
1007   struct arg_list *select[5]; // we treat them the same, so loop through
1008 
1009   int pairs;
1010   regex_t reg;
1011 };
1012 
1013 // toys/posix/date.c
1014 
1015 struct date_data {
1016   char *r, *D, *d;
1017 
1018   unsigned nano;
1019 };
1020 
1021 // toys/posix/df.c
1022 
1023 struct df_data {
1024   struct arg_list *t;
1025 
1026   long units;
1027   int column_widths[5];
1028   int header_shown;
1029 };
1030 
1031 // toys/posix/du.c
1032 
1033 struct du_data {
1034   long d;
1035 
1036   unsigned long depth, total;
1037   dev_t st_dev;
1038   void *inodes;
1039 };
1040 
1041 // toys/posix/env.c
1042 
1043 struct env_data {
1044   struct arg_list *u;
1045 };;
1046 
1047 // toys/posix/expand.c
1048 
1049 struct expand_data {
1050   struct arg_list *t;
1051 
1052   unsigned tabcount, *tab;
1053 };
1054 
1055 // toys/posix/file.c
1056 
1057 struct file_data {
1058   int max_name_len;
1059 
1060   off_t len;
1061 };
1062 
1063 // toys/posix/find.c
1064 
1065 struct find_data {
1066   char **filter;
1067   struct double_list *argdata;
1068   int topdir, xdev, depth;
1069   time_t now;
1070   long max_bytes;
1071 };
1072 
1073 // toys/posix/grep.c
1074 
1075 struct grep_data {
1076   long m, A, B, C;
1077   struct arg_list *f, *e, *M, *S;
1078   char *color;
1079 
1080   char *purple, *cyan, *red, *green, *grey;
1081   struct double_list *reg;
1082   char indelim, outdelim;
1083   int found, tried;
1084 };
1085 
1086 // toys/posix/head.c
1087 
1088 struct head_data {
1089   long c, n;
1090 
1091   int file_no;
1092 };
1093 
1094 // toys/posix/iconv.c
1095 
1096 struct iconv_data {
1097   char *f, *t;
1098 
1099   void *ic;
1100 };
1101 
1102 // toys/posix/id.c
1103 
1104 struct id_data {
1105   int is_groups;
1106 };
1107 
1108 // toys/posix/kill.c
1109 
1110 struct kill_data {
1111   char *s;
1112   struct arg_list *o;
1113 };
1114 
1115 // toys/posix/logger.c
1116 
1117 struct logger_data {
1118   char *p, *t;
1119 };
1120 
1121 // toys/posix/ls.c
1122 
1123 struct ls_data {
1124   long l;
1125   char *color;
1126 
1127   struct dirtree *files, *singledir;
1128   unsigned screen_width;
1129   int nl_title;
1130   char *escmore;
1131 };
1132 
1133 // toys/posix/mkdir.c
1134 
1135 struct mkdir_data {
1136   char *m, *Z;
1137 };
1138 
1139 // toys/posix/mkfifo.c
1140 
1141 struct mkfifo_data {
1142   char *m;
1143   char *Z;
1144 
1145   mode_t mode;
1146 };
1147 
1148 // toys/posix/nice.c
1149 
1150 struct nice_data {
1151   long n;
1152 };
1153 
1154 // toys/posix/nl.c
1155 
1156 struct nl_data {
1157   char *s, *n, *b;
1158   long w, l, v;
1159 
1160   // Count of consecutive blank lines for -l has to persist between files
1161   long lcount;
1162 };
1163 
1164 // toys/posix/od.c
1165 
1166 struct od_data {
1167   struct arg_list *t;
1168   char *A;
1169   long N, w, j;
1170 
1171   int address_idx;
1172   unsigned types, leftover, star;
1173   char *buf; // Points to buffers[0] or buffers[1].
1174   char *bufs[2]; // Used to detect duplicate lines.
1175   off_t pos;
1176 };
1177 
1178 // toys/posix/paste.c
1179 
1180 struct paste_data {
1181   char *d;
1182 
1183   int files;
1184 };
1185 
1186 // toys/posix/patch.c
1187 
1188 struct patch_data {
1189   char *i, *d;
1190   long p;
1191 
1192   struct double_list *current_hunk;
1193   long oldline, oldlen, newline, newlen;
1194   long linenum;
1195   int context, state, filein, fileout, filepatch, hunknum;
1196   char *tempname;
1197 };
1198 
1199 // toys/posix/ps.c
1200 
1201 struct ps_data {
1202   union {
1203     struct {
1204       struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k;
1205     } ps;
1206     struct {
1207       long n, m, d, s;
1208       struct arg_list *u, *p, *o, *k, *O;
1209     } top;
1210     struct {
1211       char *L;
1212       struct arg_list *G, *g, *P, *s, *t, *U, *u;
1213       char *d;
1214 
1215       void *regexes, *snapshot;
1216       int signal;
1217       pid_t self, match;
1218     } pgrep;
1219   };
1220 
1221   struct ptr_len gg, GG, pp, PP, ss, tt, uu, UU;
1222   struct dirtree *threadparent;
1223   unsigned width, height;
1224   dev_t tty;
1225   void *fields, *kfields;
1226   long long ticks, bits, time;
1227   int kcount, forcek, sortpos;
1228   int (*match_process)(long long *slot);
1229   void (*show_process)(void *tb);
1230 };
1231 
1232 // toys/posix/renice.c
1233 
1234 struct renice_data {
1235   long n;
1236 };
1237 
1238 // toys/posix/sed.c
1239 
1240 struct sed_data {
1241   char *i;
1242   struct arg_list *f, *e;
1243 
1244   // processed pattern list
1245   struct double_list *pattern;
1246 
1247   char *nextline, *remember;
1248   void *restart, *lastregex;
1249   long nextlen, rememberlen, count;
1250   int fdout, noeol;
1251   unsigned xx;
1252   char delim;
1253 };
1254 
1255 // toys/posix/sort.c
1256 
1257 struct sort_data {
1258   char *t;
1259   struct arg_list *k;
1260   char *o, *T, S;
1261 
1262   void *key_list;
1263   int linecount;
1264   char **lines;
1265 };
1266 
1267 // toys/posix/split.c
1268 
1269 struct split_data {
1270   long l, b, a;
1271 
1272   char *outfile;
1273 };
1274 
1275 // toys/posix/strings.c
1276 
1277 struct strings_data {
1278   long n;
1279   char *t;
1280 };
1281 
1282 // toys/posix/tail.c
1283 
1284 struct tail_data {
1285   long n, c;
1286 
1287   int file_no, ffd, *files;
1288 };
1289 
1290 // toys/posix/tee.c
1291 
1292 struct tee_data {
1293   void *outputs;
1294 };
1295 
1296 // toys/posix/touch.c
1297 
1298 struct touch_data {
1299   char *t, *r, *d;
1300 };
1301 
1302 // toys/posix/ulimit.c
1303 
1304 struct ulimit_data {
1305   long P;
1306 };
1307 
1308 // toys/posix/uniq.c
1309 
1310 struct uniq_data {
1311   long w, s, f;
1312 
1313   long repeats;
1314 };
1315 
1316 // toys/posix/uudecode.c
1317 
1318 struct uudecode_data {
1319   char *o;
1320 };
1321 
1322 // toys/posix/wc.c
1323 
1324 struct wc_data {
1325   unsigned long totals[4];
1326 };
1327 
1328 // toys/posix/xargs.c
1329 
1330 struct xargs_data {
1331   long s, n;
1332   char *E, *I;
1333 
1334   long entries, bytes;
1335   char delim;
1336 };
1337 
1338 extern union global_union {
1339 	struct getprop_data getprop;
1340 	struct log_data log;
1341 	struct hello_data hello;
1342 	struct skeleton_data skeleton;
1343 	struct dmesg_data dmesg;
1344 	struct hostname_data hostname;
1345 	struct killall_data killall;
1346 	struct md5sum_data md5sum;
1347 	struct mknod_data mknod;
1348 	struct mktemp_data mktemp;
1349 	struct mount_data mount;
1350 	struct passwd_data passwd;
1351 	struct pidof_data pidof;
1352 	struct seq_data seq;
1353 	struct su_data su;
1354 	struct umount_data umount;
1355 	struct ftpget_data ftpget;
1356 	struct ifconfig_data ifconfig;
1357 	struct microcom_data microcom;
1358 	struct netcat_data netcat;
1359 	struct netstat_data netstat;
1360 	struct ping_data ping;
1361 	struct sntp_data sntp;
1362 	struct tunctl_data tunctl;
1363 	struct acpi_data acpi;
1364 	struct base64_data base64;
1365 	struct blockdev_data blockdev;
1366 	struct chrt_data chrt;
1367 	struct dos2unix_data dos2unix;
1368 	struct fallocate_data fallocate;
1369 	struct fmt_data fmt;
1370 	struct free_data free;
1371 	struct hexedit_data hexedit;
1372 	struct hwclock_data hwclock;
1373 	struct ionice_data ionice;
1374 	struct login_data login;
1375 	struct losetup_data losetup;
1376 	struct lspci_data lspci;
1377 	struct makedevs_data makedevs;
1378 	struct mix_data mix;
1379 	struct mkpasswd_data mkpasswd;
1380 	struct mkswap_data mkswap;
1381 	struct modinfo_data modinfo;
1382 	struct nsenter_data nsenter;
1383 	struct oneit_data oneit;
1384 	struct setfattr_data setfattr;
1385 	struct shred_data shred;
1386 	struct stat_data stat;
1387 	struct swapon_data swapon;
1388 	struct switch_root_data switch_root;
1389 	struct timeout_data timeout;
1390 	struct truncate_data truncate;
1391 	struct watch_data watch;
1392 	struct xxd_data xxd;
1393 	struct arp_data arp;
1394 	struct arping_data arping;
1395 	struct bc_data bc;
1396 	struct bootchartd_data bootchartd;
1397 	struct brctl_data brctl;
1398 	struct crond_data crond;
1399 	struct crontab_data crontab;
1400 	struct dd_data dd;
1401 	struct dhcp_data dhcp;
1402 	struct dhcp6_data dhcp6;
1403 	struct dhcpd_data dhcpd;
1404 	struct diff_data diff;
1405 	struct dumpleases_data dumpleases;
1406 	struct expr_data expr;
1407 	struct fdisk_data fdisk;
1408 	struct fold_data fold;
1409 	struct fsck_data fsck;
1410 	struct getfattr_data getfattr;
1411 	struct getty_data getty;
1412 	struct groupadd_data groupadd;
1413 	struct gzip_data gzip;
1414 	struct host_data host;
1415 	struct ip_data ip;
1416 	struct ipcrm_data ipcrm;
1417 	struct ipcs_data ipcs;
1418 	struct klogd_data klogd;
1419 	struct last_data last;
1420 	struct lsof_data lsof;
1421 	struct mke2fs_data mke2fs;
1422 	struct modprobe_data modprobe;
1423 	struct more_data more;
1424 	struct openvt_data openvt;
1425 	struct route_data route;
1426 	struct sh_data sh;
1427 	struct stty_data stty;
1428 	struct sulogin_data sulogin;
1429 	struct syslogd_data syslogd;
1430 	struct tar_data tar;
1431 	struct tcpsvd_data tcpsvd;
1432 	struct telnet_data telnet;
1433 	struct telnetd_data telnetd;
1434 	struct tftp_data tftp;
1435 	struct tftpd_data tftpd;
1436 	struct tr_data tr;
1437 	struct traceroute_data traceroute;
1438 	struct useradd_data useradd;
1439 	struct vi_data vi;
1440 	struct wget_data wget;
1441 	struct basename_data basename;
1442 	struct chgrp_data chgrp;
1443 	struct chmod_data chmod;
1444 	struct cksum_data cksum;
1445 	struct cmp_data cmp;
1446 	struct cp_data cp;
1447 	struct cpio_data cpio;
1448 	struct cut_data cut;
1449 	struct date_data date;
1450 	struct df_data df;
1451 	struct du_data du;
1452 	struct env_data env;
1453 	struct expand_data expand;
1454 	struct file_data file;
1455 	struct find_data find;
1456 	struct grep_data grep;
1457 	struct head_data head;
1458 	struct iconv_data iconv;
1459 	struct id_data id;
1460 	struct kill_data kill;
1461 	struct logger_data logger;
1462 	struct ls_data ls;
1463 	struct mkdir_data mkdir;
1464 	struct mkfifo_data mkfifo;
1465 	struct nice_data nice;
1466 	struct nl_data nl;
1467 	struct od_data od;
1468 	struct paste_data paste;
1469 	struct patch_data patch;
1470 	struct ps_data ps;
1471 	struct renice_data renice;
1472 	struct sed_data sed;
1473 	struct sort_data sort;
1474 	struct split_data split;
1475 	struct strings_data strings;
1476 	struct tail_data tail;
1477 	struct tee_data tee;
1478 	struct touch_data touch;
1479 	struct ulimit_data ulimit;
1480 	struct uniq_data uniq;
1481 	struct uudecode_data uudecode;
1482 	struct wc_data wc;
1483 	struct xargs_data xargs;
1484 } this;
1485