Backport TERMKEY_FLAG_NOSTART and fix two leaks
...that are notably still present in the original library.
This commit is contained in:
		
							parent
							
								
									a9b41e41b7
								
							
						
					
					
						commit
						5b05b96ec0
					
				| @ -39,7 +39,7 @@ statically linked against the library, and hence they can be run as they are: | |||||||
| 
 | 
 | ||||||
| What's Different From the Original termkey? | What's Different From the Original termkey? | ||||||
| ------------------------------------------- | ------------------------------------------- | ||||||
| The main change is throwing away any UTF-8 dependent code, making the library | The main change is throwing out any UTF-8 dependent code, making the library | ||||||
| capable of handling all unibyte and multibyte encodings supported by iconv on | capable of handling all unibyte and multibyte encodings supported by iconv on | ||||||
| your system.  The characters are still presented as Unicode in the end, however, | your system.  The characters are still presented as Unicode in the end, however, | ||||||
| as the other sensible option is wchar_t and that doesn't really work well, see | as the other sensible option is wchar_t and that doesn't really work well, see | ||||||
|  | |||||||
							
								
								
									
										19
									
								
								termo.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								termo.c
									
									
									
									
									
								
							| @ -425,12 +425,12 @@ termo_new (int fd, const char *encoding, int flags) | |||||||
| 	termo_set_flags (tk, flags); | 	termo_set_flags (tk, flags); | ||||||
| 
 | 
 | ||||||
| 	const char *term = getenv ("TERM"); | 	const char *term = getenv ("TERM"); | ||||||
| 	if (termo_init (tk, term, encoding) | 	if (!termo_init (tk, term, encoding)) | ||||||
| 	 && termo_start (tk)) |  | ||||||
| 		return tk; |  | ||||||
| 
 |  | ||||||
| 	// FIXME: resource leak on termo_start() failure
 |  | ||||||
| 		free (tk); | 		free (tk); | ||||||
|  | 	else if (!(flags & TERMO_FLAG_NOSTART) && !termo_start (tk)) | ||||||
|  | 		termo_free (tk); | ||||||
|  | 	else | ||||||
|  | 		return tk; | ||||||
| 	return NULL; | 	return NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -445,13 +445,12 @@ termo_new_abstract (const char *term, const char *encoding, int flags) | |||||||
| 	termo_set_flags (tk, flags); | 	termo_set_flags (tk, flags); | ||||||
| 
 | 
 | ||||||
| 	if (!termo_init (tk, term, encoding)) | 	if (!termo_init (tk, term, encoding)) | ||||||
| 	{ |  | ||||||
| 		free (tk); | 		free (tk); | ||||||
| 		return NULL; | 	else if (!(flags & TERMO_FLAG_NOSTART) && !termo_start (tk)) | ||||||
| 	} | 		termo_free (tk); | ||||||
| 
 | 	else | ||||||
| 	termo_start (tk); |  | ||||||
| 		return tk; | 		return tk; | ||||||
|  | 	return NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								termo.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								termo.h
									
									
									
									
									
								
							| @ -192,7 +192,9 @@ enum | |||||||
| 	// Allow Ctrl-C to be read as normal, disabling SIGINT
 | 	// Allow Ctrl-C to be read as normal, disabling SIGINT
 | ||||||
| 	TERMO_FLAG_CTRLC       = 1 << 6, | 	TERMO_FLAG_CTRLC       = 1 << 6, | ||||||
| 	// Return ERROR on signal (EINTR) rather than retry
 | 	// Return ERROR on signal (EINTR) rather than retry
 | ||||||
| 	TERMO_FLAG_EINTR       = 1 << 7 | 	TERMO_FLAG_EINTR       = 1 << 7, | ||||||
|  | 	// Do not call termkey_start() in constructor
 | ||||||
|  | 	TERMO_FLAG_NOSTART     = 1 << 8 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| enum | enum | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user