summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Manuel Tomás <jtomas1815@gmail.com>2020-07-10 21:59:52 -0300
committerGitHub <noreply@github.com>2020-07-10 21:59:52 -0300
commit7908b37141271f671a31f5dc7dd6341a037a4b27 (patch)
treea642972e425533e91e3d46eb6fb71d2bc276f076
parentf333658aa8be007128472b66291124c348e935ea (diff)
parentc4c5be557abb30166dbc49770a0151671ab1bf07 (diff)
downloadjet-7908b37141271f671a31f5dc7dd6341a037a4b27.tar.gz
jet-7908b37141271f671a31f5dc7dd6341a037a4b27.zip
Merge pull request #7 from jmtomas/6
6
-rw-r--r--buffer.cpp33
-rw-r--r--jet.cpp6
2 files changed, 25 insertions, 14 deletions
diff --git a/buffer.cpp b/buffer.cpp
index d1762d0..ba3f87c 100644
--- a/buffer.cpp
+++ b/buffer.cpp
@@ -4,21 +4,30 @@ struct Buffer {
Buffer(const char *name) : name(name), storage(new Page()) {}
- void read(const char *file) {
- FILE *f = fopen(file, "r");
- char c;
- Point p(storage, 0);
- while ((c = fgetc(f)) != EOF) {
- p.push(c);
+ void read_file(const char *pathname) {
+ int file = open(pathname, O_RDONLY);
+ Page *iter = storage;
+ int bytes_read = read(file, iter->elements, PAGE_SIZE);
+ iter->gap_start = bytes_read;
+ iter->element_count = bytes_read;
+ while (bytes_read == PAGE_SIZE) {
+ iter->next = new Page();
+ iter = iter->next;
+ bytes_read = read(file, iter->elements, PAGE_SIZE);
+ iter->gap_start = bytes_read;
+ iter->element_count = bytes_read;
}
- fclose(f);
+ close(file);
}
- void write(const char *file) {
- FILE *f = fopen(file, "w+");
- for (Point p(storage, 0); !p.at_end(); p++) {
- fputc(p.element(), f);
+ void write_file(const char *pathname) {
+ int file = open(pathname, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ Page *iter = storage;
+ while (iter) {
+ write(file, iter->elements, iter->gap_start);
+ write(file, iter->elements + iter->gap_end, PAGE_SIZE - iter->gap_end);
+ iter = iter->next;
}
- fclose(f);
+ close(file);
}
};
diff --git a/jet.cpp b/jet.cpp
index c4e997c..3d45c75 100644
--- a/jet.cpp
+++ b/jet.cpp
@@ -3,6 +3,8 @@
#include <string.h>
#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
@@ -48,7 +50,7 @@ void parse_command(char *command, Client *client) {
int main() {
Buffer scratch("scratch");
- scratch.read("LICENSE");
+ scratch.read_file("LICENSE");
int listener = create_listener();
@@ -62,7 +64,7 @@ int main() {
epoll_event events[MAX_EVENTS];
Client *clients[1024] = {};
- for (;;) {
+ while (true) {
int nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1);
for (int i = 0; i < nfds; i++) {