Define new String type
Current handling of strings is a bit messy. This type is copied from the sed implementation. Addchar_ is added to be able to live with String and old style chars based in 3 different variables.
This commit is contained in:
		
				
					committed by
					
						
						sin
					
				
			
			
				
	
			
			
			
						parent
						
							651e2b0ee2
						
					
				
				
					commit
					20794b570e
				
			
							
								
								
									
										23
									
								
								ed.c
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								ed.c
									
									
									
									
									
								
							@@ -20,6 +20,12 @@
 | 
			
		||||
#define NUMLINES    32
 | 
			
		||||
#define CACHESIZ  4096
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
	char *str;
 | 
			
		||||
	size_t cap;
 | 
			
		||||
	size_t siz;
 | 
			
		||||
} String;
 | 
			
		||||
 | 
			
		||||
struct hline {
 | 
			
		||||
	off_t seek;
 | 
			
		||||
	char  global;
 | 
			
		||||
@@ -111,6 +117,23 @@ prevln(int line)
 | 
			
		||||
	return (line < 0) ? lastln : line;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *
 | 
			
		||||
addchar_(char c, String *s)
 | 
			
		||||
{
 | 
			
		||||
	size_t cap = s->cap, siz = s->siz;
 | 
			
		||||
	char *t = s->str;
 | 
			
		||||
 | 
			
		||||
	if (siz >= cap &&
 | 
			
		||||
	    (cap > SIZE_MAX - LINESIZE ||
 | 
			
		||||
	     (t = realloc(t, cap += LINESIZE)) == NULL))
 | 
			
		||||
			error("out of memory");
 | 
			
		||||
	t[siz++] = c;
 | 
			
		||||
	s->siz = siz;
 | 
			
		||||
	s->cap = cap;
 | 
			
		||||
	s->str = t;
 | 
			
		||||
	return t;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *
 | 
			
		||||
addchar(char c, char *t, size_t *capacity, size_t *size)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user