Correct cdio_get_devices for FreeBSD.

This commit is contained in:
R. Bernstein
2010-01-06 12:26:35 -05:00
parent ed38926626
commit e4e600c1d9
2 changed files with 42 additions and 17 deletions

View File

@@ -1,7 +1,8 @@
/* /*
$Id: freebsd.c,v 1.38 2008/04/21 18:30:20 karl Exp $ $Id: freebsd.c,v 1.38 2008/04/21 18:30:20 karl Exp $
Copyright (C) 2003, 2004, 2005, 2008, 2009 Rocky Bernstein <rocky@gnu.org> Copyright (C) 2003, 2004, 2005, 2008, 2009, 2010
Rocky Bernstein <rocky@gnu.org>
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -766,23 +767,30 @@ get_media_changed_freebsd (const void *p_user_data)
} }
static const char* static const char*
get_access_mode(const char *source) get_access_mode(const char *psz_source)
{ {
if (source) { char *psz_src;
if (!(strncmp(source, "/dev/acd", 8))) if (!psz_source) {
return "ioctl"; psz_src = cdio_get_default_device_freebsd();
else { } else {
char devname[256]; psz_src = strdup(psz_source);
int bytes = readlink(source, devname, 255);
if (bytes > 0) {
devname[bytes]=0;
if (!(strncmp(devname, "acd", 3)))
return "ioctl";
}
} }
}
return "CAM"; if (psz_src) {
if (!(strncmp(psz_src, "/dev/acd", 8)))
return "ioctl";
else {
char devname[256];
int bytes = readlink(psz_src, devname, 255);
if (bytes > 0) {
devname[bytes]=0;
if (!(strncmp(devname, "acd", 3)))
return "ioctl";
}
}
}
return "CAM";
} }
#endif /*HAVE_FREEBSD_CDROM*/ #endif /*HAVE_FREEBSD_CDROM*/

View File

@@ -57,8 +57,25 @@ main(int argc, const char *argv[])
exit(2); exit(2);
} }
} }
cdio_destroy(p_cdio); cdio_destroy(p_cdio);
ppsz_drives = cdio_get_devices(DRIVER_DEVICE);
if (!ppsz_drives) {
printf("Can't find a CD-ROM drive. Skipping test.\n");
exit(77);
}
p_cdio = cdio_open_freebsd(ppsz_drives[0]);
if (p_cdio) {
const char *psz_source = cdio_get_arg(p_cdio, "source");
if (0 != strncmp(psz_source, ppsz_drives[0],
strlen(ppsz_drives[0]))) {
fprintf(stderr,
"Got %s; should get back %s, the name we opened.\n",
psz_source, ppsz_drives[0]);
exit(1);
}
}
cdio_free_device_list(ppsz_drives); cdio_free_device_list(ppsz_drives);
return 0; return 0;