new update
+26 −20 · 3 files changed
-
graph/sockets/Makefile+1 −1 -
graph/sockets/http_server.c+6 −8 -
graph/sockets/s.h+19 −11
@@ -42,7 +42,7 @@ CFLAGS = -g \ -Wstrict-prototypes \ -Wswitch-default \ -Wunreachable-code \ --Wunused-macros \ + # -Wunused-macros \ # Targets. @@ -70,17 +70,15 @@ void handleRequest(int fd) { }; String line; - buffer = chop_line(buffer, &line); + buffer = trim_end(chop_line(&buffer)); fprintf (stderr, "* Size of buffer is: %zd bytes\n",buffer.len); while (buffer.len != 0 && line.len != 0) { - char newline = '\n'; - char bar = '|'; - write(STDOUT_FILENO,&bar,1); - write(STDOUT_FILENO,line.data,line.len); - write(STDOUT_FILENO,&bar,1); - write(STDOUT_FILENO,&newline,1); - buffer = chop_line(buffer, &line); + putchar('|'); + fwrite(line.data,1,line.len,stdout); + putchar('|'); + putchar('\n'); + line = trim(chop_line(buffer, &line)); } } @@ -1,29 +1,37 @@ #ifndef S_H_ #define S_H_ +#include <ctype.h> -typedef struct __attribute__((packed)) { +typedef struct { uint64_t len; char *data; } String; static inline -String chop_line(String input, String *line) { +String chop_line(String *input) { uint64_t i = 0; - while (i < input.len && input.data[i] != '\n'){ + while (i < input->len && input->data[i] != '\n'){ ++i; } - line->data = input.data; - line->len = i; + String line; + line.data = input->data; + line.len = i; - if (i == input.len) { - input.data += input.len; - input.len = 0; + if (i == input->len) { + input->data += input->len; + input->len = 0; } else { - input.data += i + 1; - input.len -= i + 1; + input->data += i + 1; + input->len -= i + 1; } - return input; + return *input; +} +String trim_end(String s){ + while (s->len && isspace(s->data[s->len -1])) { + s->len--; + } + return s; } #endif // S_H_ \ No newline at end of file