From 798276dea9b9743ef658e67e580dd23e38ee471d Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Sun, 27 Nov 2011 16:10:11 +0100 Subject: [PATCH] Add kmscon_char_set() helper This helper allows to copy one char into another. Signed-off-by: David Herrmann --- src/console.h | 1 + src/console_char.c | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/console.h b/src/console.h index b49c5b2..db0cf0a 100644 --- a/src/console.h +++ b/src/console.h @@ -28,6 +28,7 @@ int kmscon_char_new(struct kmscon_char **out); int kmscon_char_dup(struct kmscon_char **out, const struct kmscon_char *orig); void kmscon_char_free(struct kmscon_char *ch); +int kmscon_char_set(struct kmscon_char *ch, const struct kmscon_char *orig); int kmscon_char_set_u8(struct kmscon_char *ch, const char *str, size_t len); const char *kmscon_char_get_u8(const struct kmscon_char *ch); size_t kmscon_char_get_len(const struct kmscon_char *ch); diff --git a/src/console_char.c b/src/console_char.c index 9a87df9..33d56f0 100644 --- a/src/console_char.c +++ b/src/console_char.c @@ -132,6 +132,27 @@ void kmscon_char_free(struct kmscon_char *ch) free(ch); } +int kmscon_char_set(struct kmscon_char *ch, const struct kmscon_char *orig) +{ + char *buf; + + if (!ch || !orig) + return -EINVAL; + + if (ch->size < orig->len) { + buf = realloc(ch->buf, orig->len); + if (!buf) + return -ENOMEM; + ch->buf = buf; + ch->size = orig->len; + } + + memcpy(ch->buf, orig->buf, orig->len); + ch->len = orig->len; + + return 0; +} + int kmscon_char_set_u8(struct kmscon_char *ch, const char *str, size_t len) { char *buf;