commit 16fa6bfa5bfc26126ac712ac03528914b0d651f9
parent ad0cb56260b44997474ce30b98f0d96013b84073
Author: lumidify <nobody@lumidify.org>
Date: Sat, 20 Feb 2021 20:32:24 +0100
Move diagnostic functions to util
Diffstat:
M | Makefile | | | 6 | +++--- |
M | color.c | | | 4 | ++-- |
M | ltk.h | | | 4 | ---- |
M | ltkc.c | | | 49 | ++++++++++++++++++++++++++++++++----------------- |
M | ltkd.c | | | 81 | +++++++++++++++++++------------------------------------------------------------ |
M | memory.c | | | 2 | +- |
M | text_pango.c | | | 2 | +- |
M | util.c | | | 75 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------- |
M | util.h | | | 10 | ++++++++-- |
9 files changed, 121 insertions(+), 112 deletions(-)
diff --git a/Makefile b/Makefile
@@ -1,14 +1,14 @@
include config.mk
-OBJ += strtonum.o memory.o color.o util.o ltkd.o ini.o grid.o box.o scrollbar.o button.o label.o draw.o
+OBJ += strtonum.o util.o memory.o color.o ltkd.o ini.o grid.o box.o scrollbar.o button.o label.o draw.o
all: ltkd ltkc
ltkd: $(OBJ)
$(CC) -o $@ $(OBJ) $(LDFLAGS)
-ltkc: ltkc.o util.o
- $(CC) -o $@ ltkc.o util.o
+ltkc: ltkc.o util.o memory.o
+ $(CC) -o $@ ltkc.o util.o memory.o
%.o: %.c
$(CC) -c -o $@ $< $(CFLAGS)
diff --git a/color.c b/color.c
@@ -1,3 +1,4 @@
+#include <stdarg.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
@@ -8,8 +9,7 @@ void
ltk_color_create(Display *dpy, int screen, Colormap cm, const char *hex, LtkColor *col) {
if (!XParseColor(dpy, cm, hex, &col->xcolor)) {
/* FIXME: better error reporting!!! */
- /* FIXME: remove obsolete ltk_err function */
- ltk_err("ltk_color_create");
+ ltk_fatal("ltk_color_create");
}
XAllocColor(dpy, cm, &col->xcolor);
/* FIXME: replace with XftColorAllocValue; error checking */
diff --git a/ltk.h b/ltk.h
@@ -154,10 +154,6 @@ typedef struct ltk_window {
ltk_rect ltk_rect_intersect(ltk_rect r1, ltk_rect r2);
ltk_rect ltk_rect_union(ltk_rect r1, ltk_rect r2);
void ltk_window_invalidate_rect(ltk_window *window, ltk_rect rect);
-void ltk_warn(const char *format, ...);
-void ltk_fatal(const char *format, ...);
-void ltk_warn_errno(const char *format, ...);
-void ltk_fatal_errno(const char *format, ...);
int ltk_create_xcolor(ltk_window *window, const char *hex, XColor *col);
void ltk_queue_event(ltk_window *window, ltk_event_type type, const char *id, const char *data);
int ltk_collide_rect(ltk_rect rect, int x, int y);
diff --git a/ltkc.c b/ltkc.c
@@ -1,6 +1,6 @@
/*
* This file is part of the Lumidify ToolKit (LTK)
- * Copyright (c) 2020 lumidify <nobody@lumidify.org>
+ * Copyright (c) 2021 lumidify <nobody@lumidify.org>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,6 +24,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <stdarg.h>
#include <stddef.h>
#include <unistd.h>
#include <time.h>
@@ -32,6 +33,7 @@
#include <sys/socket.h>
#include <sys/un.h>
#include "util.h"
+#include "memory.h"
#define BLK_SIZE 128
@@ -44,8 +46,12 @@ static struct {
int out_alloc;
} io_buffers;
+static char *ltk_dir = NULL;
+static char *sock_path = NULL;
+static int sockfd = -1;
+
int main(int argc, char *argv[]) {
- int sockfd, maxrfd, maxwfd;
+ int maxrfd, maxwfd;
int infd = fileno(stdin);
int outfd = fileno(stdout);
struct sockaddr_un un;
@@ -53,7 +59,6 @@ int main(int argc, char *argv[]) {
struct timeval tv, tv_master;
tv_master.tv_sec = 0;
tv_master.tv_usec = 20000;
- char *ltk_dir = NULL, *sock_path = NULL;
int path_size;
if (argc != 2) {
@@ -69,11 +74,7 @@ int main(int argc, char *argv[]) {
/* 7 because of "/", ".sock", and '\0' */
path_size = strlen(ltk_dir) + strlen(argv[1]) + 7;
- sock_path = malloc(path_size);
- if (!sock_path) {
- (void)fprintf(stderr, "Unable to allocate memory for socket path.\n");
- return 1;
- }
+ sock_path = ltk_malloc(path_size);
snprintf(sock_path, path_size, "%s/%s.sock", ltk_dir, argv[1]);
if ((sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
@@ -92,14 +93,10 @@ int main(int argc, char *argv[]) {
return -2;
}
- io_buffers.in_buffer = malloc(BLK_SIZE);
- if (!io_buffers.in_buffer)
- return 1;
+ io_buffers.in_buffer = ltk_malloc(BLK_SIZE);
io_buffers.in_alloc = BLK_SIZE;
- io_buffers.out_buffer = malloc(BLK_SIZE);
- if (!io_buffers.out_buffer)
- return 1;
+ io_buffers.out_buffer = ltk_malloc(BLK_SIZE);
io_buffers.out_alloc = BLK_SIZE;
FD_ZERO(&rallfds);
@@ -190,9 +187,27 @@ int main(int argc, char *argv[]) {
}
}
- close(sockfd);
- free(ltk_dir);
- free(sock_path);
+ ltk_cleanup();
return 0;
}
+
+void
+ltk_log_msg(const char *mode, const char *format, va_list args) {
+ fprintf(stderr, "ltkc %s: ", mode);
+ vfprintf(stderr, format, args);
+}
+
+void
+ltk_cleanup() {
+ if (sockfd >= 0)
+ close(sockfd);
+ if (ltk_dir)
+ ltk_free(ltk_dir);
+ if (sock_path)
+ ltk_free(sock_path);
+ if (io_buffers.in_buffer)
+ ltk_free(io_buffers.in_buffer);
+ if (io_buffers.out_buffer)
+ ltk_free(io_buffers.out_buffer);
+}
diff --git a/ltkd.c b/ltkd.c
@@ -1,3 +1,4 @@
+/* FIXME Figure out how to properly print window id */
/* FIXME: PROPERLY CLEANUP ALL THEMES */
/* FIXME: error checking in tokenizer (is this necessary?) */
/* FIXME: parsing doesn't work properly with bs? */
@@ -99,7 +100,6 @@ static ltk_window *ltk_create_window(const char *title, int x, int y,
unsigned int w, unsigned int h);
static void ltk_destroy_widget_hash(void);
static void ltk_destroy_window(ltk_window *window);
-static void ltk_cleanup(void);
static void ltk_redraw_window(ltk_window *window);
static void ltk_window_other_event(ltk_window *window, XEvent event);
static void ltk_handle_event(ltk_window *window, XEvent event);
@@ -352,7 +352,7 @@ open_log(char *dir) {
return f;
}
-static void
+void
ltk_cleanup(void) {
if (listenfd >= 0)
close(listenfd);
@@ -387,6 +387,23 @@ ltk_quit(ltk_window *window) {
running = 0;
}
+void
+ltk_log_msg(const char *mode, const char *format, va_list args) {
+ char logtime[25]; /* FIXME: This should always be big enough, right? */
+ time_t clock;
+ struct tm *timeptr;
+
+ time(&clock);
+ timeptr = localtime(&clock);
+ strftime(&logtime, 25, "%Y-%m-%d %H:%M:%S", timeptr);
+
+ if (main_window)
+ fprintf(stderr, "%s ltkd(%d) %s: ", logtime, main_window->xwindow, mode);
+ else
+ fprintf(stderr, "%s ltkd(?) %s: ", logtime, mode);
+ vfprintf(stderr, format, args);
+}
+
static int
ltk_set_root_widget_cmd(
ltk_window *window,
@@ -441,66 +458,6 @@ ltk_window_invalidate_rect(ltk_window *window, ltk_rect rect) {
window->dirty_rect = ltk_rect_union(rect, window->dirty_rect);
}
-static void
-print_log(const char *mode, const char *format, va_list args) {
- char logtime[25]; /* FIXME: This should always be big enough, right? */
- FILE *errfile = ltk_logfile;
- time_t clock;
- struct tm *timeptr;
-
- time(&clock);
- timeptr = localtime(&clock);
- strftime(&logtime, 25, "%Y-%m-%d %H:%M:%S", timeptr);
-
- if (!errfile)
- errfile = stderr;
-
- if (main_window)
- fprintf(errfile, "%s ltkd(%d) %s: ", logtime, main_window->xwindow, mode);
- else
- fprintf(errfile, "%s ltkd(?) %s: ", logtime, mode);
- vfprintf(errfile, format, args);
-}
-
-void
-ltk_warn(const char *format, ...) {
- va_list args;
- va_start(args, format);
- print_log("Warning", format, args);
- va_end(args);
-}
-
-void
-ltk_fatal(const char *format, ...) {
- va_list args;
- va_start(args, format);
- print_log("Fatal", format, args);
- va_end(args);
- ltk_cleanup();
-
- exit(1);
-};
-
-void
-ltk_warn_errno(const char *format, ...) {
- va_list args;
- char *errstr = strerror(errno);
- va_start(args, format);
- print_log("Warning", format, args);
- va_end(args);
- ltk_warn("system error: %s\n", errstr);
-}
-
-void
-ltk_fatal_errno(const char *format, ...) {
- va_list args;
- char *errstr = strerror(errno);
- va_start(args, format);
- print_log("Fatal", format, args);
- va_end(args);
- ltk_fatal("system error: %s\n", errstr);
-}
-
/* FIXME: Proper error checking by calling functions */
int
ltk_create_xcolor(ltk_window *window, const char *hex, XColor *col) {
diff --git a/memory.c b/memory.c
@@ -29,7 +29,7 @@
#include <string.h>
#include <stdint.h>
#include "color.h"
-#include "ltk.h"
+#include "util.h"
char *
ltk_strdup_impl(const char *s) {
diff --git a/text_pango.c b/text_pango.c
@@ -60,7 +60,7 @@ ltk_text_line_set_width(LtkTextLine *tl, int width) {
LtkTextLine *
ltk_text_line_create(Window window, uint16_t font_size, char *text, int width) {
if (!tm.context)
- ltk_err("ltk_text_line_create (pango): text not initialized yet");
+ ltk_fatal("ltk_text_line_create (pango): text not initialized yet");
LtkTextLine *line = ltk_malloc(sizeof(LtkTextLine));
line->text = text;
line->font_size = font_size;
diff --git a/util.c b/util.c
@@ -1,6 +1,6 @@
/*
* This file is part of the Lumidify ToolKit (LTK)
- * Copyright (c) 2020 lumidify <nobody@lumidify.org>
+ * Copyright (c) 2021 lumidify <nobody@lumidify.org>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -26,13 +26,12 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <stdarg.h>
-void
-ltk_err(const char *msg) {
- perror(msg);
- exit(1);
-}
+#include "util.h"
+#include "memory.h"
+/* FIXME: Should these functions really fail on memory error? */
char *
ltk_read_file(const char *path, unsigned long *len) {
FILE *f;
@@ -42,8 +41,7 @@ ltk_read_file(const char *path, unsigned long *len) {
fseek(f, 0, SEEK_END);
*len = ftell(f);
fseek(f, 0, SEEK_SET);
- file_contents = malloc(*len + 1);
- if (!file_contents) return NULL;
+ file_contents = ltk_malloc(*len + 1);
fread(file_contents, 1, *len, f);
file_contents[*len] = '\0';
fclose(f);
@@ -52,15 +50,12 @@ ltk_read_file(const char *path, unsigned long *len) {
}
/* If `needed` is larger than `*alloc_size`, resize `*str` to
- `max(needed, *alloc_size * 2)`.
- Returns 1 on error, 0 otherwise. If an error occurs, `*str` and
- `*alloc_size` are not modified. */
+ `max(needed, *alloc_size * 2)`. Aborts program on error. */
int
ltk_grow_string(char **str, int *alloc_size, int needed) {
if (needed <= *alloc_size) return 0;
int new_size = needed > (*alloc_size * 2) ? needed : (*alloc_size * 2);
- char *new = realloc(*str, new_size);
- if (!new) return 1;
+ char *new = ltk_realloc(*str, new_size);
*str = new;
*alloc_size = new_size;
return 0;
@@ -79,18 +74,22 @@ ltk_setup_directory(void) {
dir_orig = getenv("LTKDIR");
if (dir_orig) {
- dir = strdup(dir_orig);
+ dir = ltk_strdup(dir_orig);
+ /*
if (!dir)
return NULL;
+ */
} else {
uid = getuid();
pw = getpwuid(uid);
if (!pw)
return NULL;
len = strlen(pw->pw_dir);
- dir = malloc(len + 6);
+ dir = ltk_malloc(len + 6);
+ /*
if (!dir)
return NULL;
+ */
strcpy(dir, pw->pw_dir);
strcpy(dir + len, "/.ltk");
}
@@ -105,8 +104,7 @@ ltk_setup_directory(void) {
/* Concatenate the two given strings and return the result.
This allocates new memory for the result string, unlike
- the actual strcat.
- Returns NULL on error. */
+ the actual strcat. Aborts program on error */
char *
ltk_strcat_useful(const char *str1, const char *str2) {
int len1, len2;
@@ -114,11 +112,48 @@ ltk_strcat_useful(const char *str1, const char *str2) {
len1 = strlen(str1);
len2 = strlen(str2);
- ret = malloc(len1 + len2 + 1);
- if (!ret)
- return NULL;
+ ret = ltk_malloc(len1 + len2 + 1);
strcpy(ret, str1);
strcpy(ret + len1, str2);
return ret;
}
+
+void
+ltk_warn(const char *format, ...) {
+ va_list args;
+ va_start(args, format);
+ ltk_log_msg("Warning", format, args);
+ va_end(args);
+}
+
+void
+ltk_fatal(const char *format, ...) {
+ va_list args;
+ va_start(args, format);
+ ltk_log_msg("Fatal", format, args);
+ va_end(args);
+ ltk_cleanup();
+
+ exit(1);
+};
+
+void
+ltk_warn_errno(const char *format, ...) {
+ va_list args;
+ char *errstr = strerror(errno);
+ va_start(args, format);
+ ltk_log_msg("Warning", format, args);
+ va_end(args);
+ ltk_warn("system error: %s\n", errstr);
+}
+
+void
+ltk_fatal_errno(const char *format, ...) {
+ va_list args;
+ char *errstr = strerror(errno);
+ va_start(args, format);
+ ltk_log_msg("Fatal", format, args);
+ va_end(args);
+ ltk_fatal("system error: %s\n", errstr);
+}
diff --git a/util.h b/util.h
@@ -1,6 +1,6 @@
/*
* This file is part of the Lumidify ToolKit (LTK)
- * Copyright (c) 2020 lumidify <nobody@lumidify.org>
+ * Copyright (c) 2021 lumidify <nobody@lumidify.org>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -21,14 +21,20 @@
* SOFTWARE.
*/
+/* Requires: <stdarg.h> */
+
#ifndef __OpenBSD__
long long
strtonum(const char *numstr, long long minval, long long maxval,
const char **errstrp);
#endif
-void ltk_err(const char *msg);
char *ltk_read_file(const char *path, unsigned long *len);
int ltk_grow_string(char **str, int *alloc_size, int needed);
char *ltk_setup_directory(void);
char *ltk_strcat_useful(const char *str1, const char *str2);
+
+/* Note: these are actually implemented in ltkd.c and ltkc.c (they are just
+ declared here so they can be used by the utility functions */
+void ltk_log_msg(const char *mode, const char *format, va_list args);
+void ltk_cleanup(void);