Add kmscon_char_dup()
authorDavid Herrmann <dh.herrmann@googlemail.com>
Sat, 26 Nov 2011 14:27:10 +0000 (15:27 +0100)
committerDavid Herrmann <dh.herrmann@googlemail.com>
Sat, 26 Nov 2011 14:27:10 +0000 (15:27 +0100)
Add helper function to duplicate a kmscon_char object.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
src/console.h
src/console_char.c

index 79c37c1..b6c1131 100644 (file)
@@ -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);
index 0ccc452..c47e32c 100644 (file)
@@ -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)