diff options
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | src/maprules.c | 10 |
2 files changed, 13 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac index df2c072..3a3822b 100644 --- a/configure.ac +++ b/configure.ac @@ -38,7 +38,9 @@ AC_PROG_LIBTOOL XORG_CWARNFLAGS AC_CHECK_FUNC(strcasecmp, [], AC_DEFINE([NEED_STRCASECMP], 1, - [Do not have `strcasecmp'.])) + [Do not have 'strcasecmp'.])) +AC_CHECK_FUNC(getc_unlocked, AC_DEFINE([HAVE_UNLOCKED_STDIO], 1, + ['Unlocked stdio']), []) # Check for dependencies PKG_CHECK_MODULES(XKBFILE, x11 kbproto) diff --git a/src/maprules.c b/src/maprules.c index cfc4d6d..b6d773c 100644 --- a/src/maprules.c +++ b/src/maprules.c @@ -137,6 +137,14 @@ InputLineAddChar(InputLine *line,int ch) (int)((l)->line[(l)->num_line++]= (c)):\ InputLineAddChar(l,c)) +#ifdef HAVE_UNLOCKED_STDIO +#undef getc +#define getc(x) getc_unlocked(x) +#else +#define flockfile(x) do {} while (0) +#define funlockfile(x) do {} while (0) +#endif + static Bool GetInputLine(FILE *file,InputLine *line,Bool checkbang) { @@ -144,6 +152,7 @@ int ch; Bool endOfFile,spacePending,slashPending,inComment; endOfFile= False; + flockfile(file); while ((!endOfFile)&&(line->num_line==0)) { spacePending= slashPending= inComment= False; while (((ch=getc(file))!='\n')&&(ch!=EOF)) { @@ -208,6 +217,7 @@ Bool endOfFile,spacePending,slashPending,inComment; endOfFile= True; /* else line->num_line++;*/ } + funlockfile(file); if ((line->num_line==0)&&(endOfFile)) return False; ADD_CHAR(line,'\0'); |