Просмотр исходного кода

[buffer.h] Three misc changes

- Adding buffer_insert_str_as_line
- Changing name from const char * to struct str
- Changing filepath from const char * to struct str
Vinicius Teshima 1 год назад
Родитель
Сommit
02723bdea4
1 измененных файлов с 29 добавлено и 14 удалено
  1. 29 14
      src/buffer.h

+ 29 - 14
src/buffer.h

@@ -4,6 +4,8 @@
 #include <stdbool.h>
 #include <stdlib.h>
 
+#include "str.h"
+
 struct buffer_line {
 	size_t start;
 	size_t end;
@@ -23,13 +25,14 @@ enum buffer_mode {
 };
 
 struct buffer {
+	struct str name;
 	struct buffer_data data;
 	struct buffer_line_da lines;
 	enum buffer_mode mode;
 	size_t render_start;
 	size_t cur;
 	size_t high_col;
-	const char *filepath;
+	struct str filepath;
 	struct {
 		struct vec2 pos;
 		struct vec2 vel;
@@ -97,6 +100,8 @@ void buffer_mv_cur_down(struct buffer *buf);
 
 bool buffer_check_and_fix_cur(struct buffer *buf);
 
+void buffer_insert_str_as_line(struct buffer *buf, struct str str);
+
 void buffer_insert_char(struct buffer *buf, char c, size_t index);
 void buffer_remove_char_mv_cur(struct buffer *buf, size_t index);
 void buffer_remove_char(struct buffer *buf, size_t index);
@@ -158,8 +163,8 @@ void
 buffer_destroy(struct buffer *buf)
 {
 	free(buf->data.items);
-	if ( buf->filepath != NULL ) {
-		free((char *) buf->filepath);
+	if ( buf->filepath.data != NULL ) {
+		free((char *) buf->filepath.data);
 	}
 }
 
@@ -251,27 +256,21 @@ buffer_load_from_file(struct buffer *buf, const char *filepath,
 	void *ptr;
 	size_t file_size;
 	enum file_err file_err;
-	char *fp = realpath(filepath, NULL);
-	if ( fp == NULL ) {
-		buffer_err_set(err, BUFFER_ERR_FAIL_GET_REALPATH);
-		return;
-	}
-
-	ptr = file_read_all(fp, &file_size, &file_err);
+	ptr = file_read_all(filepath, &file_size, &file_err);
 
 	if ( file_err != FILE_ERR_OK ) {
 		if ( file_err == FILE_ERR_EMPTY ) {
-			buf->filepath = fp;
+			buf->filepath = str_from_cstr_ns(filepath);
 			goto exit;
 		}
-		free(fp);
 		buffer_err_set(err, BUFFER_ERR_FAIL_READ_FILE);
 		return;
 	}
 
 	buffer_destroy(buf);
 
-	buf->filepath = fp;
+	buf->name = str_from_cstr_ns(filepath);
+	buf->filepath = str_from_cstr_ns(filepath);
 	buf->data.items = ptr;
 	buf->data.size = file_size - 1;
 	buf->data.cap = file_size;
@@ -284,7 +283,7 @@ exit: ;
 void
 buffer_save(const struct buffer *buf, enum buffer_err *err)
 {
-	buffer_save_to_file(buf, buf->filepath, err);
+	buffer_save_to_file(buf, buf->filepath.data, err);
 }
 
 void
@@ -366,6 +365,22 @@ bool buffer_check_and_fix_cur(struct buffer *buf) {
 	return false;
 }
 
+void
+buffer_insert_str_as_line(struct buffer *buf, struct str str)
+{
+	struct str str_ = str_strip(str);
+
+	while ((buf->data.size + str_.size + 10) > buf->data.cap) {
+		DA_INC_CAP(buf->data);
+	}
+
+	memcpy(buf->data.items+buf->data.size, str_.data, str_.size);
+	buf->data.size += str_.size;
+
+	DA_APPEND(buf->data, '\n');
+}
+
+
 void
 buffer_insert_char(struct buffer *buf, char c, size_t index)
 {