Add error message for failed regex initialization
This commit is contained in:
		
							parent
							
								
									f12f1094ed
								
							
						
					
					
						commit
						f48a939dbf
					
				
							
								
								
									
										27
									
								
								src/menu.c
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								src/menu.c
									
									
									
									
									
								
							| @ -21,7 +21,7 @@ | ||||
| #include "utils.h" | ||||
| 
 | ||||
| static bool is_initialized = false; | ||||
| static regex_t cregex; | ||||
| static regex_t url_regex; | ||||
| 
 | ||||
| struct notification_lock { | ||||
|         struct notification *n; | ||||
| @ -29,29 +29,36 @@ struct notification_lock { | ||||
| }; | ||||
| static gpointer context_menu_thread(gpointer data); | ||||
| 
 | ||||
| static int regex_init(void) | ||||
| /**
 | ||||
|  * Initializes regexes needed for matching. | ||||
|  * | ||||
|  * @return true if initialization succeeded | ||||
|  */ | ||||
| static bool regex_init(void) | ||||
| { | ||||
|         if (is_initialized) | ||||
|                 return 1; | ||||
|                 return true; | ||||
| 
 | ||||
|         char *regex = | ||||
|             "\\b(https?://|ftps?://|news://|mailto:|file://|www\\.)" | ||||
|             "[-[:alnum:]_\\@;/?:&=%$.+!*\x27,~#]*" | ||||
|             "(\\([-[:alnum:]_\\@;/?:&=%$.+!*\x27,~#]*\\)|[-[:alnum:]_\\@;/?:&=%$+*~])+"; | ||||
|         int ret = regcomp(&cregex, regex, REG_EXTENDED | REG_ICASE); | ||||
|         if (ret != 0) { | ||||
|                 LOG_W("Failed to compile regex."); | ||||
|                 return 0; | ||||
|         int code = regcomp(&url_regex, regex, REG_EXTENDED | REG_ICASE); | ||||
|         if (code != 0) { | ||||
|                 char error_buf[120]; | ||||
|                 regerror(code, &url_regex, error_buf, sizeof(error_buf)); | ||||
|                 LOG_W("Failed to compile URL-matching regex: %s", error_buf); | ||||
|                 return false; | ||||
|         } else { | ||||
|                 is_initialized = true; | ||||
|                 return 1; | ||||
|                 return true; | ||||
|         } | ||||
| } | ||||
| 
 | ||||
| void regex_teardown(void) | ||||
| { | ||||
|         if (is_initialized) { | ||||
|                 regfree(&cregex); | ||||
|                 regfree(&url_regex); | ||||
|                 is_initialized = false; | ||||
|         } | ||||
| } | ||||
| @ -73,7 +80,7 @@ char *extract_urls(const char *to_match) | ||||
|         regmatch_t m; | ||||
| 
 | ||||
|         while (1) { | ||||
|                 int nomatch = regexec(&cregex, p, 1, &m, 0); | ||||
|                 int nomatch = regexec(&url_regex, p, 1, &m, 0); | ||||
|                 if (nomatch) { | ||||
|                         return urls; | ||||
|                 } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Andrew Benson
						Andrew Benson