From 0fa3308034c7776b6c078e493f3b758f0a0bf7e6 Mon Sep 17 00:00:00 2001 From: Charles Date: Sat, 20 Jun 2020 17:17:36 +0200 Subject: Added recursion for directory, not complete ustar format --- src/main.c | 64 +++++--------------------------------------------------------- 1 file changed, 5 insertions(+), 59 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 1161278..1c0f12f 100644 --- a/src/main.c +++ b/src/main.c @@ -3,63 +3,6 @@ // only first hard link // checksum positive and negative bytes -int write_file(int fd, char *file_name) -{ - struct stat statbuf; - t_header header; - - stat(file_name, &statbuf); - bzero(&header, sizeof(t_header)); - strncpy(header.file_name, file_name, sizeof(header.file_name)); - sprintf(header.file_mode, "%07o", statbuf.st_mode & 0777); - sprintf(header.user_id, "%07o", statbuf.st_uid); - sprintf(header.group_id, "%07o", statbuf.st_gid); - sprintf(header.file_size, "%011lo", statbuf.st_size); - sprintf(header.last_time, "%011lo", statbuf.st_mtime); - memset(header.checksum, ' ', sizeof(header.checksum)); - header.file_type[0] = '0'; - - /* strncpy(header.ustar, "ustar", sizeof(header.ustar)); */ - char *header_ptr = (char*)&header; - unsigned int sum = 0; - for (size_t i = 0; i < sizeof(t_header); i++) - sum += header_ptr[i]; - sprintf(header.checksum, "%06o", sum); - - char buf[512] = {0}; - memcpy(buf, &header, sizeof(t_header)); - write(fd, buf, 512); - - - int from; - char *content; - switch (statbuf.st_mode & S_IFMT) - { - case S_IFDIR: break; - default: - from = open(file_name, O_RDONLY); - content = calloc(statbuf.st_size + 1, sizeof(char)); - read(from, content, statbuf.st_size); - write(fd, content, statbuf.st_size); - free(content); - close(from); - memset(buf, '\0', 512); - write(fd, buf, 512 - statbuf.st_size % 512); - } - - // if dir - // write_dir - // else - // write content - return (0); -} - -int write_directory(int fd, char *dirname) -{ - // for f in files - // write_file -} - int main(int argc, char **argv) { int opt; @@ -90,17 +33,20 @@ int main(int argc, char **argv) fd = open(output_file_name, O_WRONLY | O_CREAT | O_TRUNC, 0644); if (fd == -1) { - perror(NULL); + perror("main"); return 1; } } /* printf("out: %s\n", output_file_name); */ + char file_name[PATH_MAX]; char **files = argv + optind; for (; *files != NULL; files++) { /* printf("%s\n", *files); */ - write_file(fd, *files); + bzero(file_name, PATH_MAX); + strcpy(file_name, *files); + file_write(fd, file_name); } char buf[512] = {'\0'}; write(fd, buf, 512); -- cgit