#define _GNU_SOURCE #include #include #include #include #include #include #include #include "memory.h" #include "util.h" char* copy_buf(const char *buf,int len){ char *dst=malloc(len+1,char); memcpy(dst,buf,len); dst[len]='\0'; return dst; } char* copy_str(const char *str){ return copy_buf(str,strlen(str)); } void str_toupper(char *str){ while(*str!='\0'){ *str=toupper(*str); str++; } } // Returns -1 on error, 0 on success int sendall(int sock,const char *buf,ssize_t len){ if(len==-1){ len=strlen(buf); } ssize_t sent=0; while(sent