Move intf_EJect() out of core
authorRémi Denis-Courmont <remi@remlab.net>
Fri, 25 Nov 2011 14:41:22 +0000 (16:41 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Fri, 25 Nov 2011 15:21:19 +0000 (17:21 +0200)
include/vlc_interface.h
modules/gui/Modules.am
modules/gui/eject.c [new file with mode: 0644]
modules/gui/ncurses.c
modules/gui/qt4/components/open_panels.cpp
po/POTFILES.in
src/Makefile.am
src/interface/intf_eject.c [deleted file]
src/libvlccore.sym

index 2e02f6b..da3c5bd 100644 (file)
@@ -102,9 +102,6 @@ struct intf_dialog_args_t
 VLC_API int intf_Create( vlc_object_t *, const char * );
 #define intf_Create(a,b) intf_Create(VLC_OBJECT(a),b)
 
-VLC_API int intf_Eject( vlc_object_t *, const char * );
-#define intf_Eject(a,b) intf_Eject(VLC_OBJECT(a),b)
-
 VLC_API void libvlc_Quit( libvlc_int_t * );
 
 /*@}*/
index 5711e1a..94b6805 100644 (file)
@@ -16,3 +16,4 @@ endif
 
 SOURCES_ncurses = ncurses.c
 SOURCES_fbosd = fbosd.c
+EXTRA_DIST += eject.c
diff --git a/modules/gui/eject.c b/modules/gui/eject.c
new file mode 100644 (file)
index 0000000..8e9ffb9
--- /dev/null
@@ -0,0 +1,180 @@
+/*****************************************************************************
+ * eject.c: CD/DVD-ROM ejection handling functions
+ *****************************************************************************
+ * Copyright (C) 2001-2011 the VideoLAN team
+ *
+ * Authors: Julien Blache <jb@technologeek.org> for the Linux part
+ *                with code taken from the Linux "eject" command
+ *          Jon Lech Johansen <jon-vl@nanocrew.net> for Darwin
+ *          Gildas Bazin <gbazin@netcourrier.com> for Win32
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+/**
+ *  \file
+ *  This file contain functions to eject CD and DVD drives
+ */
+
+/*#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif*/
+
+#include <vlc_common.h>
+#include <vlc_fs.h>
+
+#if defined( WIN32 ) && !defined( UNDER_CE )
+#   include <mmsystem.h>
+#elif defined(__linux__)
+#   include <sys/types.h>
+#   include <unistd.h>
+#   include <fcntl.h>
+#   include <sys/ioctl.h>
+#   include <sys/mount.h>
+
+#   include <linux/cdrom.h>
+
+#   include <scsi/scsi.h>
+#   include <scsi/sg.h>
+#   include <scsi/scsi_ioctl.h>
+#elif defined (HAVE_DVD_H)
+#   include <unistd.h>
+#   include <fcntl.h>
+#   include <dvd.h>
+#endif
+
+#if defined(__linux__)
+/**
+ * \brief Ejects the CD /DVD using SCSI commands
+ * \ingroup vlc_interface
+ * This function is local
+ * \param i_fd a device nummber
+ * \return 0 on success, VLC_EGENERIC on failure
+ */
+static int EjectSCSI( int i_fd )
+{
+    struct sdata
+    {
+        int  inlen;
+        int  outlen;
+        char cmd[256];
+    } scsi_cmd;
+
+    scsi_cmd.inlen  = 0;
+    scsi_cmd.outlen = 0;
+    scsi_cmd.cmd[0] = ALLOW_MEDIUM_REMOVAL;
+    scsi_cmd.cmd[1] = 0;
+    scsi_cmd.cmd[2] = 0;
+    scsi_cmd.cmd[3] = 0;
+    scsi_cmd.cmd[4] = 0;
+    scsi_cmd.cmd[5] = 0;
+    if( ioctl( i_fd, SCSI_IOCTL_SEND_COMMAND, (void *)&scsi_cmd ) < 0 )
+        return VLC_EGENERIC;
+
+    scsi_cmd.inlen  = 0;
+    scsi_cmd.outlen = 0;
+    scsi_cmd.cmd[0] = START_STOP;
+    scsi_cmd.cmd[1] = 0;
+    scsi_cmd.cmd[2] = 0;
+    scsi_cmd.cmd[3] = 0;
+    scsi_cmd.cmd[4] = 1;
+    scsi_cmd.cmd[5] = 0;
+    if( ioctl( i_fd, SCSI_IOCTL_SEND_COMMAND, (void *)&scsi_cmd ) < 0 )
+        return VLC_EGENERIC;
+
+    scsi_cmd.inlen  = 0;
+    scsi_cmd.outlen = 0;
+    scsi_cmd.cmd[0] = START_STOP;
+    scsi_cmd.cmd[1] = 0;
+    scsi_cmd.cmd[2] = 0;
+    scsi_cmd.cmd[3] = 0;
+    scsi_cmd.cmd[4] = 2;
+    scsi_cmd.cmd[5] = 0;
+    if( ioctl( i_fd, SCSI_IOCTL_SEND_COMMAND, (void *)&scsi_cmd ) < 0 )
+        return VLC_EGENERIC;
+
+    /* Force kernel to reread partition table when new disc inserted */
+    ioctl( i_fd, BLKRRPART );
+    return VLC_SUCCESS;
+}
+#endif
+
+#undef intf_Eject
+/**
+ * Ejects the optical disc in a device
+ * \param p_this the calling vlc_object_t
+ * \param psz_device the CD/DVD to eject
+ * \return VLC_SUCCESS or VLC_EGENERIC
+ */
+static int intf_Eject( vlc_object_t *p_this, const char *psz_device )
+{
+    VLC_UNUSED(p_this);
+
+#if defined(WIN32)
+    MCI_OPEN_PARMS op;
+    DWORD i_flags;
+    char psz_drive[4];
+
+    memset( &op, 0, sizeof(MCI_OPEN_PARMS) );
+    op.lpstrDeviceType = (LPCSTR)MCI_DEVTYPE_CD_AUDIO;
+
+    strcpy( psz_drive, "X:" );
+    psz_drive[0] = psz_device[0];
+    op.lpstrElementName = psz_drive;
+
+    /* Set the flags for the device type */
+    i_flags = MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID |
+              MCI_OPEN_ELEMENT | MCI_OPEN_SHAREABLE;
+
+    if( mciSendCommand( 0, MCI_OPEN, i_flags, (uintptr_t)&op ) )
+        return VLC_EGENERIC;
+
+    /* Eject disc */
+    mciSendCommand( op.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0 );
+    /* Release access to the device */
+    mciSendCommand( op.wDeviceID, MCI_CLOSE, MCI_WAIT, 0 );
+
+    return VLC_SUCCESS;
+
+#elif defined (__linux__) || defined (HAVE_DVD_H)
+    /* This code could be extended to support CD/DVD-ROM chargers */
+    int fd = vlc_open( psz_device, O_RDONLY | O_NONBLOCK );
+    if( fd == -1 )
+    {
+        msg_Err( p_this, "could not open device %s", psz_device );
+        return VLC_EGENERIC;
+    }
+
+# if defined(__linux__)
+    /* Try a simple ATAPI eject */
+    if( ioctl( fd, CDROMEJECT, 0 ) < 0
+     && EjectSCSI( fd ) )
+# else
+    if( ioctl( fd, CDROMEJECT, 0 ) < 0 )
+# endif
+    {
+        msg_Err( p_this, "could not eject %s", psz_device );
+        close( fd );
+        return VLC_EGENERIC;
+    }
+    return VLC_SUCCESS;
+
+#else
+    msg_Warn( p_this, "CD-Rom ejection unsupported on this platform" );
+    return VLC_EGENERIC;
+#endif
+}
+
+#define intf_Eject(o, p) intf_Eject(VLC_OBJECT(o), p)
index 7a844aa..f2802fe 100644 (file)
@@ -85,6 +85,8 @@ vlc_module_begin ()
     add_directory("browse-dir", NULL, BROWSE_TEXT, BROWSE_LONGTEXT, false)
 vlc_module_end ()
 
+#include "eject.c"
+
 /*****************************************************************************
  * intf_sys_t: description and status of ncurses interface
  *****************************************************************************/
index 5866a05..8ac5b75 100644 (file)
@@ -57,6 +57,8 @@
     I_DIR_OR_FOLDER( N_("Select a device or a VIDEO_TS directory"), \
                      N_("Select a device or a VIDEO_TS folder") )
 
+#include "../../eject.c"
+
 /* Populate a combobox with the devices matching a pattern.
    Combobox will automatically do autocompletion on the edit zone */
 #define POPULATE_WITH_DEVS(ppsz_devlist, targetCombo) \
index c82ac26..8e86982 100644 (file)
@@ -105,7 +105,6 @@ src/input/vlm.c
 src/input/vlm_internal.h
 src/input/vlmshell.c
 src/interface/interface.c
-src/interface/intf_eject.c
 src/libvlc.c
 src/libvlc.h
 src/libvlc-module.c
index e93961d..84ed676 100644 (file)
@@ -304,7 +304,6 @@ SOURCES_libvlc_common = \
        version.c \
        interface/dialog.c \
        interface/interface.c \
-       interface/intf_eject.c \
        playlist/playlist_internal.h \
        playlist/art.c \
        playlist/art.h \
diff --git a/src/interface/intf_eject.c b/src/interface/intf_eject.c
deleted file mode 100644 (file)
index 3afd0e8..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*****************************************************************************
- * intf_eject.c: CD/DVD-ROM ejection handling functions
- *****************************************************************************
- * Copyright (C) 2001-2004 the VideoLAN team
- * $Id$
- *
- * Authors: Julien Blache <jb@technologeek.org> for the Linux part
- *                with code taken from the Linux "eject" command
- *          Jon Lech Johansen <jon-vl@nanocrew.net> for Darwin
- *          Gildas Bazin <gbazin@netcourrier.com> for Win32
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR 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, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/**
- *  \file
- *  This file contain functions to eject CD and DVD drives
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <vlc_common.h>
-#include <vlc_fs.h>
-#include <vlc_interface.h>
-
-#if defined( WIN32 ) && !defined( UNDER_CE )
-#   include <mmsystem.h>
-#elif defined(__linux__)
-#   include <sys/types.h>
-#   include <unistd.h>
-#   include <fcntl.h>
-#   include <sys/ioctl.h>
-#   include <sys/mount.h>
-
-#   include <linux/cdrom.h>
-
-#   include <scsi/scsi.h>
-#   include <scsi/sg.h>
-#   include <scsi/scsi_ioctl.h>
-#elif defined (HAVE_DVD_H)
-#   include <unistd.h>
-#   include <fcntl.h>
-#   include <dvd.h>
-#endif
-
-#if defined(__linux__)
-/**
- * \brief Ejects the CD /DVD using SCSI commands
- * \ingroup vlc_interface
- * This function is local
- * \param i_fd a device nummber
- * \return 0 on success, VLC_EGENERIC on failure
- */
-static int EjectSCSI( int i_fd )
-{
-    struct sdata
-    {
-        int  inlen;
-        int  outlen;
-        char cmd[256];
-    } scsi_cmd;
-
-    scsi_cmd.inlen  = 0;
-    scsi_cmd.outlen = 0;
-    scsi_cmd.cmd[0] = ALLOW_MEDIUM_REMOVAL;
-    scsi_cmd.cmd[1] = 0;
-    scsi_cmd.cmd[2] = 0;
-    scsi_cmd.cmd[3] = 0;
-    scsi_cmd.cmd[4] = 0;
-    scsi_cmd.cmd[5] = 0;
-    if( ioctl( i_fd, SCSI_IOCTL_SEND_COMMAND, (void *)&scsi_cmd ) < 0 )
-        return VLC_EGENERIC;
-
-    scsi_cmd.inlen  = 0;
-    scsi_cmd.outlen = 0;
-    scsi_cmd.cmd[0] = START_STOP;
-    scsi_cmd.cmd[1] = 0;
-    scsi_cmd.cmd[2] = 0;
-    scsi_cmd.cmd[3] = 0;
-    scsi_cmd.cmd[4] = 1;
-    scsi_cmd.cmd[5] = 0;
-    if( ioctl( i_fd, SCSI_IOCTL_SEND_COMMAND, (void *)&scsi_cmd ) < 0 )
-        return VLC_EGENERIC;
-
-    scsi_cmd.inlen  = 0;
-    scsi_cmd.outlen = 0;
-    scsi_cmd.cmd[0] = START_STOP;
-    scsi_cmd.cmd[1] = 0;
-    scsi_cmd.cmd[2] = 0;
-    scsi_cmd.cmd[3] = 0;
-    scsi_cmd.cmd[4] = 2;
-    scsi_cmd.cmd[5] = 0;
-    if( ioctl( i_fd, SCSI_IOCTL_SEND_COMMAND, (void *)&scsi_cmd ) < 0 )
-        return VLC_EGENERIC;
-
-    /* Force kernel to reread partition table when new disc inserted */
-    ioctl( i_fd, BLKRRPART );
-    return VLC_SUCCESS;
-}
-#endif
-
-#undef intf_Eject
-/**
- * \brief Ejects the CD /DVD
- * \ingroup vlc_interface
- * \param p_this the calling vlc_object_t
- * \param psz_device the CD/DVD to eject
- * \return 0 on success, 1 on failure, -1 if not implemented
- */
-int intf_Eject( vlc_object_t *p_this, const char *psz_device )
-{
-    VLC_UNUSED(p_this);
-
-#if defined(WIN32)
-    MCI_OPEN_PARMS op;
-    DWORD i_flags;
-    char psz_drive[4];
-
-    memset( &op, 0, sizeof(MCI_OPEN_PARMS) );
-    op.lpstrDeviceType = (LPCSTR)MCI_DEVTYPE_CD_AUDIO;
-
-    strcpy( psz_drive, "X:" );
-    psz_drive[0] = psz_device[0];
-    op.lpstrElementName = psz_drive;
-
-    /* Set the flags for the device type */
-    i_flags = MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID |
-              MCI_OPEN_ELEMENT | MCI_OPEN_SHAREABLE;
-
-    if( mciSendCommand( 0, MCI_OPEN, i_flags, (uintptr_t)&op ) )
-        return VLC_EGENERIC;
-
-    /* Eject disc */
-    mciSendCommand( op.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0 );
-    /* Release access to the device */
-    mciSendCommand( op.wDeviceID, MCI_CLOSE, MCI_WAIT, 0 );
-
-    return VLC_SUCCESS;
-
-#elif defined (__linux__) || defined (HAVE_DVD_H)
-    /* This code could be extended to support CD/DVD-ROM chargers */
-    int fd = vlc_open( psz_device, O_RDONLY | O_NONBLOCK );
-    if( fd == -1 )
-    {
-        msg_Err( p_this, "could not open device %s", psz_device );
-        return VLC_EGENERIC;
-    }
-
-# if defined(__linux__)
-    /* Try a simple ATAPI eject */
-    if( ioctl( fd, CDROMEJECT, 0 ) < 0
-     && EjectSCSI( fd ) )
-# else
-    if( ioctl( fd, CDROMEJECT, 0 ) < 0 )
-# endif
-    {
-        msg_Err( p_this, "could not eject %s", psz_device );
-        close( fd );
-        return VLC_EGENERIC;
-    }
-    return VLC_SUCCESS;
-
-#else
-    msg_Warn( p_this, "CD-Rom ejection unsupported on this platform" );
-    return VLC_EGENERIC;
-#endif
-}
index 2bcdfba..7538bf2 100644 (file)
@@ -230,7 +230,6 @@ input_Stop
 input_vaControl
 input_Close
 intf_Create
-intf_Eject
 IsUTF8
 libvlc_InternalAddIntf
 libvlc_InternalCleanup