fix reading and writing to files
This commit is contained in:
parent
9b1450d2f4
commit
c7c3c67d2c
4 changed files with 85 additions and 10 deletions
|
@ -1,15 +1,36 @@
|
|||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include "libft.h"
|
||||
#include "ft_base64.h"
|
||||
|
||||
static int open_stream(char *filename, int flags, int mode)
|
||||
static int open_input(char *filename)
|
||||
{
|
||||
int fd;
|
||||
if ((fd = open((const char *)filename, flags, mode)) == -1)
|
||||
struct stat stat_buff;
|
||||
|
||||
if ((fd = open((const char *)filename, O_RDONLY, 0)) == -1)
|
||||
{
|
||||
perror("base64");
|
||||
perror("base64: input stream error");
|
||||
exit(1);
|
||||
}
|
||||
stat(filename, &stat_buff);
|
||||
if (S_ISDIR(stat_buff.st_mode))
|
||||
{
|
||||
ft_putstr_fd("base64: input path is not a file", STDERR_FILENO);
|
||||
exit(1);
|
||||
}
|
||||
return fd;
|
||||
}
|
||||
|
||||
static int open_output(char *filename)
|
||||
{
|
||||
int fd;
|
||||
if ((fd = open((const char *)filename,
|
||||
O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR)) == -1)
|
||||
{
|
||||
perror("base64: output stream error");
|
||||
exit(1);
|
||||
}
|
||||
return fd;
|
||||
|
@ -42,10 +63,9 @@ static void read_args
|
|||
else if (ft_strcmp(current_arg, "-e") == 0 && ++i)
|
||||
continue;
|
||||
else if (ft_strcmp(current_arg, "-i") == 0)
|
||||
ctx->input_fd = open_stream(next_arg, O_RDONLY, 0);
|
||||
ctx->input_fd = open_input(next_arg);
|
||||
else if (ft_strcmp(current_arg, "-o") == 0)
|
||||
ctx->output_fd = open_stream(next_arg, O_CREAT | O_WRONLY,
|
||||
S_IRUSR | S_IWUSR);
|
||||
ctx->output_fd = open_output(next_arg);
|
||||
else if (++i)
|
||||
continue;
|
||||
i++;
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#include <fcntl.h>
|
||||
#include "ft_base64.h"
|
||||
#include "libft.h"
|
||||
|
||||
|
@ -13,8 +14,8 @@ void ft_base64_decode_finish
|
|||
return ;
|
||||
if (buffer_index != 0)
|
||||
{
|
||||
ft_putstr("\nbase64: invalid input: readed \
|
||||
bytes count isn't multiple of 4\n");
|
||||
ft_putstr_fd("\nbase64: invalid input: readed \
|
||||
bytes count isn't multiple of 4\n", STDERR_FILENO);
|
||||
exit(1);
|
||||
}
|
||||
}
|
|
@ -1,5 +1,9 @@
|
|||
#include "ft_des.h"
|
||||
#include <stddef.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/stat.h>
|
||||
#include "ft_des.h"
|
||||
|
||||
int ft_des_base64_arg_parser
|
||||
(
|
||||
|
@ -58,6 +62,48 @@ int ft_des_encode_arg_parser
|
|||
{
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
ctx->encode = 1;
|
||||
ctx->decode = 0;
|
||||
return (++position);
|
||||
}
|
||||
|
||||
int ft_des_input_file_arg_parser
|
||||
(
|
||||
int argc,
|
||||
char **argv,
|
||||
int position,
|
||||
t_des_ctx *ctx
|
||||
)
|
||||
{
|
||||
struct stat stat_buff;
|
||||
|
||||
if (position + 1 >= argc)
|
||||
ft_des_print_error("there is no filaname after -i flag.");
|
||||
if ((ctx->input_fd = open(argv[position + 1], O_RDONLY, 0)) == -1)
|
||||
{
|
||||
perror("des");
|
||||
exit(1);
|
||||
}
|
||||
stat(argv[position + 1], &stat_buff);
|
||||
if (S_ISDIR(stat_buff.st_mode))
|
||||
ft_des_print_error("input path is not a file.");
|
||||
return (position + 2);
|
||||
}
|
||||
|
||||
int ft_des_output_file_arg_parser
|
||||
(
|
||||
int argc,
|
||||
char **argv,
|
||||
int position,
|
||||
t_des_ctx *ctx
|
||||
)
|
||||
{
|
||||
if (position + 1 >= argc)
|
||||
ft_des_print_error("there is no filaname after -o flag.");
|
||||
if ((ctx->output_fd = open(
|
||||
argv[position + 1], O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR)) == -1)
|
||||
{
|
||||
perror("des");
|
||||
exit(1);
|
||||
}
|
||||
return (position + 2);
|
||||
}
|
||||
|
|
|
@ -18,6 +18,14 @@ t_des_argument_parser g_arg_parsers[] = {
|
|||
"-a",
|
||||
ft_des_base64_arg_parser,
|
||||
},
|
||||
{
|
||||
"-i",
|
||||
ft_des_input_file_arg_parser,
|
||||
},
|
||||
{
|
||||
"-o",
|
||||
ft_des_output_file_arg_parser,
|
||||
},
|
||||
{ NULL, NULL},
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue