mirror of https://github.com/mpv-player/mpv
win32: make lseek() fail on pipes
On MingGW seeking on pipes succeeds. This fix is quite similar to Gnulib's (lib/lseek.c).
This commit is contained in:
parent
0abe9b0e0a
commit
a7eb363ac1
11
osdep/io.c
11
osdep/io.c
|
@ -17,6 +17,7 @@
|
||||||
* You should have received a copy of the GNU General Public License along
|
* You should have received a copy of the GNU General Public License along
|
||||||
* with mplayer2. If not, see <http://www.gnu.org/licenses/>.
|
* with mplayer2. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
#define MP_HIDE_IO_REPLACEMENTS
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
@ -395,4 +396,14 @@ char *mp_getenv(const char *name)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
off_t mp_lseek(int fd, off_t offset, int whence)
|
||||||
|
{
|
||||||
|
HANDLE h = (HANDLE)_get_osfhandle(fd);
|
||||||
|
if (h != INVALID_HANDLE_VALUE && GetFileType(h) != FILE_TYPE_DISK) {
|
||||||
|
errno = ESPIPE;
|
||||||
|
return (off_t)-1;
|
||||||
|
}
|
||||||
|
return lseek(fd, offset, whence);
|
||||||
|
}
|
||||||
|
|
||||||
#endif // __MINGW32__
|
#endif // __MINGW32__
|
||||||
|
|
|
@ -77,6 +77,7 @@ int mp_closedir(DIR *dir);
|
||||||
int mp_mkdir(const char *path, int mode);
|
int mp_mkdir(const char *path, int mode);
|
||||||
FILE *mp_tmpfile(void);
|
FILE *mp_tmpfile(void);
|
||||||
char *mp_getenv(const char *name);
|
char *mp_getenv(const char *name);
|
||||||
|
off_t mp_lseek(int fd, off_t offset, int whence);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
size_t gl_pathc;
|
size_t gl_pathc;
|
||||||
|
@ -105,6 +106,13 @@ void mp_globfree(mp_glob_t *pglob);
|
||||||
#define tmpfile(...) mp_tmpfile(__VA_ARGS__)
|
#define tmpfile(...) mp_tmpfile(__VA_ARGS__)
|
||||||
#define getenv(...) mp_getenv(__VA_ARGS__)
|
#define getenv(...) mp_getenv(__VA_ARGS__)
|
||||||
|
|
||||||
|
// Things MinGW defines as macros, and which we want to override only for the
|
||||||
|
// user, and not io.c (which wants the original definition).
|
||||||
|
#ifndef MP_HIDE_IO_REPLACEMENTS
|
||||||
|
#undef lseek
|
||||||
|
#define lseek(...) mp_lseek(__VA_ARGS__)
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef GLOB_NOMATCH
|
#ifndef GLOB_NOMATCH
|
||||||
#define GLOB_NOMATCH 3
|
#define GLOB_NOMATCH 3
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue