Make error messages portable
This commit is contained in:
		
							parent
							
								
									a595b61e0f
								
							
						
					
					
						commit
						8f3fbebede
					
				| 
						 | 
					@ -21,13 +21,21 @@ class errno_error : public std::runtime_error {
 | 
				
			||||||
      code(code) {}
 | 
					      code(code) {}
 | 
				
			||||||
 private:
 | 
					 private:
 | 
				
			||||||
  static auto getErrorMsg(int err, const char* msg) -> std::string {
 | 
					  static auto getErrorMsg(int err, const char* msg) -> std::string {
 | 
				
			||||||
    const auto errno_name = strerrorname_np(err);
 | 
					 | 
				
			||||||
    const auto errno_str = strerror(err);
 | 
					 | 
				
			||||||
    std::string error_msg{msg};
 | 
					    std::string error_msg{msg};
 | 
				
			||||||
    error_msg += ": ";
 | 
					    error_msg += ": ";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef _GNU_SOURCE
 | 
				
			||||||
 | 
					    // strerrorname_np gets the error code's name; it's nice to have, but it's a GNU extension
 | 
				
			||||||
 | 
					    const auto errno_name = strerrorname_np(err);
 | 
				
			||||||
    error_msg += errno_name;
 | 
					    error_msg += errno_name;
 | 
				
			||||||
    error_msg += " ";
 | 
					    error_msg += " ";
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // strerror(3) man page says 1024 should be a big enough buffer to avoid ERANGE
 | 
				
			||||||
 | 
					    char errno_str[1024] = {};
 | 
				
			||||||
 | 
					    strerror_r(err, errno_str, sizeof errno_str);
 | 
				
			||||||
    error_msg += errno_str;
 | 
					    error_msg += errno_str;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return error_msg;
 | 
					    return error_msg;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue