util/mem: Move memdup to new util/mem.c file

This seems handy and I want to use this in wlr_color_representation.
This commit is contained in:
David Turner 2025-07-15 14:01:54 +01:00
parent c14aa1d0b8
commit f5dc6416f0
4 changed files with 33 additions and 11 deletions

14
include/util/mem.h Normal file
View file

@ -0,0 +1,14 @@
#ifndef UTIL_MEM_H
#define UTIL_MEM_H
#include <stdbool.h>
#include <stddef.h>
/**
* Allocate a new block of memory and copy *src to it, then store the address
* of the new allocation in *out. Returns true if it worked, or false if
* allocation failed.
*/
bool memdup(void *out, const void *src, size_t size);
#endif // UTIL_MEM_H

View file

@ -1,12 +1,14 @@
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <wlr/types/wlr_color_management_v1.h>
#include <wlr/types/wlr_compositor.h>
#include <wlr/types/wlr_output.h>
#include <wlr/util/addon.h>
#include "render/color.h"
#include "util/mem.h"
#define COLOR_MANAGEMENT_V1_VERSION 1
@ -898,17 +900,6 @@ static void manager_handle_display_destroy(struct wl_listener *listener, void *d
free(manager);
}
static bool memdup(void *out, const void *src, size_t size) {
void *dst = malloc(size);
if (dst == NULL) {
return false;
}
memcpy(dst, src, size);
void **dst_ptr = out;
*dst_ptr = dst;
return true;
}
struct wlr_color_manager_v1 *wlr_color_manager_v1_create(struct wl_display *display,
uint32_t version, const struct wlr_color_manager_v1_options *options) {
assert(version <= COLOR_MANAGEMENT_V1_VERSION);

16
util/mem.c Normal file
View file

@ -0,0 +1,16 @@
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include "util/mem.h"
bool memdup(void *out, const void *src, size_t size) {
void *dst = malloc(size);
if (dst == NULL) {
return false;
}
memcpy(dst, src, size);
void **dst_ptr = out;
*dst_ptr = dst;
return true;
}

View file

@ -6,6 +6,7 @@ wlr_files += files(
'global.c',
'log.c',
'matrix.c',
'mem.c',
'rect_union.c',
'region.c',
'set.c',