From 52c3c2e15b745f9d77a104eb660ae94f2f83c1ea Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Tue, 25 Jul 2017 18:20:06 +0200 Subject: [PATCH] strsepjoin --- libftasm/Makefile | 1 + libftasm/includes/net.h | 7 +++++-- libftasm/includes/str.h | 1 + libftasm/srcs/net/net_get.c | 18 ++++++++++++++++++ libftasm/srcs/net/net_send.c | 23 +++++++++++++++++++++++ libftasm/srcs/str/ft_strsepjoin.c | 25 +++++++++++++++++++++++++ 6 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 libftasm/srcs/str/ft_strsepjoin.c diff --git a/libftasm/Makefile b/libftasm/Makefile index 060feedc..62be31f7 100644 --- a/libftasm/Makefile +++ b/libftasm/Makefile @@ -151,6 +151,7 @@ sstr/ft_sstrprint.c\ sstr/ft_sstrprint_fd.c\ sstr/ft_sstrsort.c\ sstr/ft_sstrstr.c\ +str/ft_strsepjoin.c\ str/ft_atoi.c\ str/ft_convert_base.c\ str/ft_putaddr_fd.c\ diff --git a/libftasm/includes/net.h b/libftasm/includes/net.h index c339753b..944d3903 100644 --- a/libftasm/includes/net.h +++ b/libftasm/includes/net.h @@ -1,8 +1,9 @@ #ifndef NET_H # define NET_H -# define ACK 2 -# define NACK 3 +# define ACK 2 +# define NACK 3 +# define NET_MAXSIZE 512 # include # include @@ -13,7 +14,9 @@ int create_server(int port, int backlog, char *protoname); int create_client(char *addr, int port, char *protoname); int net_send(int sock, char *msg, int size); +int net_send_large(int sock, char *msg, int size); int net_get(int sock, char *msg, int size); int net_get_fd(int sock, int fd, int size); +int net_get_large(int sock, int fd); #endif diff --git a/libftasm/includes/str.h b/libftasm/includes/str.h index 3db450ed..0d08a4b6 100644 --- a/libftasm/includes/str.h +++ b/libftasm/includes/str.h @@ -51,6 +51,7 @@ int ft_strequ(char const *s1, char const *s2); int ft_strnequ(char const *s1, char const *s2, size_t n); char *ft_strsub(char const *s, unsigned int start, size_t len); char *ft_strjoin(char const *s1, char const *s2); +char *ft_strsepjoin(char **tab, char sep); char *ft_strtrim(char const *s); char **ft_strsplit(char const *s, char c); diff --git a/libftasm/srcs/net/net_get.c b/libftasm/srcs/net/net_get.c index e09418c1..9541282c 100644 --- a/libftasm/srcs/net/net_get.c +++ b/libftasm/srcs/net/net_get.c @@ -26,3 +26,21 @@ int net_get_fd(int sock, int fd, int size) return (-1); return (0); } + +int net_get_large(int sock, int fd) +{ + int i; + int num_blks; + int num_last_blk; + + net_get(sock, (char*)&num_blks, sizeof(num_blks)); + net_get(sock, (char*)&num_last_blk, sizeof(num_last_blk)); + num_blks = ntohs(num_blks); + num_last_blk = ntohs(num_last_blk); + i = -1; + while (++i < num_blks - 1) + net_get_fd(sock, fd, NET_MAXSIZE); + if (num_last_blk) + net_get_fd(sock, fd, num_last_blk); + return (0); +} diff --git a/libftasm/srcs/net/net_send.c b/libftasm/srcs/net/net_send.c index e4a76e0e..de981f56 100644 --- a/libftasm/srcs/net/net_send.c +++ b/libftasm/srcs/net/net_send.c @@ -12,3 +12,26 @@ int net_send(int sock, char *msg, int size) return (1); return (0); } + +int net_send_large(int sock, char *msg, int size) +{ + int i; + int num_blks; + int num_last_blk; + + num_blks = htons(size / NET_MAXSIZE + 1); + num_last_blk = htons(size % NET_MAXSIZE); + if (net_send(sock, (char*)&num_blks, sizeof(num_blks))) + return (1); + if (net_send(sock, (char*)&num_last_blk, sizeof(num_blks))) + return (1); + + num_blks = ntohs(num_blks); + num_last_blk = ntohs(num_last_blk); + i = -1; + while (++i < num_blks - 1) + net_send(sock, msg + i * NET_MAXSIZE, NET_MAXSIZE); + if (num_last_blk) + net_send(sock, msg + i * NET_MAXSIZE, num_last_blk); + return (0); +} diff --git a/libftasm/srcs/str/ft_strsepjoin.c b/libftasm/srcs/str/ft_strsepjoin.c new file mode 100644 index 00000000..8fbb0ee3 --- /dev/null +++ b/libftasm/srcs/str/ft_strsepjoin.c @@ -0,0 +1,25 @@ +#include "libft.h" + +char *ft_strsepjoin(char **tab, char sep) +{ + char *join; + char **p; + int len; + + len = 0; + if (!(p = tab)) + return (NULL); + while (*p) + len += ft_strlen(*p++) + 1; + if (!(join = ft_strnew(len))) + return (NULL); + *join = 0; + p = tab; + while (*p) + { + ft_strcat(join, *p++); + ft_strcat(join, &sep); + } + join[len - 1] = 0; + return (join); +}