summaryrefslogtreecommitdiff
path: root/src/commands/dd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/dd.c')
-rw-r--r--src/commands/dd.c60
1 files changed, 0 insertions, 60 deletions
diff --git a/src/commands/dd.c b/src/commands/dd.c
deleted file mode 100644
index 1387317..0000000
--- a/src/commands/dd.c
+++ /dev/null
@@ -1,60 +0,0 @@
-#include "../command.h"
-
-static void help(void) {
- printf("Usage: dd [if=FILE] [of=FILE] [bs=N] [count=N]\n\n");
- printf("Copy a file with converting and formatting\n\n");
- printf("\tif=FILE\t\tRead from FILE instead of stdin\n");
- printf("\tof=FILE\t\tWrite to FILE instead of stdout\n");
- printf("\tbs=N\t\tRead and write N bytes at a time\n");
- printf("\tcount=N\t\tCopy only N input blocks\n");
-}
-
-COMMAND(dd) {
-
- FILE* in_file = stdin;
- FILE* out_file = stdout;
- int bs = 1024;
- int count = -1;
- int i;
- char* buffer;
- size_t read;
-
- parse_help(argc, argv, help);
-
- for (i = 0; i < argc; i++) {
- if (prefix("if=", argv[i])) {
- char* path = argv[i] + 3;
- in_file = get_file(path, "rb");
- } else if (prefix("of=", argv[i])) {
- char* path = argv[i] + 3;
- out_file = get_file(path, "wb");
- } else if (prefix("bs=", argv[i])) {
- char* str = argv[i] + 3;
- bs = get_number(str);
- if (bs < 1) {
- error("block size must be greater than 0");
- }
- } else if (prefix("count=", argv[i])) {
- char* str = argv[i] + 6;
- count = get_number(str);
- if (count < 1) {
- error("count must be greather than 0");
- }
- } else {
- error("unkown option %s", argv[i]);
- }
- }
-
- buffer = malloc(bs);
-
- while ((read = fread(buffer, 1, bs, in_file)) != 0) {
- fwrite(buffer, 1, read, out_file);
- if (--count, count == 0) break;
- }
-
- free(buffer);
- fclose(in_file);
- fclose(out_file);
-
- return EXIT_SUCCESS;
-}