+
+/*****************************************************************************
+ * ProbeDVD: very weak probing that avoids going too often into a dvdnav_open()
+ *****************************************************************************/
+static int ProbeDVD( demux_t *p_demux, char *psz_name )
+{
+#ifdef HAVE_SYS_STAT_H
+ struct stat stat_info;
+ uint8_t pi_anchor[2];
+ uint16_t i_tag_id = 0;
+ int i_fd, i_ret;
+
+ if( !*psz_name )
+ {
+ /* Triggers libdvdcss autodetection */
+ return VLC_SUCCESS;
+ }
+
+ if( stat( psz_name, &stat_info ) || !S_ISREG( stat_info.st_mode ) )
+ {
+ /* Let dvdnav_open() do the probing */
+ return VLC_SUCCESS;
+ }
+
+ if( (i_fd = open( psz_name, O_RDONLY )) == -1 )
+ {
+ /* Let dvdnav_open() do the probing */
+ return VLC_SUCCESS;
+ }
+
+ /* Try to find the anchor (2 bytes at LBA 256) */
+ i_ret = VLC_SUCCESS;
+ if( lseek( i_fd, 256 * DVD_VIDEO_LB_LEN, SEEK_SET ) == -1 )
+ {
+ i_ret = VLC_EGENERIC;
+ }
+
+ if( read( i_fd, pi_anchor, 2 ) == 2 )
+ {
+ i_tag_id = GetWLE(pi_anchor);
+ if( i_tag_id != 2 ) i_ret = VLC_EGENERIC; /* Not an anchor */
+ }
+ else
+ {
+ i_ret = VLC_EGENERIC;
+ }
+
+ close( i_fd );
+
+ return i_ret;
+#else
+
+ return VLC_SUCCESS;
+#endif
+}