aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorNicholas Noll <nbnoll@eml.cc>2021-12-05 15:17:44 -0800
committerNicholas Noll <nbnoll@eml.cc>2021-12-05 15:17:44 -0800
commitb48327d357e0818d1a6ae2a064cfa7d1567e1242 (patch)
tree4677f228a9846937a7ec71c72a1ab63ab69d68ab /src/cmd
parentc200dd832789afa298ba45e0b9efdec96c0e92cc (diff)
feat(huge): huge refactor (in progress).
Commented out libc includes to uncover all explicit dependencies. A large fraction has now been ported over (no testing). I did not port over the command line tools, such as the rc shell. These will be done independently - as of now I just want the library to stand independent. Compilation currently fails due to the lack of math functions.
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/core/basename.c9
-rw-r--r--src/cmd/core/cat.c14
-rw-r--r--src/cmd/filter/filter.c32
-rw-r--r--src/cmd/ic/ic.c16
-rw-r--r--src/cmd/menu/menu.h12
-rw-r--r--src/cmd/rc/input.c47
-rw-r--r--src/cmd/rc/rc.h4
-rw-r--r--src/cmd/rc/util.c4
-rw-r--r--src/cmd/rules.mk4
-rw-r--r--src/cmd/term/term.h14
-rw-r--r--src/cmd/walk/walk.c14
11 files changed, 110 insertions, 60 deletions
diff --git a/src/cmd/core/basename.c b/src/cmd/core/basename.c
index 23d7b22..6b84812 100644
--- a/src/cmd/core/basename.c
+++ b/src/cmd/core/basename.c
@@ -13,6 +13,7 @@ main(int argc, char *argv[])
{
int d;
long n;
+ intptr x;
char *p, *s;
ARGBEGIN{
@@ -26,10 +27,10 @@ main(int argc, char *argv[])
p = d ? fs·dirname(argv[0]) : fs·basename(argv[0]);
if(argc>1){
- n = strlen(p)-strlen(argv[1]);
- if(n >= 0 && strcmp(p+n, argv[1])==0)
+ n = str·len(p)-str·len(argv[1]);
+ if(n >= 0 && str·compare(p+n, argv[1])==0)
p[n] = 0;
}
- puts(p);
- exits(nil);
+ sys·write(1,p,str·len(p),&x);
+ return 0;
}
diff --git a/src/cmd/core/cat.c b/src/cmd/core/cat.c
index e9b770b..aeed1be 100644
--- a/src/cmd/core/cat.c
+++ b/src/cmd/core/cat.c
@@ -11,15 +11,15 @@ usage(void)
static void
cat(int fd, char *s)
{
- long n;
+ intptr nr, nw;
char buf[8192];
- while((n=read(fd, buf, sizeof(buf)))>0){
- if(write(1, buf, n) != n)
+ while(!(sys·read(fd, buf, sizeof(buf), &nr))){
+ if(sys·write(1, buf, nr, &nw) || nr != nw)
fmt·panic("write error copying %s: %r", s);
}
- if(n<0)
+ if(nr<0)
fmt·panic("error reading %s: %r", s);
}
@@ -40,12 +40,14 @@ main(int argc, char *argv[])
}
while(argc-- > 0){
- if((fd = open(*argv, O_RDONLY))<0)
+ if(sys·open(*argv, sys·ORead, 0, &fd))
fmt·panic("can't open %s: %r", *argv);
cat(fd, *argv);
- close(fd);
+ sys·close(fd);
argv++;
}
+
+ return 0;
}
diff --git a/src/cmd/filter/filter.c b/src/cmd/filter/filter.c
index abc9a88..82fb364 100644
--- a/src/cmd/filter/filter.c
+++ b/src/cmd/filter/filter.c
@@ -2,42 +2,42 @@
#include <u.h>
#include <base.h>
+#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
#define FLAG(x) (flag[(x)-'a'])
-static void filter(const char *, const char *);
+static void filter(char *, char *);
static void usage(void);
static int match = 0;
static int flag[26];
static struct stat old, new;
-static
-void
-filter(const char *path, const char *name)
+static void
+filter(char *path, char *name)
{
struct stat st, ln;
if ((!stat(path, &st) && (FLAG('a') || name[0] != '.') /* hidden files */
- && (!FLAG('b') || S_ISBLK(st.st_mode)) /* block special */
- && (!FLAG('c') || S_ISCHR(st.st_mode)) /* character special */
- && (!FLAG('d') || S_ISDIR(st.st_mode)) /* directory */
- && (!FLAG('e') || access(path, F_OK) == 0) /* exists */
- && (!FLAG('f') || S_ISREG(st.st_mode)) /* regular file */
+ && (!FLAG('b') || sys·InfoIsBlock(st.st_mode)) /* block special */
+ && (!FLAG('c') || sys·InfoIsChar(st.st_mode)) /* character special */
+ && (!FLAG('d') || sys·InfoIsDir(st.st_mode)) /* directory */
+ && (!FLAG('e') || !sys·access(path,sys·FileExists)) /* exists */
+ && (!FLAG('f') || sys·InfoIsFile(st.st_mode)) /* regular file */
&& (!FLAG('g') || st.st_mode & S_ISGID) /* set-group-id flag */
&& (!FLAG('h') || (!lstat(path, &ln) && S_ISLNK(ln.st_mode))) /* symbolic link */
&& (!FLAG('n') || st.st_mtime > new.st_mtime) /* newer than file */
&& (!FLAG('o') || st.st_mtime < old.st_mtime) /* older than file */
- && (!FLAG('p') || S_ISFIFO(st.st_mode)) /* named pipe */
- && (!FLAG('r') || access(path, R_OK) == 0) /* readable */
+ && (!FLAG('p') || sys·InfoIsFifo(st.st_mode)) /* named pipe */
+ && (!FLAG('r') || !sys·access(path, sys·FileCanRead)) /* readable */
&& (!FLAG('s') || st.st_size > 0) /* not empty */
&& (!FLAG('u') || st.st_mode & S_ISUID) /* set-user-id flag */
- && (!FLAG('w') || access(path, W_OK) == 0) /* writable */
- && (!FLAG('x') || access(path, X_OK) == 0)) != FLAG('v')) { /* executable */
+ && (!FLAG('w') || !sys·access(path, sys·FileCanWrite)) /* writable */
+ && (!FLAG('x') || !sys·access(path, sys·FileCanExec))) != FLAG('v')) { /* executable */
if (FLAG('q'))
- exit(0);
+ rt·exit(0);
match = 1;
puts(name);
}
@@ -48,7 +48,7 @@ usage(void)
{
fprintf(stderr, "usage: %s [-abcdefghlpqrsuvwx] "
"[-n file] [-o file] [file...]\n", argv0);
- exit(2); /* like test(1) return > 1 on error */
+ rt·exit(2); /* like test(1) return > 1 on error */
}
int
@@ -70,7 +70,7 @@ main(int argc, char *argv[])
break;
default:
/* miscellaneous operators */
- if (strchr("abcdefghlpqrsuvwx", ARGC()))
+ if(str·rfindc("abcdefghlpqrsuvwx", ARGC()))
FLAG(ARGC()) = 1;
else
usage(); /* unknown flag */
diff --git a/src/cmd/ic/ic.c b/src/cmd/ic/ic.c
index 7fc37d8..0d5daed 100644
--- a/src/cmd/ic/ic.c
+++ b/src/cmd/ic/ic.c
@@ -2,6 +2,15 @@
#include <u.h>
#include <base.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <pwd.h>
+
#include <sys/select.h>
#include <sys/socket.h>
#include <sys/stat.h>
@@ -71,14 +80,13 @@ static char nick[32], _nick[arrlen(nick)]; /* active nickname at runtime */
static char ircpath[PATH_MAX]; /* irc dir (-i) */
static char msg[IRC_MSG_MAX]; /* message buf used for communication */
-static
-void
+static void
usage(void)
{
- fprintf(stderr, "usage: %s <-s host> [-i <irc dir>] [-p <port>] "
+ fmt·fprint(sys·Stderr, "usage: %s <-s host> [-i <irc dir>] [-p <port>] "
"[-u <sockname>] [-n <nick>] [-k <password>] "
"[-f <fullname>]\n", argv0);
- exit(1);
+ rt·exit(1);
}
static
diff --git a/src/cmd/menu/menu.h b/src/cmd/menu/menu.h
index de01607..8126d81 100644
--- a/src/cmd/menu/menu.h
+++ b/src/cmd/menu/menu.h
@@ -2,6 +2,18 @@
#include <u.h>
#include <base.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <wchar.h>
+#include <errno.h>
+#include <pwd.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/types.h>
+
#include <time.h>
#include <locale.h>
diff --git a/src/cmd/rc/input.c b/src/cmd/rc/input.c
index 9771174..f8bb2f9 100644
--- a/src/cmd/rc/input.c
+++ b/src/cmd/rc/input.c
@@ -119,7 +119,7 @@ enum
KeyBackspace = 127 /* Backspace */
};
-static void doatexit(void);
+static void doatexit(void*);
/* vi operations */
typedef struct
@@ -149,13 +149,15 @@ runetype(rune r)
static void
normalcursor(int fd)
{
- write(fd,"\e[2 q",5);
+ intptr x;
+ sys·write(fd,"\e[2 q",5,&x);
}
static void
insertcursor(int fd)
{
- write(fd,"\e[6 q",5);
+ intptr x;
+ sys·write(fd,"\e[6 q",5,&x);
}
/* raw mode: 1960 magic shit. */
@@ -168,7 +170,7 @@ enterraw(int fd)
goto fatal;
if(!mode.defer){
- atexit(doatexit);
+ rt·atexit(doatexit,nil);
mode.defer = 1;
}
if(tcgetattr(fd,&originalterm) == -1)
@@ -198,7 +200,7 @@ enterraw(int fd)
return 1;
fatal:
- errno = ENOTTY;
+ /* errno = ENOTTY; */
return 0;
}
@@ -216,17 +218,18 @@ exitraw(int fd)
static int
cursorposition(int ifd, int ofd)
{
- char buf[32];
+ char *b,buf[32];
int cols, rows;
+ intptr n;
unsigned int i = 0;
/* Report cursor location */
- if(write(ofd, "\x1b[6n", 4) != 4)
+ if(sys·write(ofd, "\x1b[6n", 4, &n) || n != 4)
return -1;
/* Read the response: ESC [ rows ; cols R */
while(i < sizeof(buf)-1) {
- if(read(ifd,buf+i,1) != 1)
+ if(sys·read(ifd,buf+i,1, &n) || n != 1)
break;
if(buf[i] == 'R')
break;
@@ -237,8 +240,12 @@ cursorposition(int ifd, int ofd)
/* Parse it. */
if(buf[0] != KeyEsc || buf[1] != '[')
return -1;
- if(sscanf(buf+2,"%d;%d",&rows,&cols) != 2)
- return -1;
+ b=buf+2;
+ while(*b != ';')
+ b++;
+ *b=0;
+ rows = str·atoi(buf+2);
+ cols = str·atoi(b+1);
return cols;
}
@@ -247,6 +254,7 @@ cursorposition(int ifd, int ofd)
static int
columns(int ifd, int ofd)
{
+ intptr n;
struct winsize ws;
if(ioctl(1, TIOCGWINSZ, &ws) == -1 || ws.ws_col == 0){
@@ -259,7 +267,7 @@ columns(int ifd, int ofd)
goto failed;
/* Go to right margin and get position. */
- if(write(ofd,"\x1b[999C",6) != 6)
+ if(sys·write(ofd,"\x1b[999C",6,&n) || n != 6)
goto failed;
cols = cursorposition(ifd,ofd);
if(cols == -1)
@@ -268,8 +276,8 @@ columns(int ifd, int ofd)
/* Restore position. */
if(cols > start){
char esc[32];
- snprintf(esc,32,"\x1b[%dD",cols-start);
- if(write(ofd,esc,strlen(esc)) == -1)
+ fmt·nsprint(esc,32,"\x1b[%dD",cols-start);
+ if(sys·write(ofd,esc,str·len(esc),&n))
;
}
return cols;
@@ -283,7 +291,8 @@ failed:
static void
clear(void)
{
- if(write(1,"\x1b[H\x1b[2J",7) <= 0)
+ intptr n;
+ if(sys·write(1,"\x1b[H\x1b[2J",7,&n))
;
}
@@ -292,8 +301,8 @@ clear(void)
static void
beep(void)
{
- fprintf(stderr, "\x7");
- fflush(stderr);
+ fmt·fprint(sys·Stderr, "\x7");
+ /* fmt·flush(stderr); */
}
// -----------------------------------------------------------------------
@@ -1347,7 +1356,7 @@ interact(int ifd, int ofd, char *buf, intptr len, char *prompt)
goto finish;
case KeyCtrlC:
- errno = EAGAIN;
+ /* errno = EAGAIN; */
return -1;
case KeyBackspace:
@@ -1569,7 +1578,7 @@ raw(char *buf, intptr len, char *prompt)
int n;
if(!len){
- errno = EINVAL;
+ /* errno = EINVAL; */
return -1;
}
@@ -1635,7 +1644,7 @@ readline(char *prompt)
/* At exit we'll try to fix the terminal to the initial conditions. */
static void
-doatexit(void)
+doatexit(void *_)
{
exitraw(0);
normalcursor(1);
diff --git a/src/cmd/rc/rc.h b/src/cmd/rc/rc.h
index 76a1b3d..67d10a4 100644
--- a/src/cmd/rc/rc.h
+++ b/src/cmd/rc/rc.h
@@ -4,6 +4,10 @@
#include <base.h>
#include <base/utf.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
// -----------------------------------------------------------------------
// types
diff --git a/src/cmd/rc/util.c b/src/cmd/rc/util.c
index b0be788..0949377 100644
--- a/src/cmd/rc/util.c
+++ b/src/cmd/rc/util.c
@@ -4,7 +4,7 @@ void
fatal(char *msg, ...)
{
va_list args;
- vfprintf(stderr, msg, args);
+ fmt·fprint(sys·Stderr, msg, args);
va_end(args);
abort();
@@ -17,7 +17,7 @@ emalloc(uintptr n)
if(!(p = malloc(n)))
fatal("out of memory: can't allocate %d bytes", n);
- memset(p, 0, n);
+ mem·set(p, n, 0);
return p;
}
diff --git a/src/cmd/rules.mk b/src/cmd/rules.mk
index ea53737..dbb4eb0 100644
--- a/src/cmd/rules.mk
+++ b/src/cmd/rules.mk
@@ -5,8 +5,8 @@ include share/push.mk
# DIR := $(d)/cc
# include $(DIR)/rules.mk
-DIR := $(d)/rc
-include $(DIR)/rules.mk
+# DIR := $(d)/rc
+# include $(DIR)/rules.mk
DIR := $(d)/core
include $(DIR)/rules.mk
diff --git a/src/cmd/term/term.h b/src/cmd/term/term.h
index c370239..9501ae2 100644
--- a/src/cmd/term/term.h
+++ b/src/cmd/term/term.h
@@ -4,6 +4,20 @@
#include <u.h>
#include <base.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <wchar.h>
+#include <errno.h>
+#include <pwd.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/types.h>
+
+typedef wchar_t wchar;
+
#include <signal.h>
#include <sys/ioctl.h>
#include <sys/select.h>
diff --git a/src/cmd/walk/walk.c b/src/cmd/walk/walk.c
index 29a8600..8239587 100644
--- a/src/cmd/walk/walk.c
+++ b/src/cmd/walk/walk.c
@@ -6,8 +6,9 @@ static char buf[4*1024], *c = buf; /* should be greater or equal to PATH_MAX */
static void
flush(void)
{
+ intptr n;
*c = 0;
- puts(buf);
+ sys·write(1, buf, str·len(buf), &n);
c = buf;
}
@@ -27,12 +28,11 @@ copy:
return 0;
}
-static
-void
+static void
usage(void)
{
- fprintf(stderr, "usage: walk [-dlpv] file ...\n");
- exit(1);
+ fmt·fprint(sys·Stderr, "usage: walk [-dlpv] file ...\n");
+ rt·exit(1);
}
int
@@ -44,7 +44,7 @@ main(int argc, char *argv[])
ARGBEGIN{
case 'd':
- max = atoi(ARGF());
+ max = str·atoi(ARGF());
break;
case 'l':
f ^= fs·nolinks;
@@ -78,5 +78,5 @@ main(int argc, char *argv[])
}
fs·fini(&walker);
flush();
- exit(err);
+ rt·exit(err);
}