fixes, 1/2 dd writted
This commit is contained in:
parent
2aca0e1900
commit
3636254cb5
|
@ -1,10 +1,9 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
echo "Mounting..."
|
echo "[*] Mounting..."
|
||||||
mount -a
|
mount -a
|
||||||
|
|
||||||
echo "Setuping hostname..."
|
echo "[*] Hostname..."
|
||||||
hostname -c /etc/hostname
|
hostname -c /etc/hostname
|
||||||
|
|
||||||
reset
|
|
||||||
cat /etc/motd
|
cat /etc/motd
|
||||||
env TERM="vt100" login
|
env TERM="linux" login
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
echo "Umounting..."
|
echo "[*] Umounting..."
|
||||||
umount -a
|
umount -a
|
||||||
|
|
||||||
echo "Closing processes..."
|
echo "[*] Closing processes..."
|
||||||
kill -a -s TERM
|
kill -a -s TERM
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
echo "Poweroff..."
|
echo "[*] Poweroff..."
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
project_dir=$(pwd)
|
||||||
|
echo ./*.c $CFLAGS -o $OUTPUT$(basename $project_dir) | xargs $CC
|
|
@ -0,0 +1,162 @@
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include "unused.h"
|
||||||
|
|
||||||
|
int openfile(int flag, char *path, int mode) {
|
||||||
|
if (!strcmp(path, "-")) {
|
||||||
|
if (flag)
|
||||||
|
return STDOUT_FILENO;
|
||||||
|
|
||||||
|
return STDIN_FILENO;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fd = open(path, mode, 0666);
|
||||||
|
if (fd < 0) {
|
||||||
|
fprintf(stderr, "dd: %s: %s\n", path, strerror(errno));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t strtonum(char *str) {
|
||||||
|
char *p = NULL;
|
||||||
|
size_t res = strtoll(str, &p, 10);
|
||||||
|
if (str != p) {
|
||||||
|
if (!strcmp(p, "b"))
|
||||||
|
res *= 512;
|
||||||
|
|
||||||
|
else if (!strcmp(p, "MB"))
|
||||||
|
res *= 1000000;
|
||||||
|
|
||||||
|
else if (!strcmp(p, "M"))
|
||||||
|
res *= 1048576;
|
||||||
|
|
||||||
|
else if (!strcmp(p, "KB"))
|
||||||
|
res *= 1024;
|
||||||
|
|
||||||
|
else if (!strcmp(p, "kB"))
|
||||||
|
res *= 1000;
|
||||||
|
|
||||||
|
else if (!strcmp(p, "G"))
|
||||||
|
res *= 1000000000;
|
||||||
|
|
||||||
|
else if (!strcmp(p, "GB"))
|
||||||
|
res *= 1073741824;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res <= 1)
|
||||||
|
res = 0;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
char *ifp = "-";
|
||||||
|
char *ofp = "-";
|
||||||
|
|
||||||
|
off_t skip = 0;
|
||||||
|
off_t seek = 0;
|
||||||
|
off_t count = -1;
|
||||||
|
|
||||||
|
off_t bs = 0;
|
||||||
|
off_t ibs = 512;
|
||||||
|
off_t obs = 512;
|
||||||
|
|
||||||
|
int ofd = STDOUT_FILENO;
|
||||||
|
int ifd = STDIN_FILENO;
|
||||||
|
|
||||||
|
/* Return value */
|
||||||
|
int ret = 1;
|
||||||
|
for (int i = 1; i < argc; i++) {
|
||||||
|
char *arg = argv[i];
|
||||||
|
|
||||||
|
char *val = strchr(arg, '=');
|
||||||
|
if (val == NULL) {
|
||||||
|
printf("dd\n\t[if=InputFile]\n\t[of=OutputFile]\n\nN and BYTES may be followed by the following multiplicative\nsuffixes: w=2, b=512, kB=1000, K=1024, MB=1000*1000,\nM=1024*1024, GB=1000*1000*1000, G=1024*1024*1024\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*val = '\0';
|
||||||
|
val++;
|
||||||
|
|
||||||
|
/* Get value */
|
||||||
|
if (!strcmp(arg, "if"))
|
||||||
|
ifp = val;
|
||||||
|
|
||||||
|
else if (!strcmp(arg, "of"))
|
||||||
|
ofp = val;
|
||||||
|
|
||||||
|
else if (!strcmp(arg, "seek"))
|
||||||
|
seek = strtonum(val);
|
||||||
|
|
||||||
|
else if (!strcmp(arg, "skip"))
|
||||||
|
skip = strtonum(val);
|
||||||
|
|
||||||
|
else if (!strcmp(arg, "count"))
|
||||||
|
count = strtonum(val);
|
||||||
|
|
||||||
|
else if (!strcmp(arg, "bs"))
|
||||||
|
bs = strtonum(val);
|
||||||
|
|
||||||
|
else if (!strcmp(arg, "ibs"))
|
||||||
|
ibs = strtonum(val);
|
||||||
|
|
||||||
|
else if (!strcmp(arg, "obs"))
|
||||||
|
obs = strtonum(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bs) {
|
||||||
|
ibs = bs;
|
||||||
|
obs = bs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make input buffer */
|
||||||
|
char *buf = malloc(ibs);
|
||||||
|
if (buf == NULL) {
|
||||||
|
fprintf(stderr, "dd: %s\n", strerror(errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Open files. Input */
|
||||||
|
ifd = openfile(0, ifp, O_RDONLY);
|
||||||
|
if (skip) {
|
||||||
|
if (lseek(ifd, skip * ibs, SEEK_CUR) < 0)
|
||||||
|
goto CLOSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Output */
|
||||||
|
int oflag = O_WRONLY | O_CREAT;
|
||||||
|
if (seek)
|
||||||
|
oflag |= O_TRUNC;
|
||||||
|
|
||||||
|
ofd = openfile(1, ofp, oflag);
|
||||||
|
if (seek) {
|
||||||
|
if (ftruncate(ofd, seek * ibs) < 0 || lseek(ofd, seek * ibs, SEEK_SET) < 0) {
|
||||||
|
fprintf(stderr, "dd: %s\n", strerror(errno));
|
||||||
|
goto CLOSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* dd */
|
||||||
|
|
||||||
|
if (fsync(ofd) < 0)
|
||||||
|
goto CLOSE;
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
CLOSE:
|
||||||
|
free(buf);
|
||||||
|
close(ifd);
|
||||||
|
close(ofd);
|
||||||
|
|
||||||
|
/* tmp */
|
||||||
|
UNUSED(obs);
|
||||||
|
UNUSED(count);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
|
@ -21,11 +21,8 @@ void print(off_t size, const char *filename) {
|
||||||
if (h_flag)
|
if (h_flag)
|
||||||
printf("%s\t%s%c", mu_humansize(size * BLK_SIZE), filename, n_flag);
|
printf("%s\t%s%c", mu_humansize(size * BLK_SIZE), filename, n_flag);
|
||||||
|
|
||||||
else if (b_flag)
|
|
||||||
printf("%ju\t%s%c", (intmax_t)size, filename, n_flag);
|
|
||||||
|
|
||||||
else
|
else
|
||||||
printf("%ju\t%s%c", ((intmax_t)size * BLK_SIZE) / 1024, filename, n_flag);
|
printf("%jd\t%s%c", (intmax_t)size * BLK_SIZE / 1024, filename, n_flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
off_t du(const char *path, int recurs_flag) {
|
off_t du(const char *path, int recurs_flag) {
|
||||||
|
@ -70,10 +67,6 @@ off_t du(const char *path, int recurs_flag) {
|
||||||
|
|
||||||
/* Get file size */
|
/* Get file size */
|
||||||
else {
|
else {
|
||||||
if (b_flag)
|
|
||||||
sum = sb.st_size;
|
|
||||||
|
|
||||||
else
|
|
||||||
sum = (512 * sb.st_blocks + BLK_SIZE - 1) / BLK_SIZE;
|
sum = (512 * sb.st_blocks + BLK_SIZE - 1) / BLK_SIZE;
|
||||||
|
|
||||||
if (c_flag)
|
if (c_flag)
|
||||||
|
@ -99,11 +92,6 @@ int main(int argc, char **argv) {
|
||||||
s_flag = 1;
|
s_flag = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'b':
|
|
||||||
b_flag = 1;
|
|
||||||
h_flag = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'c':
|
case 'c':
|
||||||
c_flag = 1;
|
c_flag = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -113,7 +101,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("du [src1 src2...]\n\t[-h Sizes in human readable format]\n\t[-s Display only a total for each argument]\n\t[-b Size in bytes] [-c produce a grand total]\n\t[-0 end each output line with NUL, not newline]\n");
|
printf("du [src1 src2...]\n\t[-h Sizes in human readable format]\n\t[-s Display only a total for each argument]\n\t[-c produce a grand total]\n\t[-0 end each output line with NUL, not newline]\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue