aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c64
1 files changed, 5 insertions, 59 deletions
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);