mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Make the caller responsible for allocating memory for the paste buffer data
(needed by the load-buffer command when dealing with big files since it'll prevent tmux from dying due to memory exhaustion). From nicm.
This commit is contained in:
		@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: cmd-set-buffer.c,v 1.6 2009-01-19 18:23:40 nicm Exp $ */
 | 
			
		||||
/* $Id: cmd-set-buffer.c,v 1.7 2009-01-25 18:51:28 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -52,12 +52,13 @@ cmd_set_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
		return (-1);
 | 
			
		||||
 | 
			
		||||
	limit = options_get_number(&s->options, "buffer-limit");
 | 
			
		||||
	if (data->buffer == -1)
 | 
			
		||||
		paste_add(&s->buffers, data->arg, limit);
 | 
			
		||||
	else if (paste_replace(&s->buffers, data->buffer, data->arg) != 0) {
 | 
			
		||||
	if (data->buffer == -1) {
 | 
			
		||||
		paste_add(&s->buffers, xstrdup(data->arg), limit);
 | 
			
		||||
		return (0);
 | 
			
		||||
	}
 | 
			
		||||
	if (paste_replace(&s->buffers, data->buffer, xstrdup(data->arg)) != 0) {
 | 
			
		||||
		ctx->error(ctx, "no buffer %d", data->buffer);
 | 
			
		||||
		return (-1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								paste.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								paste.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: paste.c,v 1.5 2009-01-23 16:19:41 nicm Exp $ */
 | 
			
		||||
/* $Id: paste.c,v 1.6 2009-01-25 18:51:28 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -97,7 +97,7 @@ paste_free_index(struct paste_stack *ps, u_int idx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
paste_add(struct paste_stack *ps, const char *data, u_int limit)
 | 
			
		||||
paste_add(struct paste_stack *ps, char *data, u_int limit)
 | 
			
		||||
{
 | 
			
		||||
	struct paste_buffer	*pb;
 | 
			
		||||
 | 
			
		||||
@@ -107,13 +107,13 @@ paste_add(struct paste_stack *ps, const char *data, u_int limit)
 | 
			
		||||
	pb = xmalloc(sizeof *pb);
 | 
			
		||||
	ARRAY_INSERT(ps, 0, pb);
 | 
			
		||||
 | 
			
		||||
	pb->data = xstrdup(data);
 | 
			
		||||
	pb->data = data;
 | 
			
		||||
	if (gettimeofday(&pb->tv, NULL) != 0)
 | 
			
		||||
		fatal("gettimeofday");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
paste_replace(struct paste_stack *ps, u_int idx, const char *data)
 | 
			
		||||
paste_replace(struct paste_stack *ps, u_int idx, char *data)
 | 
			
		||||
{
 | 
			
		||||
	struct paste_buffer	*pb;
 | 
			
		||||
 | 
			
		||||
@@ -123,7 +123,7 @@ paste_replace(struct paste_stack *ps, u_int idx, const char *data)
 | 
			
		||||
	pb = ARRAY_ITEM(ps, idx);
 | 
			
		||||
	xfree(pb->data);
 | 
			
		||||
 | 
			
		||||
	pb->data = xstrdup(data);
 | 
			
		||||
	pb->data = data;
 | 
			
		||||
	if (gettimeofday(&pb->tv, NULL) != 0)
 | 
			
		||||
		fatal("gettimeofday");
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: tmux.h,v 1.248 2009-01-23 16:59:14 nicm Exp $ */
 | 
			
		||||
/* $Id: tmux.h,v 1.249 2009-01-25 18:51:28 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -1074,8 +1074,8 @@ struct paste_buffer *paste_get_top(struct paste_stack *);
 | 
			
		||||
struct paste_buffer *paste_get_index(struct paste_stack *, u_int);
 | 
			
		||||
int	     	 paste_free_top(struct paste_stack *);
 | 
			
		||||
int		 paste_free_index(struct paste_stack *, u_int);
 | 
			
		||||
void		 paste_add(struct paste_stack *, const char *, u_int);
 | 
			
		||||
int		 paste_replace(struct paste_stack *, u_int, const char *);
 | 
			
		||||
void		 paste_add(struct paste_stack *, char *, u_int);
 | 
			
		||||
int		 paste_replace(struct paste_stack *, u_int, char *);
 | 
			
		||||
 | 
			
		||||
/* clock.c */
 | 
			
		||||
void		 clock_draw(struct screen_write_ctx *, u_int, int);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: window-copy.c,v 1.44 2009-01-23 20:50:58 nicm Exp $ */
 | 
			
		||||
/* $Id: window-copy.c,v 1.45 2009-01-25 18:51:28 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -419,7 +419,6 @@ window_copy_copy_selection(struct window_pane *wp, struct client *c)
 | 
			
		||||
	/* Add the buffer to the stack. */
 | 
			
		||||
	limit = options_get_number(&c->session->options, "buffer-limit");
 | 
			
		||||
	paste_add(&c->session->buffers, buf, limit);
 | 
			
		||||
	xfree(buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user