summaryrefslogtreecommitdiff
path: root/usr.bin/tmux/paste.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2009-11-26 22:28:25 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2009-11-26 22:28:25 +0000
commitd5a8d58642d15648eee6ce4426aca635f5bf272e (patch)
treed6b7de806e0e025d7de1ebe74f5fddfe6b44639e /usr.bin/tmux/paste.c
parent4c4cd4aadaca53d9e57c923f2de68758da494c24 (diff)
Tidy up various bits of the paste code, make the data buffer char * and add
comments.
Diffstat (limited to 'usr.bin/tmux/paste.c')
-rw-r--r--usr.bin/tmux/paste.c30
1 files changed, 26 insertions, 4 deletions
diff --git a/usr.bin/tmux/paste.c b/usr.bin/tmux/paste.c
index d7da3e13802..8815f3e3865 100644
--- a/usr.bin/tmux/paste.c
+++ b/usr.bin/tmux/paste.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: paste.c,v 1.6 2009/11/03 17:17:24 nicm Exp $ */
+/* $OpenBSD: paste.c,v 1.7 2009/11/26 22:28:24 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -23,6 +23,11 @@
#include "tmux.h"
+/*
+ * Stack of paste buffers. Note that paste buffer data is not necessarily a C
+ * string!
+ */
+
void
paste_init_stack(struct paste_stack *ps)
{
@@ -36,6 +41,7 @@ paste_free_stack(struct paste_stack *ps)
;
}
+/* Return each item of the stack in turn. */
struct paste_buffer *
paste_walk_stack(struct paste_stack *ps, uint *idx)
{
@@ -46,6 +52,7 @@ paste_walk_stack(struct paste_stack *ps, uint *idx)
return (pb);
}
+/* Get the top item on the stack. */
struct paste_buffer *
paste_get_top(struct paste_stack *ps)
{
@@ -54,6 +61,7 @@ paste_get_top(struct paste_stack *ps)
return (ARRAY_FIRST(ps));
}
+/* Get an item by its index. */
struct paste_buffer *
paste_get_index(struct paste_stack *ps, u_int idx)
{
@@ -62,6 +70,7 @@ paste_get_index(struct paste_stack *ps, u_int idx)
return (ARRAY_ITEM(ps, idx));
}
+/* Free the top item on the stack. */
int
paste_free_top(struct paste_stack *ps)
{
@@ -79,6 +88,7 @@ paste_free_top(struct paste_stack *ps)
return (0);
}
+/* Free an item by index. */
int
paste_free_index(struct paste_stack *ps, u_int idx)
{
@@ -96,12 +106,16 @@ paste_free_index(struct paste_stack *ps, u_int idx)
return (0);
}
+/*
+ * Add an item onto the top of the stack, freeing the bottom if at limit. Note
+ * that the caller is responsible for allocating data.
+ */
void
-paste_add(struct paste_stack *ps, u_char *data, size_t size, u_int limit)
+paste_add(struct paste_stack *ps, char *data, size_t size, u_int limit)
{
struct paste_buffer *pb;
- if (*data == '\0')
+ if (size == 0)
return;
while (ARRAY_LENGTH(ps) >= limit) {
@@ -118,11 +132,19 @@ paste_add(struct paste_stack *ps, u_char *data, size_t size, u_int limit)
pb->size = size;
}
+
+/*
+ * Replace an item on the stack. Note that the caller is responsible for
+ * allocating data.
+ */
int
-paste_replace(struct paste_stack *ps, u_int idx, u_char *data, size_t size)
+paste_replace(struct paste_stack *ps, u_int idx, char *data, size_t size)
{
struct paste_buffer *pb;
+ if (size == 0)
+ return (0);
+
if (idx >= ARRAY_LENGTH(ps))
return (-1);