diff options
Diffstat (limited to 'w32')
| -rw-r--r-- | w32/include/w32err.h | 2 | ||||
| -rw-r--r-- | w32/subproc/w32err.c | 30 | 
2 files changed, 24 insertions, 8 deletions
| diff --git a/w32/include/w32err.h b/w32/include/w32err.h index ebf8c81..9131f04 100644 --- a/w32/include/w32err.h +++ b/w32/include/w32err.h @@ -22,6 +22,6 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */  #define EXTERN_DECL(entry, args) entry args  #endif -EXTERN_DECL(char * map_windows32_error_to_string, (DWORD error)); +EXTERN_DECL(const char * map_windows32_error_to_string, (DWORD error));  #endif /* !_W32ERR_H */ diff --git a/w32/subproc/w32err.c b/w32/subproc/w32err.c index e0bb110..7f68f59 100644 --- a/w32/subproc/w32err.c +++ b/w32/subproc/w32err.c @@ -15,7 +15,9 @@ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.  You should have received a copy of the GNU General Public License along with  this program.  If not, see <http://www.gnu.org/licenses/>.  */ +#include <stdlib.h>  #include <windows.h> +#include "make.h"  #include "w32err.h"  /* @@ -26,14 +28,24 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */   * Notes/Dependencies:  I got this from   *      comp.os.ms-windows.programmer.win32   */ -char * +const char *  map_windows32_error_to_string (DWORD ercode) { -/* __declspec (thread) necessary if you will use multiple threads on MSVC */ -#ifdef _MSC_VER -__declspec (thread) static char szMessageBuffer[128]; -#else -static char szMessageBuffer[128]; -#endif +/* + * We used to have an MSVC-specific `__declspec (thread)' qualifier + * here, with the following comment: + * + * __declspec (thread) necessary if you will use multiple threads on MSVC + * + * However, Make was never multithreaded on Windows (except when + * Ctrl-C is hit, in which case the main thread is stopped + * immediately, so it doesn't matter in this context).  The functions + * on sub_proc.c that started and stopped additional threads were + * never used, and are now #ifdef'ed away.  Until we need more than + * one thread, we have no problems with the following buffer being + * static.  (If and when we do need it to be in thread-local storage, + * the corresponding GCC qualifier is `__thread'.) + */ +    static char szMessageBuffer[128];  	/* Fill message buffer with a default message in  	 * case FormatMessage fails  	 */ @@ -43,6 +55,7 @@ static char szMessageBuffer[128];  	 *  Special code for winsock error handling.  	 */  	if (ercode > WSABASEERR) { +#if 0  		HMODULE hModule = GetModuleHandle("wsock32");  		if (hModule != NULL) {  			FormatMessage(FORMAT_MESSAGE_FROM_HMODULE, @@ -54,6 +67,9 @@ static char szMessageBuffer[128];  				NULL);  			FreeLibrary(hModule);  		} +#else +		fatal(NILF, szMessageBuffer); +#endif  	} else {  		/*  		 *  Default system message handling | 
