From: David Herrmann Date: Sat, 26 Nov 2011 14:27:10 +0000 (+0100) Subject: Add kmscon_char_dup() X-Git-Tag: kmscon-7~1365 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a12cf0aa7f6e031becfceb57f6c515a6f9b86758;p=platform%2Fupstream%2Fkmscon.git Add kmscon_char_dup() Add helper function to duplicate a kmscon_char object. Signed-off-by: David Herrmann --- diff --git a/src/console.h b/src/console.h index 79c37c1..b6c1131 100644 --- a/src/console.h +++ b/src/console.h @@ -23,6 +23,7 @@ struct kmscon_console; /* single printable characters */ 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_u8(struct kmscon_char *ch, const char *str, size_t len); diff --git a/src/console_char.c b/src/console_char.c index 0ccc452..c47e32c 100644 --- a/src/console_char.c +++ b/src/console_char.c @@ -61,6 +61,33 @@ int kmscon_char_new(struct kmscon_char **out) return 0; } +int kmscon_char_dup(struct kmscon_char **out, const struct kmscon_char *orig) +{ + struct kmscon_char *ch; + + if (!out || !orig) + return -EINVAL; + + ch = malloc(sizeof(*ch)); + if (!ch) + return -ENOMEM; + + memset(ch, 0, sizeof(*ch)); + + ch->len = orig->len; + ch->size = orig->size; + ch->buf = malloc(ch->size); + if (!ch->buf) { + free(ch); + return -ENOMEM; + } + + memcpy(ch->buf, orig->buf, ch->size); + + *out = ch; + return 0; +} + void kmscon_char_free(struct kmscon_char *ch) { if (!ch)