uuprog
annotate cp.c @ 0:4f628556fa3e
uuprog initial commit
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Thu, 25 Aug 2011 08:53:01 +0300 |
parents | |
children |
rev | line source |
---|---|
nuclear@0 | 1 /*! cc -o cp cp.c */ |
nuclear@0 | 2 #include <stdio.h> |
nuclear@0 | 3 #include <string.h> |
nuclear@0 | 4 #include <errno.h> |
nuclear@0 | 5 #include <unistd.h> |
nuclear@0 | 6 #include <sys/types.h> |
nuclear@0 | 7 #include <sys/stat.h> |
nuclear@0 | 8 |
nuclear@0 | 9 int copy_file(const char *sname, const char *dname); |
nuclear@0 | 10 |
nuclear@0 | 11 char buf[4096]; |
nuclear@0 | 12 |
nuclear@0 | 13 int main(int argc, char **argv) |
nuclear@0 | 14 { |
nuclear@0 | 15 int i, src_count = argc - 2; |
nuclear@0 | 16 |
nuclear@0 | 17 if(src_count > 1) { |
nuclear@0 | 18 struct stat st; |
nuclear@0 | 19 char *to_dir = argv[argc - 1]; |
nuclear@0 | 20 |
nuclear@0 | 21 if(stat(to_dir, &st) == -1) { |
nuclear@0 | 22 fprintf(stderr, "failed to stat %s: %s\n", to_dir, strerror(errno)); |
nuclear@0 | 23 return 1; |
nuclear@0 | 24 } |
nuclear@0 | 25 |
nuclear@0 | 26 for(i=0; i<src_count; i++) { |
nuclear@0 | 27 sprintf(buf, "%s/%s", to_dir, argv[i+1]); |
nuclear@0 | 28 if(copy_file(argv[i+1], buf) == -1) { |
nuclear@0 | 29 return 1; |
nuclear@0 | 30 } |
nuclear@0 | 31 } |
nuclear@0 | 32 return 0; |
nuclear@0 | 33 } |
nuclear@0 | 34 |
nuclear@0 | 35 return copy_file(argv[1], argv[2]) == -1 ? 1 : 0; |
nuclear@0 | 36 } |
nuclear@0 | 37 |
nuclear@0 | 38 int copy_file(const char *sname, const char *dname) |
nuclear@0 | 39 { |
nuclear@0 | 40 FILE *src, *dst; |
nuclear@0 | 41 size_t brd; |
nuclear@0 | 42 |
nuclear@0 | 43 if(!(src = fopen(sname, "rb"))) { |
nuclear@0 | 44 fprintf(stderr, "failed to open source file %s: %s\n", sname, strerror(errno)); |
nuclear@0 | 45 return -1; |
nuclear@0 | 46 } |
nuclear@0 | 47 if(!(dst = fopen(dname, "wb"))) { |
nuclear@0 | 48 fclose(src); |
nuclear@0 | 49 fprintf(stderr, "failed to open destination file %s: %s\n", dname, strerror(errno)); |
nuclear@0 | 50 return -1; |
nuclear@0 | 51 } |
nuclear@0 | 52 |
nuclear@0 | 53 while((brd = fread(buf, 1, sizeof buf, src)) > 0) { |
nuclear@0 | 54 fwrite(buf, 1, brd, dst); |
nuclear@0 | 55 } |
nuclear@0 | 56 |
nuclear@0 | 57 fclose(dst); |
nuclear@0 | 58 fclose(src); |
nuclear@0 | 59 return 0; |
nuclear@0 | 60 } |