linux lib compatibility
This commit is contained in:
@@ -1,16 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by Giorgio on 28/05/2026.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef BELUGA_UTILS_H
|
|
||||||
#define BELUGA_UTILS_H
|
|
||||||
#include <sys/_types/_size_t.h>
|
|
||||||
|
|
||||||
extern int beluga_alloc_counter;
|
|
||||||
|
|
||||||
|
|
||||||
void * bAlloc(size_t size);
|
|
||||||
void * bRealloc(void * ptr, size_t size);
|
|
||||||
void * bFree(void * ptr);
|
|
||||||
|
|
||||||
#endif //BELUGA_UTILS_H
|
|
||||||
@@ -11,8 +11,6 @@
|
|||||||
|
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
|
||||||
#include "include/utils.h"
|
|
||||||
|
|
||||||
#include "include/buffer.h"
|
#include "include/buffer.h"
|
||||||
#include "include/split_screen.h"
|
#include "include/split_screen.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -26,13 +24,15 @@
|
|||||||
#include "include/completion.h"
|
#include "include/completion.h"
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
#include "include/utils.h"
|
|
||||||
|
|
||||||
struct editorConfig E;
|
struct editorConfig E;
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
char * splash_screen = bAlloc(sizeof(char) * 512);
|
char * splash_screen = strdup(getenv("HOME"));
|
||||||
|
int home_path_len = (int) strlen(splash_screen);
|
||||||
|
char * splash_screen_relative_path = strdup("/.beluga/assets/beluga.txt");
|
||||||
|
int splash_screen_relative_path_len = (int) strlen(splash_screen_relative_path);
|
||||||
|
|
||||||
signal(SIGPIPE, SIG_IGN); // don't die on broken pipe, just get EPIPE from write()
|
signal(SIGPIPE, SIG_IGN); // don't die on broken pipe, just get EPIPE from write()
|
||||||
|
|
||||||
@@ -41,8 +41,9 @@ int main(int argc, char *argv[]) {
|
|||||||
EditorPane *active = splitScreenGetActivePane();
|
EditorPane *active = splitScreenGetActivePane();
|
||||||
struct buffer_t *buf;
|
struct buffer_t *buf;
|
||||||
|
|
||||||
strcat(splash_screen, getenv("HOME"));
|
splash_screen = realloc(splash_screen, sizeof(char) * (home_path_len + splash_screen_relative_path_len + 1));
|
||||||
strcat(splash_screen, "/.beluga/assets/beluga.txt");
|
strcat(splash_screen, "/.beluga/assets/beluga.txt");
|
||||||
|
free(splash_screen_relative_path);
|
||||||
|
|
||||||
appDebug("splash : %s\n", splash_screen);
|
appDebug("splash : %s\n", splash_screen);
|
||||||
active->buffer_id = bufferCreate(splash_screen, READ_ONLY);
|
active->buffer_id = bufferCreate(splash_screen, READ_ONLY);
|
||||||
@@ -59,12 +60,10 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
bFree(splash_screen);
|
free(splash_screen);
|
||||||
|
|
||||||
editorSetStatusMessage("HELP: Ctrl-x Ctrl-s = save | Ctrl-x Ctrl-c = quit");
|
editorSetStatusMessage("HELP: Ctrl-x Ctrl-s = save | Ctrl-x Ctrl-c = quit");
|
||||||
|
|
||||||
appDebug("allocation : %d\n", beluga_alloc_counter);
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
editorRefreshScreen();
|
editorRefreshScreen();
|
||||||
editorProcessKeypress();
|
editorProcessKeypress();
|
||||||
|
|||||||
+1
-2
@@ -27,8 +27,7 @@ src_files = files(
|
|||||||
'src/utf8.c',
|
'src/utf8.c',
|
||||||
'src/completion.c',
|
'src/completion.c',
|
||||||
'src/lsp_ui.c',
|
'src/lsp_ui.c',
|
||||||
'src/cJSON.c',
|
'src/cJSON.c'
|
||||||
'src/utils.c'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Executable
|
# Executable
|
||||||
|
|||||||
+2
-3
@@ -1,8 +1,7 @@
|
|||||||
#include "../include/append_buffer.h"
|
#include "../include/append_buffer.h"
|
||||||
#include "include/utils.h"
|
|
||||||
|
|
||||||
void abAppend(struct abuf *ab, const char *s, int len) {
|
void abAppend(struct abuf *ab, const char *s, int len) {
|
||||||
char *new = bRealloc(ab->b, ab->len + len);
|
char *new = realloc(ab->b, ab->len + len);
|
||||||
|
|
||||||
if (new == NULL) {
|
if (new == NULL) {
|
||||||
return;
|
return;
|
||||||
@@ -12,4 +11,4 @@ void abAppend(struct abuf *ab, const char *s, int len) {
|
|||||||
ab->len += len;
|
ab->len += len;
|
||||||
}
|
}
|
||||||
|
|
||||||
void abFree(const struct abuf *ab) { bFree(ab->b); }
|
void abFree(const struct abuf *ab) { free(ab->b); }
|
||||||
|
|||||||
+10
-11
@@ -17,7 +17,6 @@
|
|||||||
|
|
||||||
#include "include/completion.h"
|
#include "include/completion.h"
|
||||||
#include "include/input.h"
|
#include "include/input.h"
|
||||||
#include "include/utils.h"
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -82,7 +81,7 @@ int bufferCreate(const char* path, enum bufferStatus_e state)
|
|||||||
struct buffer_t* new_buf = &E.buffers[E.number_of_buffer];
|
struct buffer_t* new_buf = &E.buffers[E.number_of_buffer];
|
||||||
new_buf->buffer_id = E.number_of_buffer;
|
new_buf->buffer_id = E.number_of_buffer;
|
||||||
new_buf->filename = strdup(filename);
|
new_buf->filename = strdup(filename);
|
||||||
new_buf->fullname = bAlloc(1024 * sizeof(char));
|
new_buf->fullname = malloc(1024 * sizeof(char));
|
||||||
realpath(path, new_buf->fullname);
|
realpath(path, new_buf->fullname);
|
||||||
new_buf->path = dirname(new_buf->fullname);
|
new_buf->path = dirname(new_buf->fullname);
|
||||||
new_buf->type = FILE_BUFF;
|
new_buf->type = FILE_BUFF;
|
||||||
@@ -176,7 +175,7 @@ int bufferClose(int buffer_id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Free buffer resources
|
// Free buffer resources
|
||||||
bFree(buf->filename);
|
free(buf->filename);
|
||||||
buf->filename = NULL;
|
buf->filename = NULL;
|
||||||
buf->buffer_id = -1;
|
buf->buffer_id = -1;
|
||||||
|
|
||||||
@@ -312,7 +311,7 @@ void bufferFind(struct buffer_t* buf)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bFree(query);
|
free(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bufferFindReverse(struct buffer_t* buf)
|
void bufferFindReverse(struct buffer_t* buf)
|
||||||
@@ -335,14 +334,14 @@ void bufferFindReverse(struct buffer_t* buf)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bFree(query);
|
free(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bufferInsertRow(struct buffer_t *buffer, int at, char *s, size_t len) {
|
void bufferInsertRow(struct buffer_t *buffer, int at, char *s, size_t len) {
|
||||||
if (at < 0 || at > buffer->numrows)
|
if (at < 0 || at > buffer->numrows)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
row_t *tmp = bRealloc(buffer->row, sizeof(row_t) * (buffer->numrows + 1));
|
row_t *tmp = realloc(buffer->row, sizeof(row_t) * (buffer->numrows + 1));
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
return;
|
return;
|
||||||
buffer->row = tmp;
|
buffer->row = tmp;
|
||||||
@@ -355,7 +354,7 @@ void bufferInsertRow(struct buffer_t *buffer, int at, char *s, size_t len) {
|
|||||||
|
|
||||||
buffer->row[at].size = (int) len;
|
buffer->row[at].size = (int) len;
|
||||||
buffer->row[at].cap = (int) len + 1;
|
buffer->row[at].cap = (int) len + 1;
|
||||||
buffer->row[at].chars = bAlloc(len + 1);
|
buffer->row[at].chars = malloc(len + 1);
|
||||||
if (!buffer->row[at].chars)
|
if (!buffer->row[at].chars)
|
||||||
return;
|
return;
|
||||||
memcpy(buffer->row[at].chars, s, len);
|
memcpy(buffer->row[at].chars, s, len);
|
||||||
@@ -365,7 +364,7 @@ void bufferInsertRow(struct buffer_t *buffer, int at, char *s, size_t len) {
|
|||||||
buffer->dirty++;
|
buffer->dirty++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bufferFreeRow(row_t *row) { bFree(row->chars); }
|
void bufferFreeRow(row_t *row) { free(row->chars); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \fn editorRowInsertChar(erow *row, int at, int c)
|
* \fn editorRowInsertChar(erow *row, int at, int c)
|
||||||
@@ -377,12 +376,12 @@ void bufferRowInsertBytes(struct buffer_t *buffer, row_t *row, int at,
|
|||||||
return;
|
return;
|
||||||
if (row->size + n + 1 > row->cap) {
|
if (row->size + n + 1 > row->cap) {
|
||||||
row->cap = (row->size + n + 1) * 2;
|
row->cap = (row->size + n + 1) * 2;
|
||||||
row->chars = bRealloc(row->chars, row->cap);
|
row->chars = realloc(row->chars, row->cap);
|
||||||
}
|
}
|
||||||
memmove(row->chars + at + n, row->chars + at, row->size - at);
|
memmove(row->chars + at + n, row->chars + at, row->size - at);
|
||||||
memcpy(row->chars + at, src, n);
|
memcpy(row->chars + at, src, n);
|
||||||
row->size += n;
|
row->size += n;
|
||||||
row->chars = bRealloc(row->chars, row->size + 2);
|
row->chars = realloc(row->chars, row->size + 2);
|
||||||
++buffer->dirty;
|
++buffer->dirty;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -446,7 +445,7 @@ void bufferDelBytes(void)
|
|||||||
int prev_char_count = editorRowCharCount(prev, prev->size);
|
int prev_char_count = editorRowCharCount(prev, prev->size);
|
||||||
|
|
||||||
bufferRowInsertBytes(buf, prev, prev->size, r->chars, r->size);
|
bufferRowInsertBytes(buf, prev, prev->size, r->chars, r->size);
|
||||||
bFree(r->chars);
|
free(r->chars);
|
||||||
r->chars = NULL;
|
r->chars = NULL;
|
||||||
|
|
||||||
memmove(&buf->row[buf->y],
|
memmove(&buf->row[buf->y],
|
||||||
|
|||||||
+14
-16
@@ -22,7 +22,6 @@
|
|||||||
|
|
||||||
#include "include/completion.h"
|
#include "include/completion.h"
|
||||||
#include "include/init.h"
|
#include "include/init.h"
|
||||||
#include "include/utils.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Finds a prefix configuration by name
|
* @brief Finds a prefix configuration by name
|
||||||
@@ -69,13 +68,13 @@ Lisp mapKey(Lisp args, LispError* e, LispContext ctx)
|
|||||||
// second argument
|
// second argument
|
||||||
const Lisp func = lisp_car(args);
|
const Lisp func = lisp_car(args);
|
||||||
|
|
||||||
memory_temp = bRealloc(
|
memory_temp = realloc(
|
||||||
E.key_binds, ++E.number_of_keybinds * sizeof(struct keyBind_t));
|
E.key_binds, ++E.number_of_keybinds * sizeof(struct keyBind_t));
|
||||||
E.key_binds = (struct keyBind_t*)memory_temp;
|
E.key_binds = (struct keyBind_t*)memory_temp;
|
||||||
if (!E.key_binds)
|
if (!E.key_binds)
|
||||||
editorQuit(args, e, ctx);
|
editorQuit(args, e, ctx);
|
||||||
E.key_binds[E.number_of_keybinds - 1].key_sequence =
|
E.key_binds[E.number_of_keybinds - 1].key_sequence =
|
||||||
(char*)bAlloc(50 * sizeof(char));
|
(char*)malloc(50 * sizeof(char));
|
||||||
|
|
||||||
strncpy(E.key_binds[E.number_of_keybinds - 1].key_sequence, key_sequence, 50);
|
strncpy(E.key_binds[E.number_of_keybinds - 1].key_sequence, key_sequence, 50);
|
||||||
|
|
||||||
@@ -137,27 +136,27 @@ Lisp moveCursor(Lisp args, LispError* e, LispContext ctx)
|
|||||||
void bFree_structs(void)
|
void bFree_structs(void)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
bFree(E.prefix);
|
free(E.prefix);
|
||||||
for (i = 0; i < E.number_of_keybinds; ++i)
|
for (i = 0; i < E.number_of_keybinds; ++i)
|
||||||
{
|
{
|
||||||
bFree(E.key_binds[i].key_sequence);
|
free(E.key_binds[i].key_sequence);
|
||||||
}
|
}
|
||||||
bFree(E.key_binds);
|
free(E.key_binds);
|
||||||
// bFree layout
|
// bFree layout
|
||||||
bFree(E.layout.panes);
|
free(E.layout.panes);
|
||||||
|
|
||||||
// bFree buffers
|
// bFree buffers
|
||||||
for (i = 0; i < E.number_of_buffer; ++i)
|
for (i = 0; i < E.number_of_buffer; ++i)
|
||||||
{
|
{
|
||||||
bFree(E.buffers[i].filename);
|
free(E.buffers[i].filename);
|
||||||
for (j = 0; j < E.buffers[i].numrows; ++j)
|
for (j = 0; j < E.buffers[i].numrows; ++j)
|
||||||
{
|
{
|
||||||
bFree(E.buffers[i].row[j].chars);
|
free(E.buffers[i].row[j].chars);
|
||||||
}
|
}
|
||||||
bFree(E.buffers[i].row);
|
free(E.buffers[i].row);
|
||||||
}
|
}
|
||||||
|
|
||||||
bFree(E.init_file_path);
|
free(E.init_file_path);
|
||||||
fclose(E.fd_init_file);
|
fclose(E.fd_init_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,11 +185,10 @@ Lisp editorQuit(Lisp args, LispError* e, LispContext ctx)
|
|||||||
bFree_structs();
|
bFree_structs();
|
||||||
write(STDOUT_FILENO, "\x1b[2J", 4);
|
write(STDOUT_FILENO, "\x1b[2J", 4);
|
||||||
write(STDOUT_FILENO, CURSOR_TOP_LEFT, 3);
|
write(STDOUT_FILENO, CURSOR_TOP_LEFT, 3);
|
||||||
disableRawMode();
|
|
||||||
lspShutdown(E.lsp_client);
|
lspShutdown(E.lsp_client);
|
||||||
lisp_shutdown(E.ctx);
|
lisp_shutdown(E.ctx);
|
||||||
deInitEditor();
|
deInitEditor();
|
||||||
appDebug("Rest alloc %d\n", beluga_alloc_counter);
|
disableRawMode();
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -379,7 +377,7 @@ Lisp editorOpenFile(Lisp args, LispError* e, LispContext ctx)
|
|||||||
EditorPane* active = splitScreenGetActivePane();
|
EditorPane* active = splitScreenGetActivePane();
|
||||||
active->buffer_id = bufferCreate(filename, READ_AND_WRITE);
|
active->buffer_id = bufferCreate(filename, READ_AND_WRITE);
|
||||||
}
|
}
|
||||||
bFree(filename);
|
free(filename);
|
||||||
|
|
||||||
return lisp_null();
|
return lisp_null();
|
||||||
}
|
}
|
||||||
@@ -427,7 +425,7 @@ Lisp addPackage(Lisp args, LispError* e, LispContext ctx)
|
|||||||
lisp_eval(lisp_read_file(fd_package, &E.ctx_error, E.ctx), &E.ctx_error,
|
lisp_eval(lisp_read_file(fd_package, &E.ctx_error, E.ctx), &E.ctx_error,
|
||||||
E.ctx);
|
E.ctx);
|
||||||
fclose(fd_package);
|
fclose(fd_package);
|
||||||
bFree(package_dir);
|
free(package_dir);
|
||||||
|
|
||||||
return lisp_null();
|
return lisp_null();
|
||||||
}
|
}
|
||||||
@@ -558,7 +556,7 @@ Lisp editorSetPrefix(Lisp args, LispError* e, LispContext ctx)
|
|||||||
*/
|
*/
|
||||||
Lisp editorPrefix(Lisp args, LispError* e, LispContext ctx)
|
Lisp editorPrefix(Lisp args, LispError* e, LispContext ctx)
|
||||||
{
|
{
|
||||||
E.prefix = (struct prefix_t*)bRealloc(E.prefix, (++(E.number_of_prefix) + 1) *
|
E.prefix = (struct prefix_t*)realloc(E.prefix, (++(E.number_of_prefix) + 1) *
|
||||||
sizeof(struct prefix_t));
|
sizeof(struct prefix_t));
|
||||||
E.prefix[E.number_of_prefix].prefix_id = E.number_of_prefix;
|
E.prefix[E.number_of_prefix].prefix_id = E.number_of_prefix;
|
||||||
strncpy(E.prefix[E.number_of_prefix].prefix_name, lisp_string(lisp_car(args)),
|
strncpy(E.prefix[E.number_of_prefix].prefix_name, lisp_string(lisp_car(args)),
|
||||||
|
|||||||
+14
-31
@@ -15,7 +15,6 @@
|
|||||||
#include "include/lsp_ui.h"
|
#include "include/lsp_ui.h"
|
||||||
#include "include/split_screen.h"
|
#include "include/split_screen.h"
|
||||||
#include "include/terminal.h"
|
#include "include/terminal.h"
|
||||||
#include "include/utils.h"
|
|
||||||
|
|
||||||
static void lsp_send(int fd, const char* json)
|
static void lsp_send(int fd, const char* json)
|
||||||
{
|
{
|
||||||
@@ -33,22 +32,6 @@ static void lsp_send(int fd, const char* json)
|
|||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lsp_uri_to_buffer_id(const char* uri)
|
|
||||||
{
|
|
||||||
const char *path = uri;
|
|
||||||
if (strncmp(uri, "file://", 7) == 0)
|
|
||||||
path = uri + 7;
|
|
||||||
// path is now "/absolute/path" — realpath output matches this directly
|
|
||||||
|
|
||||||
for (int i = 0; i < E.number_of_buffer; i++) {
|
|
||||||
if (E.buffers[i].filename == NULL) continue;
|
|
||||||
appDebug("[URI MATCH] comparing '%s' vs '%s'\n", E.buffers[i].fullname, path);
|
|
||||||
if (strcmp(E.buffers[i].fullname, path) == 0)
|
|
||||||
return E.buffers[i].buffer_id;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static char* lsp_recv(int fd)
|
static char* lsp_recv(int fd)
|
||||||
{
|
{
|
||||||
char header[1024];
|
char header[1024];
|
||||||
@@ -74,14 +57,14 @@ static char* lsp_recv(int fd)
|
|||||||
|
|
||||||
if (content_length == 0) return NULL;
|
if (content_length == 0) return NULL;
|
||||||
|
|
||||||
char* body = bAlloc(content_length + 1);
|
char* body = malloc(content_length + 1);
|
||||||
int total = 0;
|
int total = 0;
|
||||||
while (total < content_length)
|
while (total < content_length)
|
||||||
{
|
{
|
||||||
int n = read(fd, body + total, content_length - total);
|
int n = read(fd, body + total, content_length - total);
|
||||||
if (n <= 0)
|
if (n <= 0)
|
||||||
{
|
{
|
||||||
bFree(body);
|
free(body);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
total += n;
|
total += n;
|
||||||
@@ -251,7 +234,7 @@ static void* lsp_reader(void* arg)
|
|||||||
char* msg = lsp_recv(lsp->read_fd);
|
char* msg = lsp_recv(lsp->read_fd);
|
||||||
if (!msg) break; // ← pipe closed or error, exit cleanly
|
if (!msg) break; // ← pipe closed or error, exit cleanly
|
||||||
lsp_dispatch(lsp, msg);
|
lsp_dispatch(lsp, msg);
|
||||||
bFree(msg);
|
free(msg);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -382,7 +365,7 @@ static char* buffer_to_text(struct buffer_t* buf)
|
|||||||
int total = 0;
|
int total = 0;
|
||||||
for (int i = 0; i < buf->numrows; i++)
|
for (int i = 0; i < buf->numrows; i++)
|
||||||
total += buf->row[i].size + 1; // +1 for \n
|
total += buf->row[i].size + 1; // +1 for \n
|
||||||
char* text = bAlloc(total + 1);
|
char* text = malloc(total + 1);
|
||||||
char* p = text;
|
char* p = text;
|
||||||
for (int i = 0; i < buf->numrows; i++)
|
for (int i = 0; i < buf->numrows; i++)
|
||||||
{
|
{
|
||||||
@@ -428,8 +411,8 @@ void lspDidOpen(LspClient* lsp, struct buffer_t* buf)
|
|||||||
char* msg = cJSON_PrintUnformatted(root);
|
char* msg = cJSON_PrintUnformatted(root);
|
||||||
lsp_send(lsp->write_fd, msg);
|
lsp_send(lsp->write_fd, msg);
|
||||||
|
|
||||||
bFree(msg);
|
free(msg);
|
||||||
bFree(raw);
|
free(raw);
|
||||||
cJSON_Delete(root);
|
cJSON_Delete(root);
|
||||||
buf->b_lsp_open = 1;
|
buf->b_lsp_open = 1;
|
||||||
}
|
}
|
||||||
@@ -466,8 +449,8 @@ void lspDidChange(LspClient* lsp, struct buffer_t* buf)
|
|||||||
char* msg = cJSON_PrintUnformatted(root);
|
char* msg = cJSON_PrintUnformatted(root);
|
||||||
lsp_send(lsp->write_fd, msg);
|
lsp_send(lsp->write_fd, msg);
|
||||||
|
|
||||||
bFree(msg);
|
free(msg);
|
||||||
bFree(raw);
|
free(raw);
|
||||||
cJSON_Delete(root);
|
cJSON_Delete(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -487,7 +470,7 @@ void lspDidClose(LspClient* lsp, struct buffer_t* buf)
|
|||||||
cJSON_AddItemToObject(root, "params", params);
|
cJSON_AddItemToObject(root, "params", params);
|
||||||
char* msg = cJSON_PrintUnformatted(root);
|
char* msg = cJSON_PrintUnformatted(root);
|
||||||
lsp_send(lsp->write_fd, msg);
|
lsp_send(lsp->write_fd, msg);
|
||||||
bFree(msg);
|
free(msg);
|
||||||
cJSON_Delete(root);
|
cJSON_Delete(root);
|
||||||
buf->b_lsp_open = 0;
|
buf->b_lsp_open = 0;
|
||||||
}
|
}
|
||||||
@@ -531,7 +514,7 @@ void lspRequestCompletion(LspClient* lsp, struct buffer_t* buf,
|
|||||||
lsp_send(lsp->write_fd, msg);
|
lsp_send(lsp->write_fd, msg);
|
||||||
E.lsp_client->completion_requested = 1;
|
E.lsp_client->completion_requested = 1;
|
||||||
cJSON_Delete(req);
|
cJSON_Delete(req);
|
||||||
bFree(msg);
|
free(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lspRequestDefinition(LspClient* lsp, struct buffer_t* buf, int line, int col)
|
void lspRequestDefinition(LspClient* lsp, struct buffer_t* buf, int line, int col)
|
||||||
@@ -544,7 +527,7 @@ void lspRequestDefinition(LspClient* lsp, struct buffer_t* buf, int line, int co
|
|||||||
"\"position\":{\"line\":%d,\"character\":%d}}}",
|
"\"position\":{\"line\":%d,\"character\":%d}}}",
|
||||||
lsp->next_id++, buf->filename, line, col);
|
lsp->next_id++, buf->filename, line, col);
|
||||||
lsp_send(lsp->write_fd, msg);
|
lsp_send(lsp->write_fd, msg);
|
||||||
bFree(msg);
|
free(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lspShutdown(LspClient *lsp)
|
void lspShutdown(LspClient *lsp)
|
||||||
@@ -567,7 +550,7 @@ void lspShutdown(LspClient *lsp)
|
|||||||
cJSON_AddNullToObject (req, "params");
|
cJSON_AddNullToObject (req, "params");
|
||||||
char *msg = cJSON_PrintUnformatted(req);
|
char *msg = cJSON_PrintUnformatted(req);
|
||||||
lsp_send(lsp->write_fd, msg);
|
lsp_send(lsp->write_fd, msg);
|
||||||
bFree(msg);
|
free(msg);
|
||||||
cJSON_Delete(req);
|
cJSON_Delete(req);
|
||||||
|
|
||||||
// 3. Wait briefly for the shutdown response (2s timeout)
|
// 3. Wait briefly for the shutdown response (2s timeout)
|
||||||
@@ -577,7 +560,7 @@ void lspShutdown(LspClient *lsp)
|
|||||||
FD_SET(lsp->read_fd, &fds);
|
FD_SET(lsp->read_fd, &fds);
|
||||||
if (select(lsp->read_fd + 1, &fds, NULL, NULL, &tv) > 0) {
|
if (select(lsp->read_fd + 1, &fds, NULL, NULL, &tv) > 0) {
|
||||||
char *resp = lsp_recv(lsp->read_fd);
|
char *resp = lsp_recv(lsp->read_fd);
|
||||||
bFree(resp);
|
free(resp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. Send exit notification
|
// 4. Send exit notification
|
||||||
@@ -607,5 +590,5 @@ void lspShutdown(LspClient *lsp)
|
|||||||
// 10. Reap the clangd process
|
// 10. Reap the clangd process
|
||||||
waitpid(lsp->pid, NULL, 0);
|
waitpid(lsp->pid, NULL, 0);
|
||||||
|
|
||||||
bFree(lsp);
|
free(lsp);
|
||||||
}
|
}
|
||||||
+2
-3
@@ -8,7 +8,6 @@
|
|||||||
#include "../include/split_screen.h"
|
#include "../include/split_screen.h"
|
||||||
#include "../include/terminal.h"
|
#include "../include/terminal.h"
|
||||||
#include "../include/utf8.h"
|
#include "../include/utf8.h"
|
||||||
#include "include/utils.h"
|
|
||||||
|
|
||||||
|
|
||||||
extern struct editorConfig E;
|
extern struct editorConfig E;
|
||||||
@@ -86,13 +85,13 @@ char *editorGetClipboard(void) {
|
|||||||
|
|
||||||
size_t cap = 4096;
|
size_t cap = 4096;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
char *buf = bAlloc(cap);
|
char *buf = malloc(cap);
|
||||||
|
|
||||||
int c;
|
int c;
|
||||||
while ((c = fgetc(pipe)) != EOF) {
|
while ((c = fgetc(pipe)) != EOF) {
|
||||||
if (len + 1 >= cap) {
|
if (len + 1 >= cap) {
|
||||||
cap *= 2;
|
cap *= 2;
|
||||||
buf = bRealloc(buf, cap);
|
buf = realloc(buf, cap);
|
||||||
}
|
}
|
||||||
buf[len++] = (char)c;
|
buf[len++] = (char)c;
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-7
@@ -13,7 +13,6 @@
|
|||||||
#include "../include/data.h"
|
#include "../include/data.h"
|
||||||
#include "../include/split_screen.h"
|
#include "../include/split_screen.h"
|
||||||
#include "../include/row_op.h"
|
#include "../include/row_op.h"
|
||||||
#include <_string.h>
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -21,7 +20,6 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include "../include/utils.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Closes the current file and resets editor state
|
* @brief Closes the current file and resets editor state
|
||||||
@@ -37,13 +35,13 @@ void editorCloseFile(void) {
|
|||||||
active->x_offset = 0;
|
active->x_offset = 0;
|
||||||
active->y_offset = 0;
|
active->y_offset = 0;
|
||||||
for (int i = 0; i < buf->numrows; ++i) {
|
for (int i = 0; i < buf->numrows; ++i) {
|
||||||
bFree(buf->row[i].chars);
|
free(buf->row[i].chars);
|
||||||
}
|
}
|
||||||
buf->numrows = 0;
|
buf->numrows = 0;
|
||||||
bFree(buf->row);
|
free(buf->row);
|
||||||
buf->row = NULL;
|
buf->row = NULL;
|
||||||
buf->dirty = 0;
|
buf->dirty = 0;
|
||||||
bFree(buf->filename);
|
free(buf->filename);
|
||||||
buf->filename = NULL;
|
buf->filename = NULL;
|
||||||
E.status_msg[0] = '\0';
|
E.status_msg[0] = '\0';
|
||||||
E.status_msg_time = 0;
|
E.status_msg_time = 0;
|
||||||
@@ -86,10 +84,10 @@ void editorOpen(struct buffer_t* buffer) {
|
|||||||
}
|
}
|
||||||
appDebug("line %s\n", line);
|
appDebug("line %s\n", line);
|
||||||
bufferInsertRow(buffer, buffer->numrows, line, line_len);
|
bufferInsertRow(buffer, buffer->numrows, line, line_len);
|
||||||
bFree(line);
|
free(line);
|
||||||
line = NULL;
|
line = NULL;
|
||||||
}
|
}
|
||||||
bFree(line);
|
free(line);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
E.dirty = 0;
|
E.dirty = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-8
@@ -11,7 +11,6 @@
|
|||||||
#define LISP_IMPLEMENTATION
|
#define LISP_IMPLEMENTATION
|
||||||
#include "../include/lisp.h"
|
#include "../include/lisp.h"
|
||||||
#include "../include/lisp_lib.h"
|
#include "../include/lisp_lib.h"
|
||||||
#include "include/utils.h"
|
|
||||||
|
|
||||||
struct editorConfig;
|
struct editorConfig;
|
||||||
|
|
||||||
@@ -133,12 +132,12 @@ void initEditor() {
|
|||||||
E.number_of_keybinds = 0;
|
E.number_of_keybinds = 0;
|
||||||
E.number_of_prefix = 0;
|
E.number_of_prefix = 0;
|
||||||
// General prefix is 0 (no prefix)
|
// General prefix is 0 (no prefix)
|
||||||
E.prefix = (struct prefix_t *)bAlloc(sizeof(struct prefix_t));
|
E.prefix = (struct prefix_t *)malloc(sizeof(struct prefix_t));
|
||||||
E.prefix[0].prefix_id = 0;
|
E.prefix[0].prefix_id = 0;
|
||||||
strncpy(E.prefix[0].prefix_name, "no-prefix", 64);
|
strncpy(E.prefix[0].prefix_name, "no-prefix", 64);
|
||||||
E.prefix_state = 0;
|
E.prefix_state = 0;
|
||||||
|
|
||||||
E.lsp_client = (LspClient*)bAlloc(sizeof(LspClient));
|
E.lsp_client = (LspClient*)malloc(sizeof(LspClient));
|
||||||
E.lsp_client->state = LSP_SHUTDOWN;
|
E.lsp_client->state = LSP_SHUTDOWN;
|
||||||
|
|
||||||
initConfig();
|
initConfig();
|
||||||
@@ -161,13 +160,13 @@ void initEditor() {
|
|||||||
void deInitEditor()
|
void deInitEditor()
|
||||||
{
|
{
|
||||||
freeScreenLayout(&E.layout);
|
freeScreenLayout(&E.layout);
|
||||||
bFree(E.lsp_client);
|
free(E.lsp_client);
|
||||||
bFree(E.status_msg);
|
free(E.status_msg);
|
||||||
bFree(E.init_file_path);
|
free(E.init_file_path);
|
||||||
bFree(E.key_binds);
|
free(E.key_binds);
|
||||||
for (int i = 0; i < E.number_of_keybinds; i++)
|
for (int i = 0; i < E.number_of_keybinds; i++)
|
||||||
{
|
{
|
||||||
bFree(E.key_binds[i].key_sequence);
|
free(E.key_binds[i].key_sequence);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-6
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
#include "include/terminal.h"
|
#include "include/terminal.h"
|
||||||
#include "include/utf8.h"
|
#include "include/utf8.h"
|
||||||
#include "include/utils.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file input.c
|
* @file input.c
|
||||||
@@ -91,7 +90,7 @@ const char *fileCompletion(const char *path) {
|
|||||||
// Cleanup when no more entries
|
// Cleanup when no more entries
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
dir = NULL;
|
dir = NULL;
|
||||||
bFree(entry);
|
free(entry);
|
||||||
appDebug("[FILE COMP] no entries\n");
|
appDebug("[FILE COMP] no entries\n");
|
||||||
return strdup(path);
|
return strdup(path);
|
||||||
}
|
}
|
||||||
@@ -113,7 +112,7 @@ const char *fileCompletion(const char *path) {
|
|||||||
char *editorPrompt(char *prompt, char *placeHolder, char bPathMode) {
|
char *editorPrompt(char *prompt, char *placeHolder, char bPathMode) {
|
||||||
size_t buf_size = 256;
|
size_t buf_size = 256;
|
||||||
appDebug("[FILE COMP] %s %d\n", placeHolder, strlen(placeHolder));
|
appDebug("[FILE COMP] %s %d\n", placeHolder, strlen(placeHolder));
|
||||||
char *buf = bAlloc(buf_size);
|
char *buf = malloc(buf_size);
|
||||||
size_t buf_len = 0;
|
size_t buf_len = 0;
|
||||||
int c = 0;
|
int c = 0;
|
||||||
buf[0] = '\0';
|
buf[0] = '\0';
|
||||||
@@ -130,7 +129,7 @@ char *editorPrompt(char *prompt, char *placeHolder, char bPathMode) {
|
|||||||
}
|
}
|
||||||
} else if (c == ESCAPE) {
|
} else if (c == ESCAPE) {
|
||||||
editorSetStatusMessage("");
|
editorSetStatusMessage("");
|
||||||
bFree(buf);
|
free(buf);
|
||||||
return NULL;
|
return NULL;
|
||||||
} else if (c == '\r') {
|
} else if (c == '\r') {
|
||||||
if (buf_len != 0) {
|
if (buf_len != 0) {
|
||||||
@@ -152,14 +151,14 @@ char *editorPrompt(char *prompt, char *placeHolder, char bPathMode) {
|
|||||||
memset(buf, 0, 256);
|
memset(buf, 0, 256);
|
||||||
char *buf_complete = (char *)fileCompletion(path);
|
char *buf_complete = (char *)fileCompletion(path);
|
||||||
strcpy(buf, buf_complete);
|
strcpy(buf, buf_complete);
|
||||||
bFree(buf_complete);
|
free(buf_complete);
|
||||||
buf_len = strlen(buf);
|
buf_len = strlen(buf);
|
||||||
buf[buf_len] = '\0';
|
buf[buf_len] = '\0';
|
||||||
|
|
||||||
} else if (!iscntrl(c) && c < 256) {
|
} else if (!iscntrl(c) && c < 256) {
|
||||||
if (buf_len == buf_size - 1) {
|
if (buf_len == buf_size - 1) {
|
||||||
buf_size *= 2;
|
buf_size *= 2;
|
||||||
buf = bRealloc(buf, buf_size);
|
buf = realloc(buf, buf_size);
|
||||||
}
|
}
|
||||||
buf[buf_len++] = (char)c;
|
buf[buf_len++] = (char)c;
|
||||||
buf[buf_len] = '\0';
|
buf[buf_len] = '\0';
|
||||||
|
|||||||
+1
-4
@@ -21,9 +21,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include "include/completion.h"
|
|
||||||
#include "include/utils.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Renders a single pane with its buffer content
|
* @brief Renders a single pane with its buffer content
|
||||||
*/
|
*/
|
||||||
@@ -85,7 +82,7 @@ static void editorDrawPane(struct abuf* ab, EditorPane* pane)
|
|||||||
|
|
||||||
// Print only up to pane width
|
// Print only up to pane width
|
||||||
abAppend(ab, highlighted, byte_len_to_print);
|
abAppend(ab, highlighted, byte_len_to_print);
|
||||||
bFree(highlighted);
|
free(highlighted);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
+5
-11
@@ -9,7 +9,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "include/utils.h"
|
|
||||||
|
|
||||||
extern struct editorConfig E;
|
extern struct editorConfig E;
|
||||||
|
|
||||||
@@ -21,7 +20,7 @@ void splitScreenInit(void) {
|
|||||||
E.layout.num_panes = 1;
|
E.layout.num_panes = 1;
|
||||||
E.layout.active_pane = 0;
|
E.layout.active_pane = 0;
|
||||||
|
|
||||||
E.layout.panes = bAlloc(sizeof(EditorPane) * 2);
|
E.layout.panes = malloc(sizeof(EditorPane) * 2);
|
||||||
|
|
||||||
// Initialize single fullscreen pane
|
// Initialize single fullscreen pane
|
||||||
E.layout.panes[0].buffer_id = -1; // No buffer for now
|
E.layout.panes[0].buffer_id = -1; // No buffer for now
|
||||||
@@ -51,7 +50,7 @@ int splitScreenVertical(int buffer_id_left, int buffer_id_right) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// bReallocate panes array
|
// bReallocate panes array
|
||||||
E.layout.panes = bRealloc(E.layout.panes, sizeof(EditorPane) * 2);
|
E.layout.panes = realloc(E.layout.panes, sizeof(EditorPane) * 2);
|
||||||
E.layout.mode = SPLIT_VERTICAL;
|
E.layout.mode = SPLIT_VERTICAL;
|
||||||
E.layout.num_panes = 2;
|
E.layout.num_panes = 2;
|
||||||
E.layout.active_pane = 0;
|
E.layout.active_pane = 0;
|
||||||
@@ -102,7 +101,7 @@ int splitScreenHorizontal(int buffer_id_top, int buffer_id_bottom) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// bReallocate panes array
|
// bReallocate panes array
|
||||||
E.layout.panes = bRealloc(E.layout.panes, sizeof(EditorPane) * 2);
|
E.layout.panes = realloc(E.layout.panes, sizeof(EditorPane) * 2);
|
||||||
E.layout.mode = SPLIT_HORIZONTAL;
|
E.layout.mode = SPLIT_HORIZONTAL;
|
||||||
E.layout.num_panes = 2;
|
E.layout.num_panes = 2;
|
||||||
E.layout.active_pane = 0;
|
E.layout.active_pane = 0;
|
||||||
@@ -221,15 +220,10 @@ EditorPane *splitScreenGetActivePane(void) {
|
|||||||
|
|
||||||
void freeScreenLayout(ScreenLayout *layout)
|
void freeScreenLayout(ScreenLayout *layout)
|
||||||
{
|
{
|
||||||
while (--E.layout.num_panes >= 0)
|
free(layout->panes);
|
||||||
{
|
|
||||||
bFree(&E.layout.panes);
|
|
||||||
}
|
|
||||||
|
|
||||||
bFree(&E.layout);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void freePane(EditorPane *pane)
|
void freePane(EditorPane *pane)
|
||||||
{
|
{
|
||||||
bFree(pane);
|
free(pane);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "include/utils.h"
|
|
||||||
|
|
||||||
extern struct editorConfig E;
|
extern struct editorConfig E;
|
||||||
|
|
||||||
@@ -113,7 +112,7 @@ char *highlight_line(const char *line, int *length) {
|
|||||||
// Allocate generously based on line length to avoid overflow.
|
// Allocate generously based on line length to avoid overflow.
|
||||||
int line_len = strlen(line);
|
int line_len = strlen(line);
|
||||||
int buf_size = line_len * 32 + 256;
|
int buf_size = line_len * 32 + 256;
|
||||||
char *result = bAlloc(buf_size);
|
char *result = malloc(buf_size);
|
||||||
int result_pos = 0;
|
int result_pos = 0;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
#include "../include/buffer.h"
|
#include "../include/buffer.h"
|
||||||
#include "../include/split_screen.h"
|
#include "../include/split_screen.h"
|
||||||
#include "include/utf8.h"
|
#include "../include/utf8.h"
|
||||||
|
|
||||||
void die(const char* s)
|
void die(const char* s)
|
||||||
{
|
{
|
||||||
|
|||||||
-37
@@ -1,37 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by Giorgio on 28/05/2026.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "../include/utils.h"
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
int beluga_alloc_counter = 0;
|
|
||||||
|
|
||||||
void * bAlloc(size_t size)
|
|
||||||
{
|
|
||||||
void * result = malloc(size);
|
|
||||||
if (!result)
|
|
||||||
return NULL;
|
|
||||||
beluga_alloc_counter++;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
void * bRealloc(void * ptr, size_t size)
|
|
||||||
{
|
|
||||||
void * result = realloc(ptr, size);
|
|
||||||
if (!result)
|
|
||||||
return NULL;
|
|
||||||
beluga_alloc_counter++;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
void * bFree(void * ptr)
|
|
||||||
{
|
|
||||||
if (ptr)
|
|
||||||
{
|
|
||||||
free(ptr);
|
|
||||||
beluga_alloc_counter--;
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user