toys.h revision 09ea7ac1a269db3c9a3b76840b37a7cb1eccbc24
1c56215062c961402515daeef8330ed75cd94af29landley/* vi: set ts=4 :*/ 2c56215062c961402515daeef8330ed75cd94af29landley/* Toybox infrastructure. 3c56215062c961402515daeef8330ed75cd94af29landley * 4c56215062c961402515daeef8330ed75cd94af29landley * Copyright 2006 Rob Landley <rob@landley.net> 5c56215062c961402515daeef8330ed75cd94af29landley * 6c56215062c961402515daeef8330ed75cd94af29landley * Licensed under GPL version 2, see file LICENSE in this tarball for details. 7c56215062c961402515daeef8330ed75cd94af29landley */ 8c56215062c961402515daeef8330ed75cd94af29landley 909ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley#include <ctype.h> 1009ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley#include <errno.h> 1109ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley#include <fcntl.h> 1209ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley#include <inttypes.h> 134f344e356d2c36c4b1df46917eaef25f82ca79a9landley#include <limits.h> 144f344e356d2c36c4b1df46917eaef25f82ca79a9landley#include <stdarg.h> 1509ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley#include <stdint.h> 16c56215062c961402515daeef8330ed75cd94af29landley#include <stdio.h> 174f344e356d2c36c4b1df46917eaef25f82ca79a9landley#include <stdlib.h> 184f344e356d2c36c4b1df46917eaef25f82ca79a9landley#include <string.h> 19c56215062c961402515daeef8330ed75cd94af29landley#include <strings.h> 2000f87f150c3c9769e09e688bb9779947d64eb9d3landley#include <sys/stat.h> 2109ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley#include <sys/statvfs.h> 2209ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley#include <sys/types.h> 2309ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley#include <sys/wait.h> 244f344e356d2c36c4b1df46917eaef25f82ca79a9landley#include <unistd.h> 25c56215062c961402515daeef8330ed75cd94af29landley 264f344e356d2c36c4b1df46917eaef25f82ca79a9landley#include "lib/lib.h" 27c56215062c961402515daeef8330ed75cd94af29landley 284f344e356d2c36c4b1df46917eaef25f82ca79a9landleyint cd_main(void); 29cd9dfc3b7b73715840b63180e2e4bfdb6e7ca9a4landleyint df_main(void); 304f344e356d2c36c4b1df46917eaef25f82ca79a9landleyint exit_main(void); 31c56215062c961402515daeef8330ed75cd94af29landleyint toybox_main(void); 32c56215062c961402515daeef8330ed75cd94af29landleyint toysh_main(void); 33c56215062c961402515daeef8330ed75cd94af29landley 344f344e356d2c36c4b1df46917eaef25f82ca79a9landley#define TOYFLAG_USR (1<<0) 354f344e356d2c36c4b1df46917eaef25f82ca79a9landley#define TOYFLAG_BIN (1<<1) 364f344e356d2c36c4b1df46917eaef25f82ca79a9landley#define TOYFLAG_SBIN (1<<2) 374f344e356d2c36c4b1df46917eaef25f82ca79a9landley#define TOYMASK_LOCATION ((1<<4)-1) 384f344e356d2c36c4b1df46917eaef25f82ca79a9landley 394f344e356d2c36c4b1df46917eaef25f82ca79a9landley#define TOYFLAG_NOFORK (1<<4) 404f344e356d2c36c4b1df46917eaef25f82ca79a9landley 41c56215062c961402515daeef8330ed75cd94af29landleyextern struct toy_list { 42c56215062c961402515daeef8330ed75cd94af29landley char *name; 43c56215062c961402515daeef8330ed75cd94af29landley int (*toy_main)(void); 444f344e356d2c36c4b1df46917eaef25f82ca79a9landley int flags; 45c56215062c961402515daeef8330ed75cd94af29landley} toy_list[]; 464f344e356d2c36c4b1df46917eaef25f82ca79a9landleystruct toy_list *toy_find(char *name); 47cd9dfc3b7b73715840b63180e2e4bfdb6e7ca9a4landleyvoid toy_init(struct toy_list *which, char *argv[]); 48cd9dfc3b7b73715840b63180e2e4bfdb6e7ca9a4landleyvoid toy_exec(char *argv[]); 49c56215062c961402515daeef8330ed75cd94af29landley 50c56215062c961402515daeef8330ed75cd94af29landley// Global context for this applet. 51c56215062c961402515daeef8330ed75cd94af29landley 52c56215062c961402515daeef8330ed75cd94af29landleyextern struct toy_context { 534f344e356d2c36c4b1df46917eaef25f82ca79a9landley struct toy_list *which; // Which entry in toy_list is this one? 544f344e356d2c36c4b1df46917eaef25f82ca79a9landley int exitval; // Value error_exit feeds to exit() 5509ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley int optflags; // Command line option flags 5609ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley char **argv; // Command line arguments 57c56215062c961402515daeef8330ed75cd94af29landley char buf[4096]; 58c56215062c961402515daeef8330ed75cd94af29landley} toys; 59c56215062c961402515daeef8330ed75cd94af29landley 604f344e356d2c36c4b1df46917eaef25f82ca79a9landleystruct exit_data {;}; 614f344e356d2c36c4b1df46917eaef25f82ca79a9landleystruct cd_data {;}; 62c56215062c961402515daeef8330ed75cd94af29landleystruct toybox_data {;}; 63c56215062c961402515daeef8330ed75cd94af29landleystruct toysh_data {;}; 6409ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landleystruct df_data { 6509ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley struct string_list *fstype; 6609ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley long units; 6709ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley}; 68c56215062c961402515daeef8330ed75cd94af29landley 69c56215062c961402515daeef8330ed75cd94af29landleyunion toy_union { 704f344e356d2c36c4b1df46917eaef25f82ca79a9landley struct exit_data exit; 714f344e356d2c36c4b1df46917eaef25f82ca79a9landley struct cd_data cd; 72c56215062c961402515daeef8330ed75cd94af29landley struct toybox_data toybox; 73c56215062c961402515daeef8330ed75cd94af29landley struct toysh_data toysh; 74c56215062c961402515daeef8330ed75cd94af29landley struct df_data df; 75c56215062c961402515daeef8330ed75cd94af29landley} toy; 76c56215062c961402515daeef8330ed75cd94af29landley 77cd9dfc3b7b73715840b63180e2e4bfdb6e7ca9a4landley// Pending the addition of menuconfig... 78cd9dfc3b7b73715840b63180e2e4bfdb6e7ca9a4landley 79cd9dfc3b7b73715840b63180e2e4bfdb6e7ca9a4landley#define CFG_TOYS_FREE 0 80cd9dfc3b7b73715840b63180e2e4bfdb6e7ca9a4landley 81cd9dfc3b7b73715840b63180e2e4bfdb6e7ca9a4landley#define CFG_TOYSH_TTY 0 // Terminal control 82cd9dfc3b7b73715840b63180e2e4bfdb6e7ca9a4landley#define CFG_TOYSH_JOBCTL 0 // &, fg, bg, jobs. ctrl-z with tty. 83cd9dfc3b7b73715840b63180e2e4bfdb6e7ca9a4landley#define CFG_TOYSH_FLOWCTL 0 // if, while, for, functions { } 84cd9dfc3b7b73715840b63180e2e4bfdb6e7ca9a4landley#define CFG_TOYSH_ENVVARS 0 // Environment variables 85cd9dfc3b7b73715840b63180e2e4bfdb6e7ca9a4landley#define CFG_TOYSH_LOCVARS 0 // Local, synthetic, fancy prompts, set, $? 86cd9dfc3b7b73715840b63180e2e4bfdb6e7ca9a4landley#define CFG_TOYSH_PIPES 0 // Pipes and redirects: | > < >> << && || & () ; 8709ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley 8809ea7ac1a269db3c9a3b76840b37a7cb1eccbc24landley#define CFG_DF_PEDANTIC 1 // Support -P and -k in df 89