_cdio_linux.c: eject routines does it's own open and close.

cdio.h, Makefile.am, cdio.c: Add FreeBSD routine (not complete yet).
This commit is contained in:
rocky
2003-03-24 23:59:22 +00:00
parent e0afa970fa
commit d8566f16a9
5 changed files with 51 additions and 32 deletions

View File

@@ -1,4 +1,4 @@
# $Id: Makefile.am,v 1.1 2003/03/24 19:01:09 rocky Exp $
# $Id: Makefile.am,v 1.2 2003/03/24 23:59:22 rocky Exp $
#
# Copyright (C) 2003 Rocky Bernstein <rocky@panix.com>
#
@@ -28,6 +28,7 @@ include_HEADERS = cdio.h logging.h sector.h cdio_types.h util.h
libcdio_sources = \
_cdio_bincue.c \
_cdio_bsdi.c \
_cdio_freebsd.c \
_cdio_linux.c \
_cdio_nrg.c \
_cdio_stdio.c \

View File

@@ -1,5 +1,5 @@
/*
$Id: _cdio_bsdi.c,v 1.1 2003/03/24 19:01:09 rocky Exp $
$Id: _cdio_bsdi.c,v 1.2 2003/03/24 23:59:22 rocky Exp $
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
Copyright (C) 2003 Rocky Bernstein <rocky@panix.com>
@@ -33,7 +33,7 @@
#include <stdlib.h>
#include <string.h>
static const char _rcsid[] = "$Id: _cdio_bsdi.c,v 1.1 2003/03/24 19:01:09 rocky Exp $";
static const char _rcsid[] = "$Id: _cdio_bsdi.c,v 1.2 2003/03/24 23:59:22 rocky Exp $";
#if HAVE_BSDI_CDROM
@@ -127,7 +127,7 @@ _cdio_free (void *user_data)
}
static int
_set_bsize (int fd, unsigned bsize)
_set_bsize (int fd, unsigned int bsize)
{
struct
{

View File

@@ -1,5 +1,5 @@
/*
$Id: _cdio_linux.c,v 1.1 2003/03/24 19:01:09 rocky Exp $
$Id: _cdio_linux.c,v 1.2 2003/03/24 23:59:22 rocky Exp $
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
Copyright (C) 2002,2003 Rocky Bernstein <rocky@panix.com>
@@ -27,7 +27,7 @@
# include "config.h"
#endif
static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.1 2003/03/24 19:01:09 rocky Exp $";
static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.2 2003/03/24 23:59:22 rocky Exp $";
#include "cdio_assert.h"
#include "cdio_private.h"
@@ -129,7 +129,7 @@ _cdio_free (void *user_data)
}
static int
_set_bsize (int fd, unsigned bsize)
_set_bsize (int fd, unsigned int bsize)
{
struct cdrom_generic_command cgc;
@@ -485,29 +485,31 @@ static int
_cdio_eject_media (void *user_data) {
_img_private_t *_obj = user_data;
int ret, status;
int ret=2;
int status;
int fd;
if (_obj->fd > -1) {
if((status = ioctl(_obj->fd, CDROM_DRIVE_STATUS, CDSL_CURRENT)) > 0) {
if ((fd = open (_obj->source_name, O_RDONLY|O_NONBLOCK)) > -1) {
if((status = ioctl(fd, CDROM_DRIVE_STATUS, CDSL_CURRENT)) > 0) {
switch(status) {
case CDS_TRAY_OPEN:
if((ret = ioctl(_obj->fd, CDROMCLOSETRAY)) != 0) {
cdio_error ("CDROMCLOSETRAY failed: %s\n", strerror(errno));
if((ret = ioctl(fd, CDROMCLOSETRAY)) != 0) {
cdio_error ("ioctl CDROMCLOSETRAY failed: %s\n", strerror(errno));
}
break;
case CDS_DISC_OK:
if((ret = ioctl(_obj->fd, CDROMEJECT)) != 0) {
cdio_error("CDROMEJECT failed: %s\n", strerror(errno));
if((ret = ioctl(fd, CDROMEJECT)) != 0) {
cdio_error("ioctl CDROMEJECT failed: %s\n", strerror(errno));
}
break;
}
_cdio_free((void *) _obj);
return 0;
ret=0;
} else {
cdio_error ("CDROM_DRIVE_STATUS failed: %s\n", strerror(errno));
_cdio_free((void *) _obj);
return 1;
ret=1;
}
close(fd);
_cdio_free((void *) _obj);
}
return 2;
}

View File

@@ -1,5 +1,5 @@
/*
$Id: cdio.c,v 1.1 2003/03/24 19:01:09 rocky Exp $
$Id: cdio.c,v 1.2 2003/03/24 23:59:22 rocky Exp $
Copyright (C) 2003 Rocky Bernstein <rocky@panix.com>
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
@@ -28,7 +28,7 @@
#include "logging.h"
#include "cdio_private.h"
static const char _rcsid[] = "$Id: cdio.c,v 1.1 2003/03/24 19:01:09 rocky Exp $";
static const char _rcsid[] = "$Id: cdio.c,v 1.2 2003/03/24 23:59:22 rocky Exp $";
const char *track_format2str[5] =
@@ -70,6 +70,22 @@ CdIo_driver_t CdIo_all_drivers[MAX_DRIVER+1] = {
NULL
},
{DRIVER_BSDI,
CDIO_SRC_IS_DEVICE_MASK|CDIO_SRC_IS_NATIVE_MASK|CDIO_SRC_IS_SCSI_MASK,
"BSDI",
"BSDI ATAPI and SCSI driver",
&cdio_have_bsdi,
cdio_open_bsdi
},
{DRIVER_FREEBSD,
CDIO_SRC_IS_DEVICE_MASK|CDIO_SRC_IS_NATIVE_MASK|CDIO_SRC_IS_SCSI_MASK,
"FreeBSD",
"FreeBSD driver",
&cdio_have_freebsd,
cdio_open_freebsd
},
{DRIVER_LINUX,
CDIO_SRC_IS_DEVICE_MASK|CDIO_SRC_IS_NATIVE_MASK,
"Linux",
@@ -86,14 +102,6 @@ CdIo_driver_t CdIo_all_drivers[MAX_DRIVER+1] = {
&cdio_open_solaris
},
{DRIVER_BSDI,
CDIO_SRC_IS_DEVICE_MASK|CDIO_SRC_IS_NATIVE_MASK|CDIO_SRC_IS_SCSI_MASK,
"BSDI",
"BSDI ATAPI and SCSI driver",
&cdio_have_bsdi,
cdio_open_bsdi
},
{DRIVER_NRG,
CDIO_SRC_IS_DISK_IMAGE_MASK,
"NRG",
@@ -404,9 +412,10 @@ cdio_open (const char *source_name, driver_id_t driver_id)
return NULL;
}
break;
case DRIVER_BSDI:
case DRIVER_FREEBSD:
case DRIVER_LINUX:
case DRIVER_SOLARIS:
case DRIVER_BSDI:
case DRIVER_NRG:
case DRIVER_BINCUE:
if ((*CdIo_all_drivers[driver_id].have_driver)()) {

View File

@@ -1,5 +1,5 @@
/*
$Id: cdio.h,v 1.1 2003/03/24 19:01:09 rocky Exp $
$Id: cdio.h,v 1.2 2003/03/24 23:59:22 rocky Exp $
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
Copyright (C) 2003 Rocky Bernstein <rocky@panix.com>
@@ -47,9 +47,10 @@ extern "C" {
*/
typedef enum {
DRIVER_UNKNOWN,
DRIVER_BSDI,
DRIVER_FREEBSD,
DRIVER_LINUX,
DRIVER_SOLARIS,
DRIVER_BSDI,
DRIVER_NRG,
DRIVER_BINCUE,
DRIVER_DEVICE,
@@ -156,11 +157,12 @@ extern "C" {
/* True if xxx driver is available. where xxx=linux, solaris, nrg, ...
*/
bool cdio_have_bsdi (void);
bool cdio_have_freebsd (void);
bool cdio_have_linux (void);
bool cdio_have_solaris (void);
bool cdio_have_nrg (void);
bool cdio_have_bincue (void);
bool cdio_have_bsdi (void);
/* Like above but uses the enumeration instead. */
bool cdio_have_driver (driver_id_t driver_id);
@@ -197,6 +199,11 @@ extern "C" {
*/
CdIo * cdio_open_bsdi (const char *source_name);
/*! BSDI CD-reading routines.
NULL is returned on error.
*/
CdIo * cdio_open_freebsd (const char *source_name);
/*! Linux CD-reading routines.
NULL is returned on error.
*/