Allow unloading plugins that use std::regex
							parent
							
								
									ee999ccbdf
								
							
						
					
					
						commit
						8a3a05de24
					
				| @ -0,0 +1,32 @@ | |||||||
|  | #include <regex> | ||||||
|  | 
 | ||||||
|  | namespace DFHack { | ||||||
|  | namespace neverCalled { | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * gcc/linstdc++ seems to generate code that links libstdc++ back to first | ||||||
|  |  * shared object using std::regex. To allow plugins unload with std::regex in | ||||||
|  |  * the code we need the std::regex functions inside libdfhack.so. | ||||||
|  |  * | ||||||
|  |  * If your plugin decides to use any overloads that aren't listed here it may | ||||||
|  |  * stay in memory after dlclose. | ||||||
|  |  */ | ||||||
|  | std::regex stdRegexPluginUnloadWorkaround() | ||||||
|  | { | ||||||
|  |     std::regex fake("foo"); | ||||||
|  |     std::string haystack("bar is foo in the world"); | ||||||
|  |     std::regex fake2(std::string("bar")); | ||||||
|  |     if (std::regex_match(haystack, fake)) | ||||||
|  |         std::swap(fake, fake2); | ||||||
|  |     if (std::regex_search(haystack, fake)) | ||||||
|  |         std::swap(fake, fake2); | ||||||
|  |     const char* haystack2 = "foo"; | ||||||
|  |     if (std::regex_match(haystack2, fake)) | ||||||
|  |         std::swap(fake, fake2); | ||||||
|  |     if (std::regex_search(haystack2, fake)) | ||||||
|  |         std::swap(fake, fake2); | ||||||
|  |     return fake; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue