diff --git a/src/lib/usefulstuff.c b/src/lib/usefulstuff.c index 97af0b61..038f7825 100644 --- a/src/lib/usefulstuff.c +++ b/src/lib/usefulstuff.c @@ -429,7 +429,7 @@ FILE *xdebug_fopen(char *fname, const char *mode, const char *extension, char ** } else { tmp_fname = xdstrdup(fname); } - r = stat(tmp_fname, &buf); + r = lstat(tmp_fname, &buf); /* We're not freeing "tmp_fname" as that is used in the freopen as well. */ if (r == -1) { @@ -438,6 +438,11 @@ FILE *xdebug_fopen(char *fname, const char *mode, const char *extension, char ** goto lock; } + if (S_ISLNK(buf.st_mode)) { + fh = xdebug_open_file_with_random_ext(fname, "w", extension, new_fname); + goto lock; + } + /* 3. It exists, check if we can open it. */ fh = xdebug_open_file(fname, "r+", extension, new_fname); if (!fh) {