return ret;
}
+void xprintf(char *format, ...)
+{
+ va_list va;
+ va_start(va, format);
+
+ vprintf(format, va);
+ if (ferror(stdout)) perror_exit("write");
+}
+
+void xputc(char c)
+{
+ if (EOF == fputc(c, stdout)) perror_exit("write");
+}
+
+void xflush(void)
+{
+ if (fflush(stdout)) perror_exit("write");;
+}
+
// Die unless we can exec argv[] (or run builtin command). Note that anything
// with a path isn't a builtin, so /bin/sh won't match the builtin sh.
void xexec(char **argv)
void xaccess(char *path, int flags)
{
- if (access(path, flags)) error_exit("Can't access '%s'\n", path);
+ if (access(path, flags)) perror_exit("Can't access '%s'\n", path);
}
// Die unless we can open/create a file, returning file descriptor.
int xcreate(char *path, int flags, int mode)
{
int fd = open(path, flags, mode);
- if (fd == -1) error_exit("No file %s\n", path);
+ if (fd == -1) perror_exit("No file %s\n", path);
return fd;
}
FILE *xfopen(char *path, char *mode)
{
FILE *f = fopen(path, mode);
- if (!f) error_exit("No file %s\n", path);
+ if (!f) perror_exit("No file %s\n", path);
return f;
}
char *xgetcwd(void)
{
char *buf = getcwd(NULL, 0);
- if (!buf) error_exit("xgetcwd");
+ if (!buf) perror_exit("xgetcwd");
return buf;
}
char *xreadfile(char *name)
{
char *buf = readfile(name);
- if (!buf) error_exit("xreadfile %s", name);
+ if (!buf) perror_exit("xreadfile %s", name);
return buf;
}
void *xstrndup(char *s, size_t n);
void *xstrdup(char *s);
char *xmsprintf(char *format, ...);
+void xprintf(char *format, ...);
+void xputc(char c);
+void xflush(void);
void xexec(char **argv);
void xaccess(char *path, int flags);
int xcreate(char *path, int flags, int mode);
-k Sets units back to 1024 bytes (the default without -P)
+config ECHO
+ bool "echo"
+ default n
+ help
+ usage: echo [-ne] [args...]
+
+ Write each argument to stdout, with one space between each, followed
+ by a newline.
+
+ -n No trailing newline.
+ -e Process the following escape sequences:
+ \\ backslash
+ \a alert (beep/flash)
+ \b backspace
+ \c Stop output here (avoids trailing newline)
+ \f form feed
+ \n newline
+ \r carriage return
+ \t horizontal tab
+ \v vertical tab
config HELLO
bool "hello"
default n
USE_COUNT(NEWTOY(count, "", TOYFLAG_USR|TOYFLAG_BIN))
USE_TOYSH(NEWTOY(cd, NULL, TOYFLAG_NOFORK))
USE_DF(NEWTOY(df, "Pkt*a", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_ECHO(NEWTOY(echo, "en", TOYFLAG_BIN))
USE_TOYSH(NEWTOY(exit, NULL, TOYFLAG_NOFORK))
USE_HELLO(NEWTOY(hello, NULL, TOYFLAG_USR))
USE_MKE2FS(NEWTOY(mke2fs, MKE2FS_OPTSTRING, TOYFLAG_SBIN))