Convert most dynamic allocations to use functions from xmalloc.h

This commit is contained in:
Craig Barnes 2020-08-08 20:34:30 +01:00
parent ecb2695822
commit 7a77958ba2
21 changed files with 133 additions and 68 deletions

View file

@ -5,6 +5,7 @@
#include <stdint.h>
#include <stdbool.h>
#include <assert.h>
#include <errno.h>
#define LOG_MODULE "base64"
#define LOG_ENABLE_DBG 0
@ -47,10 +48,14 @@ base64_decode(const char *s)
{
const size_t len = strlen(s);
if (len % 4 != 0)
if (len % 4 != 0) {
errno = EINVAL;
return NULL;
}
char *ret = malloc(len / 4 * 3 + 1);
if (unlikely(ret == NULL))
return NULL;
for (size_t i = 0, o = 0; i < len; i += 4, o += 3) {
unsigned char c0 = s[i + 0];
@ -60,6 +65,7 @@ base64_decode(const char *s)
if (!is_valid(c0) || !is_valid(c1) || !is_valid(c2) || !is_valid(c3)) {
free(ret);
errno = EINVAL;
return NULL;
}
@ -87,10 +93,12 @@ char *
base64_encode(const uint8_t *data, size_t size)
{
assert(size % 3 == 0);
if (size %3 != 0)
if (unlikely(size % 3 != 0))
return NULL;
char *ret = malloc(size / 3 * 4 + 1);
if (unlikely(ret == NULL))
return NULL;
for (size_t i = 0, o = 0; i < size; i += 3, o += 4) {
int x = data[i + 0];

View file

@ -16,6 +16,7 @@
#define LOG_ENABLE_DBG 0
#include "log.h"
#include "version.h"
#include "xmalloc.h"
static volatile sig_atomic_t aborted = 0;
@ -201,7 +202,7 @@ main(int argc, char *const *argv)
errno = 0;
size_t buf_len = 1024;
do {
cwd = realloc(cwd, buf_len);
cwd = xrealloc(cwd, buf_len);
if (getcwd(cwd, buf_len) == NULL && errno != ERANGE) {
LOG_ERRNO("failed to get current working directory");
goto err;

View file

@ -752,7 +752,7 @@ parse_section_key_bindings(
}
pipe_len = pipe_cmd_end - value - 1;
pipe_cmd = strndup(&value[1], pipe_len);
pipe_cmd = xstrndup(&value[1], pipe_len);
if (!tokenize_cmdline(pipe_cmd, &pipe_argv)) {
LOG_AND_NOTIFY_ERR("%s:%d: syntax error in command line", path, lineno);

3
csi.c
View file

@ -18,6 +18,7 @@
#include "util.h"
#include "version.h"
#include "vt.h"
#include "xmalloc.h"
#define UNHANDLED() LOG_DBG("unhandled: %s", csi_as_string(term, final, -1))
#define UNHANDLED_SGR(idx) LOG_DBG("unhandled: %s", csi_as_string(term, 'm', idx))
@ -933,7 +934,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
unsigned what = vt_param_get(term, 1, 0);
if (what == 0 || what == 2) {
tll_push_back(
term->window_title_stack, strdup(term->window_title));
term->window_title_stack, xstrdup(term->window_title));
}
break;
}

View file

@ -20,6 +20,11 @@ struct extraction_context *
extract_begin(enum selection_kind kind)
{
struct extraction_context *ctx = malloc(sizeof(*ctx));
if (unlikely(ctx == NULL)) {
LOG_ERRNO("malloc() failed");
return NULL;
}
*ctx = (struct extraction_context){
.selection_kind = kind,
};
@ -80,6 +85,11 @@ extract_finish(struct extraction_context *ctx, char **text, size_t *len)
}
*text = malloc(_len + 1);
if (unlikely(text == NULL)) {
LOG_ERRNO("malloc() failed");
goto out;
}
wcstombs(*text, ctx->buf, _len + 1);
if (len != NULL)

10
fdm.c
View file

@ -50,6 +50,11 @@ fdm_init(void)
}
struct fdm *fdm = malloc(sizeof(*fdm));
if (unlikely(fdm == NULL)) {
LOG_ERRNO("malloc() failed");
return NULL;
}
*fdm = (struct fdm){
.epoll_fd = epoll_fd,
.is_polling = false,
@ -114,6 +119,11 @@ fdm_add(struct fdm *fdm, int fd, int events, fdm_handler_t handler, void *data)
#endif
struct handler *fd_data = malloc(sizeof(*fd_data));
if (unlikely(fd_data == NULL)) {
LOG_ERRNO("malloc() failed");
return false;
}
*fd_data = (struct handler) {
.fd = fd,
.events = events,

9
grid.c
View file

@ -8,6 +8,7 @@
#include "log.h"
#include "sixel.h"
#include "util.h"
#include "xmalloc.h"
void
grid_swap_row(struct grid *grid, int row_a, int row_b)
@ -28,16 +29,16 @@ grid_swap_row(struct grid *grid, int row_a, int row_b)
struct row *
grid_row_alloc(int cols, bool initialize)
{
struct row *row = malloc(sizeof(*row));
struct row *row = xmalloc(sizeof(*row));
row->dirty = false;
row->linebreak = false;
if (initialize) {
row->cells = calloc(cols, sizeof(row->cells[0]));
row->cells = xcalloc(cols, sizeof(row->cells[0]));
for (size_t c = 0; c < cols; c++)
row->cells[c].attrs.clean = 1;
} else
row->cells = malloc(cols * sizeof(row->cells[0]));
row->cells = xmalloc(cols * sizeof(row->cells[0]));
return row;
}
@ -65,7 +66,7 @@ grid_reflow(struct grid *grid, int new_rows, int new_cols,
int new_col_idx = 0;
int new_row_idx = 0;
struct row **new_grid = calloc(new_rows, sizeof(new_grid[0]));
struct row **new_grid = xcalloc(new_rows, sizeof(new_grid[0]));
struct row *new_row = new_grid[new_row_idx];
assert(new_row == NULL);

View file

@ -36,6 +36,7 @@
#include "tokenize.h"
#include "util.h"
#include "vt.h"
#include "xmalloc.h"
struct pipe_context {
char *text;
@ -227,7 +228,7 @@ execute_binding(struct seat *seat, struct terminal *term,
/* Close read end */
close(pipe_fd[0]);
ctx = malloc(sizeof(*ctx));
ctx = xmalloc(sizeof(*ctx));
*ctx = (struct pipe_context){
.text = text,
.left = len,
@ -268,7 +269,7 @@ input_parse_key_binding(struct xkb_keymap *keymap, const char *combos,
xkb_keysym_t sym = XKB_KEY_NoSymbol;
char *copy = strdup(combos);
char *copy = xstrdup(combos);
for (char *save1 = NULL, *combo = strtok_r(copy, " ", &save1);
combo != NULL;

11
main.c
View file

@ -28,6 +28,7 @@
#include "shm.h"
#include "terminal.h"
#include "version.h"
#include "xmalloc.h"
static volatile sig_atomic_t aborted = 0;
@ -341,15 +342,15 @@ main(int argc, char *const *argv)
if (conf_term != NULL) {
free(conf.term);
conf.term = strdup(conf_term);
conf.term = xstrdup(conf_term);
}
if (conf_title != NULL) {
free(conf.title);
conf.title = strdup(conf_title);
conf.title = xstrdup(conf_title);
}
if (conf_app_id != NULL) {
free(conf.app_id);
conf.app_id = strdup(conf_app_id);
conf.app_id = xstrdup(conf_app_id);
}
if (login_shell)
conf.login_shell = true;
@ -367,7 +368,7 @@ main(int argc, char *const *argv)
conf.height = conf_height;
if (conf_server_socket_path != NULL) {
free(conf.server_socket_path);
conf.server_socket_path = strdup(conf_server_socket_path);
conf.server_socket_path = xstrdup(conf_server_socket_path);
}
if (maximized)
conf.startup_mode = STARTUP_MAXIMIZED;
@ -389,7 +390,7 @@ main(int argc, char *const *argv)
errno = 0;
size_t buf_len = 1024;
do {
cwd = realloc(cwd, buf_len);
cwd = xrealloc(cwd, buf_len);
if (getcwd(cwd, buf_len) == NULL && errno != ERANGE) {
LOG_ERRNO("failed to get current working directory");
goto out;

View file

@ -139,7 +139,10 @@ executable(
executable(
'footclient',
'client.c',
'log.c', 'log.h', version,
'log.c', 'log.h',
'macros.h',
'xmalloc.c', 'xmalloc.h',
version,
install: true)
tic = find_program('tic', native: true)

19
osc.c
View file

@ -2,6 +2,7 @@
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <limits.h>
#include <unistd.h>
@ -14,6 +15,7 @@
#include "selection.h"
#include "terminal.h"
#include "vt.h"
#include "xmalloc.h"
#define UNHANDLED() LOG_DBG("unhandled: OSC: %.*s", (int)term->vt.osc.idx, term->vt.osc.data)
@ -22,13 +24,16 @@ osc_to_clipboard(struct terminal *term, const char *target,
const char *base64_data)
{
char *decoded = base64_decode(base64_data);
LOG_DBG("decoded: %s", decoded);
if (decoded == NULL) {
LOG_WARN("OSC: invalid clipboard data: %s", base64_data);
if (errno == EINVAL)
LOG_WARN("OSC: invalid clipboard data: %s", base64_data);
else
LOG_ERRNO("base64_decode() failed");
return;
}
LOG_DBG("decoded: %s", decoded);
bool to_clipboard = false;
bool to_primary = false;
@ -67,13 +72,13 @@ osc_to_clipboard(struct terminal *term, const char *target,
}
if (to_clipboard) {
char *copy = strdup(decoded);
char *copy = xstrdup(decoded);
if (!text_to_clipboard(seat, term, copy, seat->kbd.serial))
free(copy);
}
if (to_primary) {
char *copy = strdup(decoded);
char *copy = xstrdup(decoded);
if (!text_to_primary(seat, term, copy, seat->kbd.serial))
free(copy);
}
@ -184,7 +189,7 @@ osc_from_clipboard(struct terminal *term, const char *source)
term_to_slave(term, &src, 1);
term_to_slave(term, ";", 1);
struct clip_context *ctx = malloc(sizeof(*ctx));
struct clip_context *ctx = xmalloc(sizeof(*ctx));
*ctx = (struct clip_context) {.seat = seat, .term = term};
switch (src) {
@ -374,7 +379,7 @@ osc_set_pwd(struct terminal *term, char *string)
/* Decode %xx encoded characters */
const char *path = hostname_end;
char *pwd = malloc(strlen(path) + 1);
char *pwd = xmalloc(strlen(path) + 1);
char *p = pwd;
while (true) {

View file

@ -10,6 +10,7 @@
#define LOG_ENABLE_DBG 0
#include "log.h"
#include "tllist.h"
#include "xmalloc.h"
struct reaper {
struct fdm *fdm;
@ -39,7 +40,7 @@ reaper_init(struct fdm *fdm)
return NULL;
}
struct reaper *reaper = malloc(sizeof(*reaper));
struct reaper *reaper = xmalloc(sizeof(*reaper));
*reaper = (struct reaper){
.fdm = fdm,
.fd = fd,

View file

@ -22,6 +22,7 @@
#include "selection.h"
#include "shm.h"
#include "util.h"
#include "xmalloc.h"
#define TIME_FRAME_RENDERING 0
#define TIME_SCROLL_DAMAGE 0
@ -43,7 +44,12 @@ static void fdm_hook_refresh_pending_terminals(struct fdm *fdm, void *data);
struct renderer *
render_init(struct fdm *fdm, struct wayland *wayl)
{
struct renderer *renderer = calloc(1, sizeof(*renderer));
struct renderer *renderer = malloc(sizeof(*renderer));
if (unlikely(renderer == NULL)) {
LOG_ERRNO("malloc() failed");
return NULL;
}
*renderer = (struct renderer) {
.fdm = fdm,
.wayl = wayl,
@ -1691,7 +1697,7 @@ grid_render(struct terminal *term)
if (feedback == NULL) {
LOG_WARN("failed to create presentation feedback");
} else {
struct presentation_context *ctx = malloc(sizeof(*ctx));
struct presentation_context *ctx = xmalloc(sizeof(*ctx));
*ctx = (struct presentation_context){
.term = term,
.input.tv_sec = term->render.input_time.tv_sec,
@ -1840,7 +1846,7 @@ render_update_title(struct terminal *term)
char *copy = NULL;
if (strlen(title) > max_len) {
copy = strndup(title, max_len);
copy = xstrndup(title, max_len);
title = copy;
}

View file

@ -20,6 +20,7 @@
#include "render.h"
#include "util.h"
#include "vt.h"
#include "xmalloc.h"
bool
selection_enabled(const struct terminal *term, struct seat *seat)
@ -692,9 +693,9 @@ send(void *data, struct wl_data_source *wl_data_source, const char *mime_type,
size_t async_idx = 0;
switch (async_write(fd, selection, len, &async_idx)) {
case ASYNC_WRITE_REMAIN: {
struct clipboard_send *ctx = malloc(sizeof(*ctx));
struct clipboard_send *ctx = xmalloc(sizeof(*ctx));
*ctx = (struct clipboard_send) {
.data = strdup(selection),
.data = xstrdup(selection),
.len = len,
.idx = async_idx,
};
@ -784,9 +785,9 @@ primary_send(void *data,
size_t async_idx = 0;
switch (async_write(fd, selection, len, &async_idx)) {
case ASYNC_WRITE_REMAIN: {
struct clipboard_send *ctx = malloc(sizeof(*ctx));
struct clipboard_send *ctx = xmalloc(sizeof(*ctx));
*ctx = (struct clipboard_send) {
.data = strdup(selection),
.data = xstrdup(selection),
.len = len,
.idx = async_idx,
};
@ -953,7 +954,7 @@ begin_receive_clipboard(struct terminal *term, int read_fd,
return done(user);
}
struct clipboard_receive *ctx = malloc(sizeof(*ctx));
struct clipboard_receive *ctx = xmalloc(sizeof(*ctx));
*ctx = (struct clipboard_receive) {
.cb = cb,
.done = done,

View file

@ -19,6 +19,7 @@
#include "shm.h"
#include "terminal.h"
#include "wayland.h"
#include "xmalloc.h"
struct client;
struct server {
@ -157,7 +158,7 @@ fdm_client(struct fdm *fdm, int fd, int events, void *data)
}
LOG_DBG("total len: %u", total_len);
client->buffer.data = malloc(total_len + 1);
client->buffer.data = xmalloc(total_len + 1);
client->buffer.left = total_len;
client->buffer.idx = 0;
@ -277,7 +278,7 @@ fdm_client(struct fdm *fdm, int fd, int events, void *data)
memcpy(&argc, p, sizeof(argc));
p += sizeof(argc);
argv = calloc(argc + 1, sizeof(argv[0]));
argv = xcalloc(argc + 1, sizeof(argv[0]));
LOG_DBG("argc = %d", argc);
for (int i = 0; i < argc; i++) {
@ -302,11 +303,11 @@ fdm_client(struct fdm *fdm, int fd, int events, void *data)
client->conf = *server->conf;
client->conf.term = strlen(term_env) > 0
? strdup(term_env) : strdup(server->conf->term);
? xstrdup(term_env) : xstrdup(server->conf->term);
client->conf.title = strlen(title) > 0
? strdup(title) : strdup(server->conf->title);
? xstrdup(title) : xstrdup(server->conf->title);
client->conf.app_id = strlen(app_id) > 0
? strdup(app_id) : strdup(server->conf->app_id);
? xstrdup(app_id) : xstrdup(server->conf->app_id);
client->conf.hold_at_exit = hold;
client->conf.login_shell = login_shell;
@ -360,7 +361,7 @@ fdm_server(struct fdm *fdm, int fd, int events, void *data)
return false;
}
struct client *client = malloc(sizeof(*client));
struct client *client = xmalloc(sizeof(*client));
*client = (struct client) {
.server = server,
.fd = client_fd,
@ -451,6 +452,11 @@ server_init(const struct config *conf, struct fdm *fdm, struct reaper *reaper,
}
server = malloc(sizeof(*server));
if (unlikely(server == NULL)) {
LOG_ERRNO("malloc() failed");
goto err;
}
*server = (struct server) {
.conf = conf,
.fdm = fdm,

3
shm.c
View file

@ -23,6 +23,7 @@
#define LOG_ENABLE_DBG 0
#include "log.h"
#include "macros.h"
#include "xmalloc.h"
#define TIME_SCROLL 0
@ -150,7 +151,7 @@ instantiate_offset(struct wl_shm *shm, struct buffer *buf, off_t new_offset)
void *mmapped = MAP_FAILED;
struct wl_buffer *wl_buf = NULL;
pixman_image_t **pix = calloc(buf->pix_instances, sizeof(*pix));
pixman_image_t **pix = xcalloc(buf->pix_instances, sizeof(*pix));
mmapped = (uint8_t *)buf->real_mmapped + new_offset;

17
sixel.c
View file

@ -9,6 +9,7 @@
#include "render.h"
#include "sixel-hls.h"
#include "util.h"
#include "xmalloc.h"
static size_t count;
@ -38,13 +39,13 @@ sixel_init(struct terminal *term)
term->sixel.param = 0;
term->sixel.param_idx = 0;
memset(term->sixel.params, 0, sizeof(term->sixel.params));
term->sixel.image.data = malloc(1 * 6 * sizeof(term->sixel.image.data[0]));
term->sixel.image.data = xmalloc(1 * 6 * sizeof(term->sixel.image.data[0]));
term->sixel.image.width = 1;
term->sixel.image.height = 6;
term->sixel.image.autosize = true;
if (term->sixel.palette == NULL) {
term->sixel.palette = calloc(
term->sixel.palette = xcalloc(
term->sixel.palette_size, sizeof(term->sixel.palette[0]));
}
@ -240,7 +241,7 @@ sixel_overwrite(struct terminal *term, struct sixel *six,
.cols = six->cols,
.pos = six->pos,
};
imgs[0].data = malloc(imgs[0].width * imgs[0].height * sizeof(uint32_t));
imgs[0].data = xmalloc(imgs[0].width * imgs[0].height * sizeof(uint32_t));
memcpy(imgs[0].data, six->data, imgs[0].width * imgs[0].height * sizeof(uint32_t));
}
@ -254,7 +255,7 @@ sixel_overwrite(struct terminal *term, struct sixel *six,
six->pos.col,
(six->pos.row + rel_below) & (term->grid->num_rows - 1)},
};
imgs[1].data = malloc(imgs[1].width * imgs[1].height * sizeof(uint32_t));
imgs[1].data = xmalloc(imgs[1].width * imgs[1].height * sizeof(uint32_t));
memcpy(
imgs[1].data,
&((const uint32_t *)six->data)[rel_below * term->cell_height * six->width],
@ -271,7 +272,7 @@ sixel_overwrite(struct terminal *term, struct sixel *six,
six->pos.col,
(six->pos.row + rel_above) & (term->grid->num_rows - 1)},
};
imgs[2].data = malloc(imgs[2].width * imgs[2].height * sizeof(uint32_t));
imgs[2].data = xmalloc(imgs[2].width * imgs[2].height * sizeof(uint32_t));
for (size_t i = 0; i < imgs[2].height; i++)
memcpy(
&((uint32_t *)imgs[2].data)[i * imgs[2].width],
@ -289,7 +290,7 @@ sixel_overwrite(struct terminal *term, struct sixel *six,
six->pos.col + rel_right,
(six->pos.row + rel_above) & (term->grid->num_rows - 1)},
};
imgs[3].data = malloc(imgs[3].width * imgs[3].height * sizeof(uint32_t));
imgs[3].data = xmalloc(imgs[3].width * imgs[3].height * sizeof(uint32_t));
for (size_t i = 0; i < imgs[3].height; i++)
memcpy(
&((uint32_t *)imgs[3].data)[i * imgs[3].width],
@ -464,7 +465,7 @@ sixel_unhook(struct terminal *term)
if (pixel_row_idx == 0)
img_data = term->sixel.image.data;
else {
img_data = malloc(height * stride);
img_data = xmalloc(height * stride);
memcpy(
img_data,
&((uint8_t *)term->sixel.image.data)[pixel_row_idx * stride],
@ -566,7 +567,7 @@ resize(struct terminal *term, int new_width, int new_height)
} else {
/* Width (and thus stride) change - need to allocate a new buffer */
assert(new_width > old_width);
new_data = malloc(alloc_new_width * alloc_new_height * sizeof(uint32_t));
new_data = xmalloc(alloc_new_width * alloc_new_height * sizeof(uint32_t));
/* Copy old rows, and initialize new columns to background color */
for (int r = 0; r < old_height; r++) {

View file

@ -20,6 +20,7 @@
#include "terminal.h"
#include "tokenize.h"
#include "xmalloc.h"
static bool
is_valid_shell(const char *shell)
@ -217,9 +218,9 @@ slave_exec(int ptmx, char *argv[], int err_fd, bool login_shell,
const char *file;
if (login_shell) {
file = strdup(argv[0]);
file = xstrdup(argv[0]);
char *arg0 = malloc(strlen(argv[0]) + 1 + 1);
char *arg0 = xmalloc(strlen(argv[0]) + 1 + 1);
arg0[0] = '-';
arg0[1] = '\0';
strcat(arg0, argv[0]);
@ -291,7 +292,7 @@ slave_spawn(int ptmx, int argc, const char *cwd, char *const *argv,
char **shell_argv = NULL;
if (argc == 0) {
char *shell_copy = strdup(conf_shell);
char *shell_copy = xstrdup(conf_shell);
if (!tokenize_cmdline(shell_copy, &_shell_argv)) {
free(shell_copy);
(void)!write(fork_pipe[1], &errno, sizeof(errno));
@ -302,7 +303,7 @@ slave_spawn(int ptmx, int argc, const char *cwd, char *const *argv,
size_t count = 0;
for (; argv[count] != NULL; count++)
;
shell_argv = malloc((count + 1) * sizeof(shell_argv[0]));
shell_argv = xmalloc((count + 1) * sizeof(shell_argv[0]));
for (size_t i = 0; i < count; i++)
shell_argv[i] = argv[i];
shell_argv[count] = NULL;

View file

@ -33,6 +33,7 @@
#include "spawn.h"
#include "util.h"
#include "vt.h"
#include "xmalloc.h"
#define PTMX_TIMING 0
@ -93,7 +94,7 @@ enqueue_data:
* handler take care of it
*/
{
void *copy = malloc(len);
void *copy = xmalloc(len);
memcpy(copy, _data, len);
struct ptmx_buffer queued = {
@ -510,11 +511,11 @@ initialize_render_workers(struct terminal *term)
goto err_sem_destroy;
}
term->render.workers.threads = calloc(
term->render.workers.threads = xcalloc(
term->render.workers.count, sizeof(term->render.workers.threads[0]));
for (size_t i = 0; i < term->render.workers.count; i++) {
struct render_worker_context *ctx = malloc(sizeof(*ctx));
struct render_worker_context *ctx = xmalloc(sizeof(*ctx));
*ctx = (struct render_worker_context) {
.term = term,
.my_id = 1 + i,
@ -685,7 +686,7 @@ reload_fonts(struct terminal *term)
snprintf(size, sizeof(size), ":size=%.2f", term->font_sizes[i].pt_size);
size_t len = strlen(it->item.pattern) + strlen(size) + 1;
names[i] = malloc(len);
names[i] = xmalloc(len);
strcpy(names[i], it->item.pattern);
strcat(names[i], size);
@ -767,6 +768,10 @@ term_init(const struct config *conf, struct fdm *fdm, struct reaper *reaper,
int app_sync_updates_fd = -1;
struct terminal *term = malloc(sizeof(*term));
if (unlikely(term == NULL)) {
LOG_ERRNO("malloc() failed");
return NULL;
}
if ((ptmx = posix_openpt(O_RDWR | O_NOCTTY)) == -1) {
LOG_ERRNO("failed to open PTY");
@ -836,7 +841,7 @@ term_init(const struct config *conf, struct fdm *fdm, struct reaper *reaper,
.quit = false,
.ptmx = ptmx,
.ptmx_buffer = tll_init(),
.font_sizes = malloc(sizeof(term->font_sizes[0]) * tll_length(conf->fonts)),
.font_sizes = xmalloc(sizeof(term->font_sizes[0]) * tll_length(conf->fonts)),
.font_dpi = 0.,
.font_subpixel = (conf->colors.alpha == 0xffff /* Can't do subpixel rendering on transparent background */
? FCFT_SUBPIXEL_DEFAULT
@ -929,8 +934,8 @@ term_init(const struct config *conf, struct fdm *fdm, struct reaper *reaper,
.hold_at_exit = conf->hold_at_exit,
.shutdown_cb = shutdown_cb,
.shutdown_data = shutdown_data,
.foot_exe = strdup(foot_exe),
.cwd = strdup(cwd),
.foot_exe = xstrdup(foot_exe),
.cwd = xstrdup(cwd),
};
{
@ -2228,7 +2233,7 @@ void
term_set_window_title(struct terminal *term, const char *title)
{
free(term->window_title);
term->window_title = strdup(title);
term->window_title = xstrdup(title);
render_refresh_title(term);
}

3
vt.c
View file

@ -13,6 +13,7 @@
#include "grid.h"
#include "osc.h"
#include "util.h"
#include "xmalloc.h"
#define UNHANDLED() LOG_DBG("unhandled: %s", esc_as_string(term, final))
@ -649,7 +650,7 @@ action_utf8_print(struct terminal *term, wchar_t wc)
if (term->composed_count < CELL_COMB_CHARS_HI) {
term->composed_count++;
term->composed = realloc(term->composed, term->composed_count * sizeof(term->composed[0]));
term->composed = xrealloc(term->composed, term->composed_count * sizeof(term->composed[0]));
term->composed[term->composed_count - 1] = new_cc;
term_print(term, CELL_COMB_CHARS_LO + term->composed_count - 1, base_width);

View file

@ -29,6 +29,7 @@
#include "render.h"
#include "selection.h"
#include "util.h"
#include "xmalloc.h"
static void
csd_instantiate(struct wl_window *win)
@ -250,7 +251,7 @@ seat_handle_name(void *data, struct wl_seat *wl_seat, const char *name)
{
struct seat *seat = data;
free(seat->name);
seat->name = strdup(name);
seat->name = xstrdup(name);
}
static const struct wl_seat_listener seat_listener = {
@ -318,8 +319,8 @@ output_geometry(void *data, struct wl_output *wl_output, int32_t x, int32_t y,
mon->dim.mm.width = physical_width;
mon->dim.mm.height = physical_height;
mon->inch = sqrt(pow(mon->dim.mm.width, 2) + pow(mon->dim.mm.height, 2)) * 0.03937008;
mon->make = make != NULL ? strdup(make) : NULL;
mon->model = model != NULL ? strdup(model) : NULL;
mon->make = make != NULL ? xstrdup(make) : NULL;
mon->model = model != NULL ? xstrdup(model) : NULL;
mon->subpixel = subpixel;
output_update_ppi(mon);
}
@ -389,7 +390,7 @@ xdg_output_handle_name(void *data, struct zxdg_output_v1 *xdg_output,
const char *name)
{
struct monitor *mon = data;
mon->name = name != NULL ? strdup(name) : NULL;
mon->name = name != NULL ? xstrdup(name) : NULL;
}
static void
@ -397,7 +398,7 @@ xdg_output_handle_description(void *data, struct zxdg_output_v1 *xdg_output,
const char *description)
{
struct monitor *mon = data;
mon->description = description != NULL ? strdup(description) : NULL;
mon->description = description != NULL ? xstrdup(description) : NULL;
}
static const struct zxdg_output_v1_listener xdg_output_listener = {
@ -973,7 +974,7 @@ fdm_wayl(struct fdm *fdm, int fd, int events, void *data)
struct wayland *
wayl_init(const struct config *conf, struct fdm *fdm)
{
struct wayland *wayl = calloc(1, sizeof(*wayl));
struct wayland *wayl = xcalloc(1, sizeof(*wayl));
wayl->conf = conf;
wayl->fdm = fdm;
wayl->fd = -1;
@ -1130,7 +1131,7 @@ wayl_win_init(struct terminal *term)
struct wayland *wayl = term->wl;
const struct config *conf = term->conf;
struct wl_window *win = calloc(1, sizeof(*win));
struct wl_window *win = xcalloc(1, sizeof(*win));
win->term = term;
win->use_csd = CSD_UNKNOWN;
win->csd.move_timeout_fd = -1;