1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
/*
* Copyright (c) 2014 by David I. Bell
* Permission is granted to use, distribute, or modify this source,
* provided that this copyright notice remains intact.
*
* Definitions for stand-alone shell for system maintainance for Linux.
*/
#ifndef SASH_H
#define SASH_H
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <memory.h>
#include <time.h>
#include <ctype.h>
#if __OpenBSD__
#include <sys/param.h>
#endif
#if __Linux__
#include <malloc.h>
#endif
#define PATH_LEN 1024
#define CMD_LEN 10240
#define ALIAS_ALLOC 20
#define EXPAND_ALLOC 1024
#define STDIN 0
#define STDOUT 1
#define MAX_SOURCE 10
#define BUF_SIZE 8192
#define isBlank(ch) (((ch) == ' ') || ((ch) == '\t'))
#define isDecimal(ch) (((ch) >= '0') && ((ch) <= '9'))
#define isOctal(ch) (((ch) >= '0') && ((ch) <= '7'))
#define isWildCard(ch) (((ch) == '*') || ((ch) == '?') || ((ch) == '['))
#ifndef MAX
#define MAX(x, y) ((x) > (y) ? (x) : (y))
#endif
#ifndef MIN
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#endif
typedef int BOOL;
#define FALSE ((BOOL) 0)
#define TRUE ((BOOL) 1)
/*
* Built-in command functions.
*/
extern int do_alias(int argc, const char ** argv);
extern int do_aliasall(int argc, const char ** argv);
extern int do_cd(int argc, const char ** argv);
extern int do_exec(int argc, const char ** argv);
extern int do_exit(int argc, const char ** argv);
extern int do_prompt(int argc, const char ** argv);
extern int do_source(int argc, const char ** argv);
extern int do_umask(int argc, const char ** argv);
extern int do_unalias(int argc, const char ** argv);
extern int do_help(int argc, const char ** argv);
extern int do_ln(int argc, const char ** argv);
extern int do_cp(int argc, const char ** argv);
extern int do_mv(int argc, const char ** argv);
extern int do_rm(int argc, const char ** argv);
extern int do_chmod(int argc, const char ** argv);
extern int do_mkdir(int argc, const char ** argv);
extern int do_rmdir(int argc, const char ** argv);
extern int do_mknod(int argc, const char ** argv);
extern int do_chown(int argc, const char ** argv);
extern int do_chgrp(int argc, const char ** argv);
extern int do_sum(int argc, const char ** argv);
extern int do_sync(int argc, const char ** argv);
extern int do_printenv(int argc, const char ** argv);
extern int do_more(int argc, const char ** argv);
extern int do_cmp(int argc, const char ** argv);
extern int do_touch(int argc, const char ** argv);
extern int do_ls(int argc, const char ** argv);
extern int do_dd(int argc, const char ** argv);
extern int do_tar(int argc, const char ** argv);
extern int do_ar(int argc, const char ** argv);
extern int do_mount(int argc, const char ** argv);
extern int do_umount(int argc, const char ** argv);
extern int do_setenv(int argc, const char ** argv);
extern int do_pwd(int argc, const char ** argv);
extern int do_echo(int argc, const char ** argv);
extern int do_kill(int argc, const char ** argv);
extern int do_grep(int argc, const char ** argv);
extern int do_file(int argc, const char ** argv);
extern int do_find(int argc, const char ** argv);
extern int do_ed(int argc, const char ** argv);
extern int do_where(int argc, const char ** argv);
#if HAVE_GZIP
extern int do_gzip(int argc, const char ** argv);
extern int do_gunzip(int argc, const char ** argv);
#endif
#if HAVE_LINUX_ATTR
extern int do_lsattr(int argc, const char ** argv);
extern int do_chattr(int argc, const char ** argv);
#endif
#if HAVE_LINUX_CHROOT
extern int do_chroot(int argc, const char ** argv);
#endif
#if HAVE_LINUX_LOSETUP
extern int do_losetup(int argc, const char ** argv);
#endif
#if HAVE_LINUX_PIVOT
extern int do_pivot_root(int argc, const char ** argv);
extern int pivot_root(const char *new_root, const char *put_old);
#endif
/*
* Global utility routines.
*/
extern const char * modeString(int mode);
extern const char * timeString(time_t timeVal);
extern BOOL isDirectory(const char * name);
extern BOOL isDevice(const char * name);
extern int nameSort(const void * p1, const void * p2);
extern char * getChunk(int size);
extern char * chunkstrdup(const char *);
extern void freeChunks(void);
extern int trySystem(const char * cmd);
extern void tryWrite(int fd, const char * buf, int len);
extern int fullWrite(int fd, const char * buf, int len);
extern int fullRead(int fd, char * buf, int len);
extern void checkStatus(const char * name, int status);
extern BOOL match(const char * text, const char * pattern);
extern const char * buildName
(const char * dirName, const char * fileName);
extern BOOL makeArgs
(const char * cmd, int * argcPtr, const char *** argvPtr);
extern BOOL copyFile
(const char * srcName, const char * destName, BOOL setModes);
extern BOOL makeString
(int argc, const char ** argv, char * buf, int bufLen);
extern int expandWildCards
(const char * fileNamePattern, const char *** retFileTable);
/*
* Global variable to indicate that an SIGINT occurred.
* This is used to stop processing.
*/
extern BOOL intFlag;
#endif
/* END CODE */
|