Remove libpopt.
cd-drive, cd-info: some source option bug fixes osx.c: bug in duplicate free in add-device Patches and bug fixes courtesy Peter J. Creath
This commit is contained in:
@@ -339,18 +339,6 @@
|
||||
<File
|
||||
RelativePath=".\src\findme.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\popt.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\poptconfig.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\popthelp.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\poptparse.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\util.c">
|
||||
</File>
|
||||
@@ -362,9 +350,6 @@
|
||||
<File
|
||||
RelativePath=".\src\findme.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\popt.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\util.h">
|
||||
</File>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $Id: Makefile.am,v 1.35 2005/02/05 23:16:34 rocky Exp $
|
||||
# $Id: Makefile.am,v 1.36 2005/10/05 09:48:11 rocky Exp $
|
||||
#
|
||||
# Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
||||
#
|
||||
@@ -20,7 +20,7 @@
|
||||
## which configure then turns into a Makefile ...
|
||||
## which make can then use to produce stuff. Isn't configuration simple?
|
||||
|
||||
EXTRA_DIST = libpopt.m4 THANKS README.libcdio \
|
||||
EXTRA_DIST = THANKS README.libcdio \
|
||||
package/libcdio.spec.in package/libcdio.spec \
|
||||
libcdio.pc.in libcdio.pc \
|
||||
libcdio_cdda.pc.in libcdio_cdda.pc \
|
||||
|
||||
8
THANKS
8
THANKS
@@ -1,3 +1,6 @@
|
||||
Burkhard Plaum <plaum@ipf.uni-stuttgart.de>
|
||||
some GNU/Linux and CD-Text patches
|
||||
|
||||
Diego 'Flameeyes' Petten<65>
|
||||
patches to FreeBSD and making Gentoo-friendly
|
||||
|
||||
@@ -30,8 +33,9 @@ Michael Kukat <michael at unixiron.org>,
|
||||
Nicolas Boullis <nboullis at debian.org>
|
||||
Build issues, library symbol versioning, Debian packaging and issues
|
||||
|
||||
Burkhard Plaum <plaum@ipf.uni-stuttgart.de>
|
||||
some GNU/Linux and CD-Text patches
|
||||
Peter J. Creath
|
||||
removal of libpopt, paranoia documentation, some bug fixes to
|
||||
cd-* programs and the paranoia lib
|
||||
|
||||
Steven M. Schultz <sms at 2BSD.COM>
|
||||
All things BSDI and the use of a really fabulous Darwin G5 box.
|
||||
|
||||
47
configure.ac
47
configure.ac
@@ -19,7 +19,7 @@ define(RELEASE_NUM, 77)
|
||||
define(CDIO_VERSION_STR, 0.$1cvs)
|
||||
|
||||
AC_PREREQ(2.52)
|
||||
AC_REVISION([$Id: configure.ac,v 1.172 2005/09/30 01:10:54 rocky Exp $])dnl
|
||||
AC_REVISION([$Id: configure.ac,v 1.173 2005/10/05 09:48:11 rocky Exp $])dnl
|
||||
AC_INIT(libcdio, CDIO_VERSION_STR(RELEASE_NUM))
|
||||
AC_CONFIG_SRCDIR(src/cd-info.c)
|
||||
|
||||
@@ -152,14 +152,6 @@ AC_SUBST(CMP)
|
||||
AC_PATH_PROG(OLD_CDPARANOIA, cdparanoia, no)
|
||||
AC_SUBST(OLD_CDPARANOIA)
|
||||
|
||||
AM_PATH_LIBPOPT(,
|
||||
[AC_MSG_WARN([Diagnostic programs cd-drive, cd-info, cd-read, iso-info, and is-read will not get built.])
|
||||
enable_cd_info=no;
|
||||
enable_cd_drive=no;
|
||||
enable_cd_read=no;
|
||||
enable_iso_info=no;
|
||||
enable_iso_read=no])
|
||||
|
||||
AC_DEFINE(LIBCDIO_CONFIG_H, 1,
|
||||
[Is set when libcdio's config.h has been included. Applications wishing to sue their own config.h values (such as set by the application's configure script can define this before including any of libcdio's headers.])
|
||||
|
||||
@@ -168,9 +160,12 @@ dnl headers
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS(errno.h fcntl.h glob.h pwd.h)
|
||||
AC_CHECK_HEADERS(stdarg.h stdbool.h stdio.h sys/cdio.h sys/param.h)
|
||||
|
||||
AC_CHECK_HEADERS(ncurses.h curses.h, break, [enable_cdda_player='no'])
|
||||
|
||||
dnl FreeBSD 4 has getopt in unistd.h. So we include that before
|
||||
dnl getopt.h
|
||||
AC_CHECK_HEADERS(unistd.h getopt.h)
|
||||
|
||||
AC_SUBST(SBPCD_H)
|
||||
AC_SUBST(UCDROM_H)
|
||||
AC_SUBST(TYPESIZES)
|
||||
@@ -188,38 +183,6 @@ AC_TRY_COMPILE([],[_Pragma("pack(1)")], [
|
||||
],ISOC99_PRAGMA=no)
|
||||
AC_MSG_RESULT($ISOC99_PRAGMA)
|
||||
|
||||
##
|
||||
## Check for GNU getopt_long()
|
||||
##
|
||||
AC_MSG_CHECKING(for GNU getopt_long)
|
||||
AC_TRY_RUN([
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <getopt.h>
|
||||
|
||||
static struct option long_options[] = {
|
||||
{"help" , no_argument, 0, 1 },
|
||||
{"version" , no_argument, 0, 2 },
|
||||
{0 , no_argument, 0, 0 }
|
||||
};
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
int option_index = 0;
|
||||
int c;
|
||||
|
||||
opterr = 0;
|
||||
while((c = getopt_long(argc, argv, "?hv",
|
||||
long_options, &option_index)) != EOF) {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
], [AC_MSG_RESULT(yes); ac_getopt_long=yes;
|
||||
AC_DEFINE(HAVE_GETOPT_LONG, [],
|
||||
[Define this if you have GNU getopt_long()])],
|
||||
[AC_MSG_RESULT(no); ac_getopt_long=no],
|
||||
[AC_MSG_RESULT(no); ac_getopt_long=no])
|
||||
AM_CONDITIONAL(HAVE_GETOPT_LONG, test x"$ac_getopt_long" = "xyes")
|
||||
|
||||
##
|
||||
## Check for S_ISSOCK() and S_ISLNK() macros
|
||||
##
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
$Id: osx.c,v 1.4 2005/09/30 00:01:09 rocky Exp $
|
||||
$Id: osx.c,v 1.5 2005/10/05 09:48:12 rocky Exp $
|
||||
|
||||
Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||
from vcdimager code:
|
||||
@@ -34,7 +34,7 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
static const char _rcsid[] = "$Id: osx.c,v 1.4 2005/09/30 00:01:09 rocky Exp $";
|
||||
static const char _rcsid[] = "$Id: osx.c,v 1.5 2005/10/05 09:48:12 rocky Exp $";
|
||||
|
||||
#include <cdio/logging.h>
|
||||
#include <cdio/sector.h>
|
||||
@@ -1627,15 +1627,9 @@ cdio_get_devices_osx(void)
|
||||
sizeof(psz_buf) - dev_path_length,
|
||||
kCFStringEncodingASCII ) )
|
||||
{
|
||||
CFRelease( str_bsd_path );
|
||||
IOObjectRelease( next_media );
|
||||
IOObjectRelease( media_iterator );
|
||||
cdio_add_device_list(&drives, strdup(psz_buf), &num_drives);
|
||||
}
|
||||
else
|
||||
{
|
||||
CFRelease( str_bsd_path );
|
||||
}
|
||||
CFRelease( str_bsd_path );
|
||||
IOObjectRelease( next_media );
|
||||
|
||||
} while( ( next_media = IOIteratorNext( media_iterator ) ) != 0 );
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $Id: Makefile.am,v 1.35 2005/03/10 12:47:03 rocky Exp $
|
||||
# $Id: Makefile.am,v 1.36 2005/10/05 09:48:12 rocky Exp $
|
||||
#
|
||||
# Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||
#
|
||||
@@ -42,42 +42,40 @@ endif
|
||||
|
||||
if BUILD_CD_DRIVE
|
||||
cd_drive_SOURCES = cd-drive.c util.c util.h
|
||||
cd_drive_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBPOPT_LIBS) $(LIBICONV)
|
||||
cd_drive_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBICONV)
|
||||
bin_cd_drive = cd-drive
|
||||
endif
|
||||
|
||||
if BUILD_CDINFO
|
||||
cd_info_SOURCES = cd-info.c cddb.c cddb.h util.c util.h
|
||||
cd_info_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBPOPT_LIBS) $(CDDB_LIBS) $(VCDINFO_LIBS) $(LIBICONV)
|
||||
cd_info_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(CDDB_LIBS) $(VCDINFO_LIBS) $(LIBICONV)
|
||||
bin_cd_info = cd-info
|
||||
endif
|
||||
|
||||
if BUILD_CDINFO_LINUX
|
||||
cdinfo_linux_SOURCES = cdinfo-linux.c
|
||||
cdinfo_linux_LDADD = $(LIBCDIO_LIBS) $(LIBPOPT_LIBS)
|
||||
cdinfo_linux_LDADD = $(LIBCDIO_LIBS)
|
||||
bin_cdinfo_linux = cdinfo-linux
|
||||
endif
|
||||
|
||||
if BUILD_CD_READ
|
||||
cd_read_SOURCES = cd-read.c util.c util.h
|
||||
cd_read_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBPOPT_LIBS) $(LIBICONV)
|
||||
cd_read_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBICONV)
|
||||
bin_cd_read = cd-read
|
||||
endif
|
||||
|
||||
if BUILD_ISO_INFO
|
||||
iso_info_SOURCES = iso-info.c util.c util.h
|
||||
iso_info_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBPOPT_LIBS) $(LIBICONV)
|
||||
iso_info_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBICONV)
|
||||
bin_iso_info = iso-info
|
||||
endif
|
||||
|
||||
if BUILD_ISO_READ
|
||||
iso_read_SOURCES = iso-read.c util.c util.h
|
||||
iso_read_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBPOPT_LIBS) $(LIBICONV)
|
||||
iso_read_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBICONV)
|
||||
bin_iso_read = iso-read
|
||||
endif
|
||||
|
||||
bin_PROGRAMS = $(bin_cd_drive) $(bin_cd_info) $(bin_cdinfo_linux) $(bin_cd_read) $(bin_iso_info) $(bin_iso_read) $(bin_cdda_player)
|
||||
|
||||
# Put LIBPOPT_CFLAGS after local include in case LIBPOPT has headers common
|
||||
# to those in LIBCDIO_CFLAGS
|
||||
INCLUDES = -I$(top_srcdir) $(LIBCDIO_CFLAGS) $(VCDINFO_CFLAGS) $(CDDB_CFLAGS) $(LIBPOPT_CFLAGS)
|
||||
INCLUDES = -I$(top_srcdir) $(LIBCDIO_CFLAGS) $(VCDINFO_CFLAGS) $(CDDB_CFLAGS)
|
||||
|
||||
143
src/cd-drive.c
143
src/cd-drive.c
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
$Id: cd-drive.c,v 1.23 2005/04/30 10:05:11 rocky Exp $
|
||||
$Id: cd-drive.c,v 1.24 2005/10/05 09:48:12 rocky Exp $
|
||||
|
||||
Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#include <getopt.h>
|
||||
#include <cdio/cdio.h>
|
||||
#include <cdio/scsi_mmc.h>
|
||||
|
||||
@@ -43,44 +44,64 @@ struct arguments
|
||||
|
||||
/* Configuration option codes */
|
||||
enum {
|
||||
OP_HANDLED,
|
||||
|
||||
OP_SOURCE_DEVICE,
|
||||
|
||||
|
||||
OP_USAGE,
|
||||
|
||||
/* These are the remaining configuration options */
|
||||
OP_VERSION,
|
||||
|
||||
};
|
||||
|
||||
/* Parse a all options. */
|
||||
/* Parse all options. */
|
||||
static bool
|
||||
parse_options (int argc, const char *argv[])
|
||||
parse_options (int argc, char *argv[])
|
||||
{
|
||||
int opt;
|
||||
|
||||
struct poptOption optionsTable[] = {
|
||||
{"debug", 'd', POPT_ARG_INT, &opts.debug_level, 0,
|
||||
"Set debugging to LEVEL"},
|
||||
|
||||
{"cdrom-device", 'i', POPT_ARG_STRING|POPT_ARGFLAG_OPTIONAL,
|
||||
&source_name, OP_SOURCE_DEVICE,
|
||||
"show only info about CD-ROM device", "DEVICE"},
|
||||
|
||||
{"quiet", 'q', POPT_ARG_NONE, &opts.silent, 0,
|
||||
"Don't produce warning output" },
|
||||
|
||||
{"version", 'V', POPT_ARG_NONE, &opts.version_only, 0,
|
||||
"display version and copyright information and exit"},
|
||||
POPT_AUTOHELP {NULL, 0, 0, NULL, 0}
|
||||
const char* helpText =
|
||||
"Usage: %s [OPTION...]\n"
|
||||
" -d, --debug=INT Set debugging to LEVEL\n"
|
||||
" -i, --cdrom-device[=DEVICE] show only info about CD-ROM device\n"
|
||||
" -q, --quiet Don't produce warning output\n"
|
||||
" -V, --version display version and copyright information\n"
|
||||
" and exit\n"
|
||||
"\n"
|
||||
"Help options:\n"
|
||||
" -?, --help Show this help message\n"
|
||||
" --usage Display brief usage message\n";
|
||||
|
||||
const char* usageText =
|
||||
"Usage: %s [-d|--debug INT] [-i|--cdrom-device DEVICE] [-q|--quiet]\n"
|
||||
" [-V|--version] [-?|--help] [--usage]\n";
|
||||
|
||||
const char* optionsString = "d:i::qV?";
|
||||
struct option optionsTable[] = {
|
||||
{"debug", required_argument, NULL, 'd' },
|
||||
{"cdrom-device", optional_argument, NULL, 'i' },
|
||||
{"quiet", no_argument, NULL, 'q' },
|
||||
{"version", no_argument, NULL, 'V' },
|
||||
{"help", no_argument, NULL, '?' },
|
||||
{"usage", no_argument, NULL, OP_USAGE },
|
||||
{NULL, 0, NULL, 0 }
|
||||
};
|
||||
poptContext optCon = poptGetContext (NULL, argc, argv, optionsTable, 0);
|
||||
|
||||
program_name = strrchr(argv[0],'/');
|
||||
program_name = program_name ? strdup(program_name+1) : strdup(argv[0]);
|
||||
|
||||
while ((opt = poptGetNextOpt (optCon)) != -1) {
|
||||
while ((opt = getopt_long(argc, argv, optionsString, optionsTable, NULL)) != -1) {
|
||||
switch (opt) {
|
||||
|
||||
case OP_SOURCE_DEVICE:
|
||||
case 'd':
|
||||
opts.debug_level = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
if (opts.source_image != DRIVER_UNKNOWN) {
|
||||
/* NOTE: The libpopt version already set source_name by this time.
|
||||
To restore this behavior, fall through to the else{} block.
|
||||
*/
|
||||
report( stderr, "%s: another source type option given before.\n",
|
||||
program_name );
|
||||
report( stderr, "%s: give only one source type option.\n",
|
||||
@@ -88,44 +109,66 @@ parse_options (int argc, const char *argv[])
|
||||
break;
|
||||
} else {
|
||||
opts.source_image = DRIVER_DEVICE;
|
||||
source_name = fillout_device_name(source_name);
|
||||
if (optarg != NULL) {
|
||||
source_name = fillout_device_name(optarg);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 'q':
|
||||
opts.silent = 1;
|
||||
break;
|
||||
|
||||
case 'V':
|
||||
opts.version_only = 1;
|
||||
break;
|
||||
|
||||
case '?':
|
||||
fprintf(stderr, helpText, program_name);
|
||||
free(program_name);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case OP_USAGE:
|
||||
fprintf(stderr, usageText, program_name);
|
||||
free(program_name);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case OP_HANDLED:
|
||||
break;
|
||||
|
||||
default:
|
||||
poptFreeContext(optCon);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
{
|
||||
const char *remaining_arg = poptGetArg(optCon);
|
||||
if ( remaining_arg != NULL) {
|
||||
if (opts.source_image != DRIVER_UNKNOWN) {
|
||||
report( stderr, "%s: Source specified in option %s and as %s\n",
|
||||
program_name, source_name, remaining_arg);
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
if (optind < argc) {
|
||||
const char *remaining_arg = argv[optind++];
|
||||
|
||||
/* NOTE: A bug in the libpopt version checked source_image, which
|
||||
rendered the subsequent source_image test useless.
|
||||
*/
|
||||
if (source_name != NULL) {
|
||||
report( stderr, "%s: Source specified in option %s and as %s\n",
|
||||
program_name, source_name, remaining_arg);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (opts.source_image == DRIVER_DEVICE)
|
||||
source_name = fillout_device_name(remaining_arg);
|
||||
else
|
||||
source_name = strdup(remaining_arg);
|
||||
|
||||
if ( (poptGetArgs(optCon)) != NULL) {
|
||||
report( stderr, "%s: Source specified in previously %s and %s\n",
|
||||
program_name, source_name, remaining_arg);
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
|
||||
}
|
||||
if (opts.source_image == DRIVER_DEVICE)
|
||||
source_name = fillout_device_name(remaining_arg);
|
||||
else
|
||||
source_name = strdup(remaining_arg);
|
||||
|
||||
if (optind < argc) {
|
||||
report( stderr, "%s: Source specified in previously %s and %s\n",
|
||||
program_name, source_name, remaining_arg);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
poptFreeContext(optCon);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -187,7 +230,7 @@ init(void)
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, const char *argv[])
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
CdIo_t *p_cdio=NULL;
|
||||
|
||||
|
||||
448
src/cd-info.c
448
src/cd-info.c
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
$Id: cd-info.c,v 1.144 2005/09/18 20:34:02 rocky Exp $
|
||||
$Id: cd-info.c,v 1.145 2005/10/05 09:48:12 rocky Exp $
|
||||
|
||||
Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||
Copyright (C) 1996, 1997, 1998 Gerd Knorr <kraxel@bytesex.org>
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "util.h"
|
||||
#include "cddb.h"
|
||||
#include <stdarg.h>
|
||||
#include <getopt.h>
|
||||
|
||||
#ifdef HAVE_CDDB
|
||||
#include <cddb/cddb.h>
|
||||
@@ -95,6 +96,7 @@ struct opts_s
|
||||
|
||||
/* Configuration option codes */
|
||||
enum {
|
||||
OP_HANDLED = 0,
|
||||
|
||||
OP_SOURCE_UNDEF,
|
||||
OP_SOURCE_AUTO,
|
||||
@@ -103,7 +105,15 @@ enum {
|
||||
OP_SOURCE_CDRDAO,
|
||||
OP_SOURCE_NRG ,
|
||||
OP_SOURCE_DEVICE,
|
||||
|
||||
|
||||
OP_CDDB_SERVER,
|
||||
OP_CDDB_CACHE,
|
||||
OP_CDDB_EMAIL,
|
||||
OP_CDDB_NOCACHE,
|
||||
OP_CDDB_TIMEOUT,
|
||||
|
||||
OP_USAGE,
|
||||
|
||||
/* These are the remaining configuration options */
|
||||
OP_VERSION,
|
||||
|
||||
@@ -111,236 +121,264 @@ enum {
|
||||
|
||||
char *temp_str;
|
||||
|
||||
/* Parse a all options. */
|
||||
/* Parse source options. */
|
||||
static void
|
||||
parse_source(int opt)
|
||||
{
|
||||
/* NOTE: The libpopt version made use of an extra temporary
|
||||
variable (psz_my_source) for all sources _except_ devices.
|
||||
This distinction seemed to serve no purpose.
|
||||
*/
|
||||
|
||||
if (opts.source_image != INPUT_UNKNOWN) {
|
||||
report(stderr, "%s: another source type option given before.\n",
|
||||
program_name);
|
||||
report(stderr, "%s: give only one source type option.\n",
|
||||
program_name);
|
||||
return;
|
||||
}
|
||||
|
||||
/* For all input sources which are not a DEVICE, we need to make
|
||||
a copy of the string; for a DEVICE the fill-out routine makes
|
||||
the copy.
|
||||
*/
|
||||
if (OP_SOURCE_DEVICE != opt)
|
||||
if (optarg != NULL) source_name = strdup(optarg);
|
||||
|
||||
switch (opt) {
|
||||
case OP_SOURCE_BIN:
|
||||
opts.source_image = INPUT_BIN;
|
||||
break;
|
||||
case OP_SOURCE_CUE:
|
||||
opts.source_image = INPUT_CUE;
|
||||
break;
|
||||
case OP_SOURCE_CDRDAO:
|
||||
opts.source_image = INPUT_CDRDAO;
|
||||
break;
|
||||
case OP_SOURCE_NRG:
|
||||
opts.source_image = INPUT_NRG;
|
||||
break;
|
||||
case OP_SOURCE_AUTO:
|
||||
opts.source_image = INPUT_AUTO;
|
||||
break;
|
||||
|
||||
case OP_SOURCE_DEVICE:
|
||||
opts.source_image = INPUT_DEVICE;
|
||||
if (optarg != NULL) source_name = fillout_device_name(optarg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Parse all options. */
|
||||
static bool
|
||||
parse_options (int argc, const char *argv[])
|
||||
parse_options (int argc, char *argv[])
|
||||
{
|
||||
int opt; /* used for argument parsing */
|
||||
char *psz_my_source;
|
||||
|
||||
struct poptOption optionsTable[] = {
|
||||
{"access-mode", 'a', POPT_ARG_STRING, &opts.access_mode, 0,
|
||||
"Set CD access methed"},
|
||||
|
||||
{"debug", 'd', POPT_ARG_INT, &opts.debug_level, 0,
|
||||
"Set debugging to LEVEL"},
|
||||
|
||||
{"no-tracks", 'T', POPT_ARG_NONE, &opts.no_tracks, 0,
|
||||
"Don't show track information"},
|
||||
|
||||
{"no-analyze", 'A', POPT_ARG_NONE, &opts.no_analysis, 0,
|
||||
"Don't filesystem analysis"},
|
||||
|
||||
|
||||
const char* helpText =
|
||||
"Usage: %s [OPTION...]\n"
|
||||
" -a, --access-mode=STRING Set CD access method\n"
|
||||
" -d, --debug=INT Set debugging to LEVEL\n"
|
||||
" -T, --no-tracks Don't show track information\n"
|
||||
" -A, --no-analyze Don't filesystem analysis\n"
|
||||
#ifdef HAVE_CDDB
|
||||
{"no-cddb", '\0', POPT_ARG_NONE, &opts.no_cddb, 0,
|
||||
"Don't look up audio CDDB information or print that"},
|
||||
|
||||
{"cddb-port", 'P', POPT_ARG_INT, &cddb_opts.port, 8880,
|
||||
"CDDB port number to use (default 8880)"},
|
||||
|
||||
{"cddb-http", 'H', POPT_ARG_NONE, &cddb_opts.http, 0,
|
||||
"Lookup CDDB via HTTP proxy (default no proxy)"},
|
||||
|
||||
{"cddb-server", '\0', POPT_ARG_STRING, &cddb_opts.server, 0,
|
||||
"CDDB server to contact for information (default: freedb.freedb.org)"},
|
||||
|
||||
{"cddb-cache", '\0', POPT_ARG_STRING, &cddb_opts.cachedir, 0,
|
||||
"Location of CDDB cache directory (default ~/.cddbclient)"},
|
||||
|
||||
{"cddb-email", '\0', POPT_ARG_STRING, &cddb_opts.email, 0,
|
||||
"Email address to give CDDB server (default me@home"},
|
||||
|
||||
{"no-cddb-cache", '\0', POPT_ARG_NONE, &cddb_opts.disable_cache, 0,
|
||||
"Lookup CDDB via HTTP proxy (default no proxy)"},
|
||||
|
||||
{"cddb-timeout", '\0', POPT_ARG_INT, &cddb_opts.timeout, 0,
|
||||
"CDDB timeout value in seconds (default 10 seconds)"},
|
||||
#else
|
||||
{"no-cddb", '\0', POPT_ARG_NONE, &opts.no_cddb, 0,
|
||||
"Does nothing since this program is not CDDB-enabled"},
|
||||
|
||||
{"cddb-port", 'P', POPT_ARG_INT, &cddb_opts.port, 8880,
|
||||
"Does nothing since this program is not CDDB-enabled"},
|
||||
|
||||
{"cddb-http", 'H', POPT_ARG_NONE, &cddb_opts.http, 0,
|
||||
"Does nothing since this program is not CDDB-enabled"},
|
||||
|
||||
{"cddb-server", '\0', POPT_ARG_STRING, &cddb_opts.server, 0,
|
||||
"Does nothing since this program is not CDDB-enabled"},
|
||||
|
||||
{"cddb-cache", '\0', POPT_ARG_STRING, &cddb_opts.cachedir, 0,
|
||||
"Does nothing since this program is not CDDB-enabled"},
|
||||
|
||||
{"cddb-email", '\0', POPT_ARG_STRING, &cddb_opts.email, 0,
|
||||
"Does nothing since this program is not CDDB-enabled"},
|
||||
|
||||
{"no-cddb-cache", '\0', POPT_ARG_NONE, &cddb_opts.disable_cache, 0,
|
||||
"Does nothing since this program is not CDDB-enabled"},
|
||||
|
||||
{"cddb-timeout", '\0', POPT_ARG_INT, &cddb_opts.timeout, 0,
|
||||
"Does nothing since this program is not CDDB-enabled"},
|
||||
" --no-cddb Don't look up audio CDDB information\n"
|
||||
" or print it\n"
|
||||
" -P, --cddb-port=INT CDDB port number to use (default 8880)\n"
|
||||
" -H, --cddb-http Lookup CDDB via HTTP proxy (default no\n"
|
||||
" proxy)\n"
|
||||
" --cddb-server=STRING CDDB server to contact for information\n"
|
||||
" (default: freedb.freedb.org)\n"
|
||||
" --cddb-cache=STRING Location of CDDB cache directory\n"
|
||||
" (default ~/.cddbclient)\n"
|
||||
" --cddb-email=STRING Email address to give CDDB server\n"
|
||||
" (default me@home)\n"
|
||||
" --no-cddb-cache Disable caching of CDDB entries\n"
|
||||
" locally (default caches)\n"
|
||||
" --cddb-timeout=INT CDDB timeout value in seconds\n"
|
||||
" (default 10 seconds)\n"
|
||||
#else
|
||||
" --no-cddb Does nothing since this program is not\n"
|
||||
" -P, --cddb-port=INT CDDB-enabled\n"
|
||||
" -H, --cddb-http\n"
|
||||
" --cddb-server=STRING\n"
|
||||
" --cddb-cache=STRING\n"
|
||||
" --cddb-email=STRING\n"
|
||||
" --no-cddb-cache\n"
|
||||
" --cddb-timeout=INT\n"
|
||||
#endif
|
||||
|
||||
{"no-device-info", '\0', POPT_ARG_NONE, &opts.no_device, 0,
|
||||
"Don't show device info, just CD info"},
|
||||
|
||||
{"no-disc-mode", '\0', POPT_ARG_NONE, &opts.no_disc_mode, 0,
|
||||
"Don't show disc-mode info"},
|
||||
|
||||
{"dvd", '\0', POPT_ARG_NONE, &opts.show_dvd, 0,
|
||||
"Attempt to give DVD information if a DVD is found."},
|
||||
|
||||
" --no-device-info Don't show device info, just CD info\n"
|
||||
" --no-disc-mode Don't show disc-mode info\n"
|
||||
" --dvd Attempt to give DVD information if a DVD is\n"
|
||||
" found.\n"
|
||||
#ifdef HAVE_VCDINFO
|
||||
{"no-vcd", 'v', POPT_ARG_NONE, &opts.no_vcd, 0,
|
||||
"Don't look up Video CD information"},
|
||||
#else
|
||||
{"no-vcd", 'v', POPT_ARG_NONE, &opts.no_vcd, 1,
|
||||
"Don't look up Video CD information - for this build, this is always set"},
|
||||
" -v, --no-vcd Don't look up Video CD information\n"
|
||||
#else
|
||||
" -v, --no-vcd Don't look up Video CD information - for\n"
|
||||
" this build, this is always set\n"
|
||||
#endif
|
||||
{"no-ioctl", 'I', POPT_ARG_NONE, &opts.no_ioctl, 0,
|
||||
"Don't show ioctl() information"},
|
||||
|
||||
{"bin-file", 'b', POPT_ARG_STRING|POPT_ARGFLAG_OPTIONAL, &psz_my_source,
|
||||
OP_SOURCE_BIN, "set \"bin\" CD-ROM disk image file as source", "FILE"},
|
||||
|
||||
{"cue-file", 'c', POPT_ARG_STRING|POPT_ARGFLAG_OPTIONAL, &psz_my_source,
|
||||
OP_SOURCE_CUE, "set \"cue\" CD-ROM disk image file as source", "FILE"},
|
||||
|
||||
{"nrg-file", 'N', POPT_ARG_STRING|POPT_ARGFLAG_OPTIONAL, &psz_my_source,
|
||||
OP_SOURCE_NRG, "set Nero CD-ROM disk image file as source", "FILE"},
|
||||
|
||||
{"toc-file", 't', POPT_ARG_STRING|POPT_ARGFLAG_OPTIONAL, &psz_my_source,
|
||||
OP_SOURCE_CDRDAO, "set cdrdao CD-ROM disk image file as source", "FILE"},
|
||||
|
||||
{"input", 'i', POPT_ARG_STRING|POPT_ARGFLAG_OPTIONAL, &psz_my_source,
|
||||
OP_SOURCE_AUTO,
|
||||
"set source and determine if \"bin\" image or device", "FILE"},
|
||||
|
||||
{"iso9660", '\0', POPT_ARG_NONE, &opts.print_iso9660, 0,
|
||||
"print directory contents of any ISO-9660 filesystems"},
|
||||
|
||||
{"cdrom-device", 'C', POPT_ARG_STRING|POPT_ARGFLAG_OPTIONAL, &source_name,
|
||||
OP_SOURCE_DEVICE,
|
||||
"set CD-ROM device as source", "DEVICE"},
|
||||
|
||||
{"list-drives", 'l', POPT_ARG_NONE, &opts.list_drives, 0,
|
||||
"Give a list of CD-drives" },
|
||||
|
||||
{"no-header", '\0', POPT_ARG_NONE, &opts.no_header,
|
||||
0, "Don't display header and copyright (for regression testing)"},
|
||||
" -I, --no-ioctl Don't show ioctl() information\n"
|
||||
" -b, --bin-file[=FILE] set \"bin\" CD-ROM disk image file as source\n"
|
||||
" -c, --cue-file[=FILE] set \"cue\" CD-ROM disk image file as source\n"
|
||||
" -N, --nrg-file[=FILE] set Nero CD-ROM disk image file as source\n"
|
||||
" -t, --toc-file[=FILE] set cdrdao CD-ROM disk image file as source\n"
|
||||
" -i, --input[=FILE] set source and determine if \"bin\" image or\n"
|
||||
" device\n"
|
||||
" --iso9660 print directory contents of any ISO-9660\n"
|
||||
" filesystems\n"
|
||||
" -C, --cdrom-device[=DEVICE] set CD-ROM device as source\n"
|
||||
" -l, --list-drives Give a list of CD-drives\n"
|
||||
" --no-header Don't display header and copyright (for\n"
|
||||
" regression testing)\n"
|
||||
#ifdef HAVE_JOLIET
|
||||
" --no-joliet Don't use Joliet extensions\n"
|
||||
#endif
|
||||
" --no-rock-ridge Don't use Rock-Ridge-extension information\n"
|
||||
" --no-xa Don't use XA-extension information\n"
|
||||
" -q, --quiet Don't produce warning output\n"
|
||||
" -V, --version display version and copyright information\n"
|
||||
" and exit\n"
|
||||
"\n"
|
||||
"Help options:\n"
|
||||
" -?, --help Show this help message\n"
|
||||
" --usage Display brief usage message\n";
|
||||
|
||||
const char* usageText =
|
||||
"Usage: %s [-a|--access-mode STRING] [-d|--debug INT] [-T|--no-tracks]\n"
|
||||
" [-A|--no-analyze] [--no-cddb] [-P|--cddb-port INT] [-H|--cddb-http]\n"
|
||||
" [--cddb-server=STRING] [--cddb-cache=STRING] [--cddb-email=STRING]\n"
|
||||
" [--no-cddb-cache] [--cddb-timeout=INT] [--no-device-info]\n"
|
||||
" [--no-disc-mode] [--dvd] [-v|--no-vcd] [-I|--no-ioctl]\n"
|
||||
" [-b|--bin-file FILE] [-c|--cue-file FILE] [-N|--nrg-file FILE]\n"
|
||||
" [-t|--toc-file FILE] [-i|--input FILE] [--iso9660]\n"
|
||||
" [-C|--cdrom-device DEVICE] [-l|--list-drives] [--no-header]\n"
|
||||
" [--no-joliet] [--no-rock-ridge] [--no-xa] [-q|--quiet] [-V|--version]\n"
|
||||
" [-?|--help] [--usage]\n";
|
||||
|
||||
const char* optionsString = "a:d:TAP:HvIb::c::N::t::i::C::lqV?";
|
||||
struct option optionsTable[] = {
|
||||
{"access-mode", required_argument, NULL, 'a'},
|
||||
{"debug", required_argument, NULL, 'd' },
|
||||
{"no-tracks", no_argument, NULL, 'T' },
|
||||
{"no-analyze", no_argument, NULL, 'A' },
|
||||
{"no-cddb", no_argument, &opts.no_cddb, 1 },
|
||||
{"cddb-port", required_argument, NULL, 'P' },
|
||||
{"cddb-http", no_argument, NULL, 'H' },
|
||||
{"cddb-server", required_argument, NULL, OP_CDDB_SERVER },
|
||||
{"cddb-cache", required_argument, NULL, OP_CDDB_CACHE },
|
||||
{"cddb-email", required_argument, NULL, OP_CDDB_EMAIL },
|
||||
{"no-cddb-cache", no_argument, NULL, OP_CDDB_NOCACHE },
|
||||
{"cddb-timeout", required_argument, NULL, OP_CDDB_TIMEOUT },
|
||||
{"no-device-info", no_argument, &opts.no_device, 1 },
|
||||
{"no-disc-mode", no_argument, &opts.no_disc_mode, 1 },
|
||||
{"dvd", no_argument, &opts.show_dvd, 1 },
|
||||
{"no-vcd", no_argument, NULL, 'v' },
|
||||
{"no-ioctl", no_argument, NULL, 'I' },
|
||||
{"bin-file", optional_argument, NULL, 'b' },
|
||||
{"cue-file", optional_argument, NULL, 'c' },
|
||||
{"nrg-file", optional_argument, NULL, 'N' },
|
||||
{"toc-file", optional_argument, NULL, 't' },
|
||||
{"input", optional_argument, NULL, 'i' },
|
||||
{"iso9660", no_argument, &opts.print_iso9660, 1 },
|
||||
{"cdrom-device", optional_argument, NULL, 'C' },
|
||||
{"list-drives", no_argument, NULL, 'l' },
|
||||
{"no-header", no_argument, &opts.no_header, 1 },
|
||||
#ifdef HAVE_JOLIET
|
||||
{"no-joliet", '\0', POPT_ARG_NONE, &opts.no_joliet,
|
||||
0, "Don't use Joliet extensions"},
|
||||
{"no-joliet", no_argument, &opts.no_joliet, 1 },
|
||||
#endif /*HAVE_JOLIET*/
|
||||
|
||||
{"no-rock-ridge", '\0', POPT_ARG_NONE, &opts.no_rock_ridge,
|
||||
0, "Don't use Rock-Ridge-extension information"},
|
||||
{"no-rock-ridge", no_argument, &opts.no_rock_ridge, 1 },
|
||||
{"no-xa", no_argument, &opts.no_xa, 1 },
|
||||
{"quiet", no_argument, NULL, 'q' },
|
||||
{"version", no_argument, NULL, 'V' },
|
||||
|
||||
{"no-xa", '\0', POPT_ARG_NONE, &opts.no_xa,
|
||||
0, "Don't use XA-extension information"},
|
||||
|
||||
{"quiet", 'q', POPT_ARG_NONE, &opts.silent, 0,
|
||||
"Don't produce warning output" },
|
||||
|
||||
{"version", 'V', POPT_ARG_NONE, &opts.version_only, 0,
|
||||
"display version and copyright information and exit"},
|
||||
POPT_AUTOHELP {NULL, 0, 0, NULL, 0}
|
||||
{"help", no_argument, NULL, '?' },
|
||||
{"usage", no_argument, NULL, OP_USAGE },
|
||||
{ NULL, 0, NULL, 0 }
|
||||
};
|
||||
poptContext optCon = poptGetContext (NULL, argc, argv, optionsTable, 0);
|
||||
|
||||
program_name = strrchr(argv[0],'/');
|
||||
program_name = program_name ? strdup(program_name+1) : strdup(argv[0]);
|
||||
|
||||
while ((opt = poptGetNextOpt (optCon)) >= 0) {
|
||||
while ((opt = getopt_long(argc, argv, optionsString, optionsTable, NULL)) >= 0) {
|
||||
switch (opt) {
|
||||
|
||||
case OP_SOURCE_AUTO:
|
||||
case OP_SOURCE_BIN:
|
||||
case OP_SOURCE_CUE:
|
||||
case OP_SOURCE_CDRDAO:
|
||||
case OP_SOURCE_NRG:
|
||||
case OP_SOURCE_DEVICE:
|
||||
if (opts.source_image != INPUT_UNKNOWN) {
|
||||
report(stderr, "%s: another source type option given before.\n",
|
||||
program_name);
|
||||
report(stderr, "%s: give only one source type option.\n",
|
||||
program_name);
|
||||
break;
|
||||
}
|
||||
case 'a': opts.access_mode = strdup(optarg); break;
|
||||
case 'd': opts.debug_level = atoi(optarg); break;
|
||||
case 'T': opts.no_tracks = 1; break;
|
||||
case 'A': opts.no_analysis = 1; break;
|
||||
case 'P': cddb_opts.port = atoi(optarg); break;
|
||||
case 'H': cddb_opts.http = 1; break;
|
||||
case OP_CDDB_SERVER: cddb_opts.server = strdup(optarg); break;
|
||||
case OP_CDDB_CACHE: cddb_opts.cachedir = strdup(optarg); break;
|
||||
case OP_CDDB_EMAIL: cddb_opts.email = strdup(optarg); break;
|
||||
case OP_CDDB_NOCACHE: cddb_opts.disable_cache = 1; break;
|
||||
case OP_CDDB_TIMEOUT: cddb_opts.timeout = atoi(optarg); break;
|
||||
case 'v': opts.no_vcd = 1; break;
|
||||
case 'I': opts.no_ioctl = 1; break;
|
||||
case 'b': parse_source(OP_SOURCE_BIN); break;
|
||||
case 'c': parse_source(OP_SOURCE_CUE); break;
|
||||
case 'N': parse_source(OP_SOURCE_NRG); break;
|
||||
case 't': parse_source(OP_SOURCE_CDRDAO); break;
|
||||
case 'i': parse_source(OP_SOURCE_AUTO); break;
|
||||
case 'C': parse_source(OP_SOURCE_DEVICE); break;
|
||||
case 'l': opts.list_drives = 1; break;
|
||||
case 'q': opts.silent = 1; break;
|
||||
case 'V': opts.version_only = 1; break;
|
||||
|
||||
/* For all input sources which are not a DEVICE, we need to make
|
||||
a copy of the string; for a DEVICE the fill-out routine makes
|
||||
the copy.
|
||||
*/
|
||||
if (OP_SOURCE_DEVICE != opt)
|
||||
source_name = strdup(psz_my_source);
|
||||
|
||||
switch (opt) {
|
||||
case OP_SOURCE_BIN:
|
||||
opts.source_image = INPUT_BIN;
|
||||
break;
|
||||
case OP_SOURCE_CUE:
|
||||
opts.source_image = INPUT_CUE;
|
||||
break;
|
||||
case OP_SOURCE_CDRDAO:
|
||||
opts.source_image = INPUT_CDRDAO;
|
||||
break;
|
||||
case OP_SOURCE_NRG:
|
||||
opts.source_image = INPUT_NRG;
|
||||
break;
|
||||
case OP_SOURCE_AUTO:
|
||||
opts.source_image = INPUT_AUTO;
|
||||
break;
|
||||
case OP_SOURCE_DEVICE:
|
||||
opts.source_image = INPUT_DEVICE;
|
||||
source_name = fillout_device_name(source_name);
|
||||
break;
|
||||
}
|
||||
case '?':
|
||||
fprintf(stderr, helpText, program_name);
|
||||
free(program_name);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case OP_USAGE:
|
||||
fprintf(stderr, usageText, program_name);
|
||||
free(program_name);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case OP_HANDLED:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (opt < -1) {
|
||||
/* an error occurred during option processing */
|
||||
report(stderr, "%s: %s\n",
|
||||
poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
|
||||
poptStrerror(opt));
|
||||
|
||||
if (optind < argc) {
|
||||
const char *remaining_arg = argv[optind++];
|
||||
|
||||
/* NOTE: A bug in the libpopt version checked source_image, which
|
||||
rendered the subsequent source_image test useless.
|
||||
*/
|
||||
if (source_name != NULL) {
|
||||
report(stderr, "%s: Source '%s' given as an argument of an option and as "
|
||||
"unnamed option '%s'\n",
|
||||
program_name, source_name, remaining_arg);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (opts.source_image == INPUT_DEVICE)
|
||||
source_name = fillout_device_name(remaining_arg);
|
||||
else
|
||||
source_name = strdup(remaining_arg);
|
||||
|
||||
if (optind < argc) {
|
||||
report(stderr, "%s: Source specified in previously %s and %s\n",
|
||||
program_name, source_name, remaining_arg);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
if (NULL == source_name) {
|
||||
report(stderr, "%s: No source specified.\n", program_name);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
{
|
||||
const char *remaining_arg = poptGetArg(optCon);
|
||||
if ( remaining_arg != NULL) {
|
||||
if (opts.source_image != INPUT_UNKNOWN) {
|
||||
report(stderr, "%s: Source '%s' given as an argument of an option and as "
|
||||
"unnamed option '%s'\n",
|
||||
program_name, psz_my_source, remaining_arg);
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (opts.source_image == INPUT_DEVICE)
|
||||
source_name = fillout_device_name(remaining_arg);
|
||||
else
|
||||
source_name = strdup(remaining_arg);
|
||||
|
||||
if ( (poptGetArgs(optCon)) != NULL) {
|
||||
report(stderr, "%s: Source specified in previously %s and %s\n",
|
||||
program_name, psz_my_source, remaining_arg);
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
poptFreeContext(optCon);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/* CDIO logging routines */
|
||||
|
||||
#ifdef HAVE_CDDB
|
||||
@@ -764,7 +802,7 @@ init(void)
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
int
|
||||
main(int argc, const char *argv[])
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
|
||||
CdIo_t *p_cdio=NULL;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $Id: Makefile.am,v 1.15 2005/09/17 01:33:29 rocky Exp $
|
||||
# $Id: Makefile.am,v 1.16 2005/10/05 09:48:12 rocky Exp $
|
||||
#
|
||||
# Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||
# Copyright (C) 1998 Monty xiphmont@mit.edu
|
||||
@@ -19,17 +19,11 @@
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
if HAVE_GETOPT_LONG
|
||||
else
|
||||
getopt_sources = getopt.c getopt1.c
|
||||
endif
|
||||
|
||||
EXTRA_DIST = getopt.c getopt1.c \
|
||||
usage.txt.in usage-copy.h pod2c.pl \
|
||||
EXTRA_DIST = usage.txt.in usage-copy.h pod2c.pl \
|
||||
doc/FAQ.txt doc/overlapdef.txt
|
||||
|
||||
|
||||
noinst_HEADERS = getopt.h header.h report.h
|
||||
noinst_HEADERS = header.h report.h
|
||||
|
||||
transform = s,cd-paranoia,@CDPARANOIA_NAME@,
|
||||
|
||||
|
||||
@@ -76,7 +76,14 @@
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
|
||||
/* FreeBSD 4 has getopt in unistd.h. So we include that before
|
||||
getopt.h */
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#ifdef HAVE_GETOPT_H
|
||||
#include <getopt.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ERRNO_H
|
||||
#include <errno.h>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,133 +0,0 @@
|
||||
/* Declarations for getopt.
|
||||
Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc.
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@gnu.org.
|
||||
|
||||
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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
|
||||
#ifndef _GETOPT_H
|
||||
#define _GETOPT_H 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* For communication from `getopt' to the caller.
|
||||
When `getopt' finds an option that takes an argument,
|
||||
the argument value is returned here.
|
||||
Also, when `ordering' is RETURN_IN_ORDER,
|
||||
each non-option ARGV-element is returned here. */
|
||||
|
||||
extern char *optarg;
|
||||
|
||||
/* Index in ARGV of the next element to be scanned.
|
||||
This is used for communication to and from the caller
|
||||
and for communication between successive calls to `getopt'.
|
||||
|
||||
On entry to `getopt', zero means this is the first call; initialize.
|
||||
|
||||
When `getopt' returns -1, this is the index of the first of the
|
||||
non-option elements that the caller should itself scan.
|
||||
|
||||
Otherwise, `optind' communicates from one call to the next
|
||||
how much of ARGV has been scanned so far. */
|
||||
|
||||
extern int optind;
|
||||
|
||||
/* Callers store zero here to inhibit the error message `getopt' prints
|
||||
for unrecognized options. */
|
||||
|
||||
extern int opterr;
|
||||
|
||||
/* Set to an option character which was unrecognized. */
|
||||
|
||||
extern int optopt;
|
||||
|
||||
/* Describe the long-named options requested by the application.
|
||||
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
|
||||
of `struct option' terminated by an element containing a name which is
|
||||
zero.
|
||||
|
||||
The field `has_arg' is:
|
||||
no_argument (or 0) if the option does not take an argument,
|
||||
required_argument (or 1) if the option requires an argument,
|
||||
optional_argument (or 2) if the option takes an optional argument.
|
||||
|
||||
If the field `flag' is not NULL, it points to a variable that is set
|
||||
to the value given in the field `val' when the option is found, but
|
||||
left unchanged if the option is not found.
|
||||
|
||||
To have a long-named option do something other than set an `int' to
|
||||
a compiled-in constant, such as set a value from `optarg', set the
|
||||
option's `flag' field to zero and its `val' field to a nonzero
|
||||
value (the equivalent single-letter option character, if there is
|
||||
one). For long options that have a zero `flag' field, `getopt'
|
||||
returns the contents of the `val' field. */
|
||||
|
||||
struct option
|
||||
{
|
||||
#if defined (__STDC__) && __STDC__
|
||||
const char *name;
|
||||
#else
|
||||
char *name;
|
||||
#endif
|
||||
/* has_arg can't be an enum because some compilers complain about
|
||||
type mismatches in all the code that assumes it is an int. */
|
||||
int has_arg;
|
||||
int *flag;
|
||||
int val;
|
||||
};
|
||||
|
||||
/* Names for the values of the `has_arg' field of `struct option'. */
|
||||
|
||||
#define no_argument 0
|
||||
#define required_argument 1
|
||||
#define optional_argument 2
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#ifdef __GNU_LIBRARY__
|
||||
/* Many other libraries have conflicting prototypes for getopt, with
|
||||
differences in the consts, in stdlib.h. To avoid compilation
|
||||
errors, only prototype getopt for the GNU C library. */
|
||||
extern int getopt (int argc, char *const *argv, const char *shortopts);
|
||||
#else /* not __GNU_LIBRARY__ */
|
||||
extern int getopt ();
|
||||
#endif /* __GNU_LIBRARY__ */
|
||||
extern int getopt_long (int argc, char *const *argv, const char *shortopts,
|
||||
const struct option *longopts, int *longind);
|
||||
extern int getopt_long_only (int argc, char *const *argv,
|
||||
const char *shortopts,
|
||||
const struct option *longopts, int *longind);
|
||||
|
||||
/* Internal only. Users should not call this directly. */
|
||||
extern int _getopt_internal (int argc, char *const *argv,
|
||||
const char *shortopts,
|
||||
const struct option *longopts, int *longind,
|
||||
int long_only);
|
||||
#else /* not __STDC__ */
|
||||
extern int getopt ();
|
||||
extern int getopt_long ();
|
||||
extern int getopt_long_only ();
|
||||
|
||||
extern int _getopt_internal ();
|
||||
#endif /* __STDC__ */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* getopt.h */
|
||||
@@ -1,190 +0,0 @@
|
||||
/* getopt_long and getopt_long_only entry points for GNU getopt.
|
||||
Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@gnu.org.
|
||||
|
||||
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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include "getopt.h"
|
||||
|
||||
#if !defined __STDC__ || !__STDC__
|
||||
/* This is a separate conditional since some stdc systems
|
||||
reject `defined (const)'. */
|
||||
#ifndef const
|
||||
#define const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
/* Comment out all this code if we are using the GNU C Library, and are not
|
||||
actually compiling the library itself. This code is part of the GNU C
|
||||
Library, but also included in many other GNU distributions. Compiling
|
||||
and linking in this code is a waste when using the GNU C library
|
||||
(especially if it is a shared library). Rather than having every GNU
|
||||
program understand `configure --with-gnu-libc' and omit the object files,
|
||||
it is simpler to just do this in the source for each such file. */
|
||||
|
||||
#define GETOPT_INTERFACE_VERSION 2
|
||||
#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
|
||||
#include <gnu-versions.h>
|
||||
#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
|
||||
#define ELIDE_CODE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef ELIDE_CODE
|
||||
|
||||
|
||||
/* This needs to come after some library #include
|
||||
to get __GNU_LIBRARY__ defined. */
|
||||
#ifdef __GNU_LIBRARY__
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
int
|
||||
getopt_long (argc, argv, options, long_options, opt_index)
|
||||
int argc;
|
||||
char *const *argv;
|
||||
const char *options;
|
||||
const struct option *long_options;
|
||||
int *opt_index;
|
||||
{
|
||||
return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
|
||||
}
|
||||
|
||||
/* Like getopt_long, but '-' as well as '--' can indicate a long option.
|
||||
If an option that starts with '-' (not '--') doesn't match a long option,
|
||||
but does match a short option, it is parsed as a short option
|
||||
instead. */
|
||||
|
||||
int
|
||||
getopt_long_only (argc, argv, options, long_options, opt_index)
|
||||
int argc;
|
||||
char *const *argv;
|
||||
const char *options;
|
||||
const struct option *long_options;
|
||||
int *opt_index;
|
||||
{
|
||||
return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
|
||||
}
|
||||
|
||||
|
||||
#endif /* Not ELIDE_CODE. */
|
||||
|
||||
#ifdef TEST
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
main (argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
int c;
|
||||
int digit_optind = 0;
|
||||
|
||||
while (1)
|
||||
{
|
||||
int this_option_optind = optind ? optind : 1;
|
||||
int option_index = 0;
|
||||
static struct option long_options[] =
|
||||
{
|
||||
{"add", 1, 0, 0},
|
||||
{"append", 0, 0, 0},
|
||||
{"delete", 1, 0, 0},
|
||||
{"verbose", 0, 0, 0},
|
||||
{"create", 0, 0, 0},
|
||||
{"file", 1, 0, 0},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
c = getopt_long (argc, argv, "abc:d:0123456789",
|
||||
long_options, &option_index);
|
||||
if (c == -1)
|
||||
break;
|
||||
|
||||
switch (c)
|
||||
{
|
||||
case 0:
|
||||
printf ("option %s", long_options[option_index].name);
|
||||
if (optarg)
|
||||
printf (" with arg %s", optarg);
|
||||
printf ("\n");
|
||||
break;
|
||||
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
if (digit_optind != 0 && digit_optind != this_option_optind)
|
||||
printf ("digits occur in two different argv-elements.\n");
|
||||
digit_optind = this_option_optind;
|
||||
printf ("option %c\n", c);
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
printf ("option a\n");
|
||||
break;
|
||||
|
||||
case 'b':
|
||||
printf ("option b\n");
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
printf ("option c with value `%s'\n", optarg);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
printf ("option d with value `%s'\n", optarg);
|
||||
break;
|
||||
|
||||
case '?':
|
||||
break;
|
||||
|
||||
default:
|
||||
printf ("?? getopt returned character code 0%o ??\n", c);
|
||||
}
|
||||
}
|
||||
|
||||
if (optind < argc)
|
||||
{
|
||||
printf ("non-option ARGV-elements: ");
|
||||
while (optind < argc)
|
||||
printf ("%s ", argv[optind++]);
|
||||
printf ("\n");
|
||||
}
|
||||
|
||||
exit (0);
|
||||
}
|
||||
|
||||
#endif /* TEST */
|
||||
336
src/cd-read.c
336
src/cd-read.c
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
$Id: cd-read.c,v 1.25 2005/09/18 20:34:02 rocky Exp $
|
||||
$Id: cd-read.c,v 1.26 2005/10/05 09:48:12 rocky Exp $
|
||||
|
||||
Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||
|
||||
@@ -34,15 +34,19 @@
|
||||
|
||||
/* Configuration option codes */
|
||||
enum {
|
||||
OP_HANDLED = 0,
|
||||
|
||||
/* These correspond to driver_id_t in cdio.h and have to MATCH! */
|
||||
OP_SOURCE_UNDEF = DRIVER_UNKNOWN,
|
||||
/* NOTE: libpopt version associated these with drivers. That
|
||||
appeared to be an unused historical artifact.
|
||||
*/
|
||||
OP_SOURCE_AUTO,
|
||||
OP_SOURCE_BIN,
|
||||
OP_SOURCE_CUE,
|
||||
OP_SOURCE_NRG = DRIVER_NRG,
|
||||
OP_SOURCE_CDRDAO = DRIVER_CDRDAO,
|
||||
OP_SOURCE_DEVICE = DRIVER_DEVICE,
|
||||
OP_SOURCE_NRG,
|
||||
OP_SOURCE_CDRDAO,
|
||||
OP_SOURCE_DEVICE,
|
||||
|
||||
OP_USAGE,
|
||||
|
||||
/* These are the remaining configuration options */
|
||||
OP_READ_MODE,
|
||||
@@ -173,173 +177,198 @@ process_suboption(const char *subopt, subopt_entry_t *sublist, const int num,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Parse source options. */
|
||||
static void
|
||||
parse_source(int opt)
|
||||
{
|
||||
/* NOTE: The libpopt version made use of an extra temporary
|
||||
variable (psz_my_source) for all sources _except_ devices.
|
||||
This distinction seemed to serve no purpose.
|
||||
*/
|
||||
/* NOTE: The libpopt version had a bug which kept it from
|
||||
processing toc-file inputs
|
||||
*/
|
||||
|
||||
if (opts.source_image != INPUT_UNKNOWN) {
|
||||
report( stderr, "%s: another source type option given before.\n",
|
||||
program_name );
|
||||
report( stderr, "%s: give only one source type option.\n",
|
||||
program_name );
|
||||
return;
|
||||
}
|
||||
|
||||
/* For all input sources which are not a DEVICE, we need to make
|
||||
a copy of the string; for a DEVICE the fill-out routine makes
|
||||
the copy.
|
||||
*/
|
||||
if (OP_SOURCE_DEVICE != opt)
|
||||
if (optarg != NULL) source_name = strdup(optarg);
|
||||
|
||||
switch (opt) {
|
||||
case OP_SOURCE_BIN:
|
||||
opts.source_image = INPUT_BIN;
|
||||
break;
|
||||
case OP_SOURCE_CUE:
|
||||
opts.source_image = INPUT_CUE;
|
||||
break;
|
||||
case OP_SOURCE_NRG:
|
||||
opts.source_image = INPUT_NRG;
|
||||
break;
|
||||
case OP_SOURCE_AUTO:
|
||||
opts.source_image = INPUT_AUTO;
|
||||
break;
|
||||
case OP_SOURCE_DEVICE:
|
||||
opts.source_image = INPUT_DEVICE;
|
||||
if (optarg != NULL) source_name = fillout_device_name(optarg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Parse a options. */
|
||||
static bool
|
||||
parse_options (int argc, const char *argv[])
|
||||
parse_options (int argc, char *argv[])
|
||||
{
|
||||
|
||||
int opt;
|
||||
char *psz_my_source;
|
||||
char *opt_arg;
|
||||
|
||||
/* Command-line options */
|
||||
struct poptOption optionsTable[] = {
|
||||
const char* helpText =
|
||||
"Usage: %s [OPTION...]\n"
|
||||
" -a, --access-mode=STRING Set CD control access mode\n"
|
||||
" -m, --mode=MODE-TYPE set CD-ROM read mode (audio, m1f1, m1f2,\n"
|
||||
" m2mf1, m2f2)\n"
|
||||
" -d, --debug=INT Set debugging to LEVEL\n"
|
||||
" -x, --hexdump Show output as a hex dump. The default is a\n"
|
||||
" hex dump when output goes to stdout and no\n"
|
||||
" hex dump when output is to a file.\n"
|
||||
" --no-header Don't display header and copyright (for\n"
|
||||
" regression testing)\n"
|
||||
" --no-hexdump Don't show output as a hex dump.\n"
|
||||
" -s, --start=INT Set LBA to start reading from\n"
|
||||
" -e, --end=INT Set LBA to end reading from\n"
|
||||
" -n, --number=INT Set number of sectors to read\n"
|
||||
" -b, --bin-file[=FILE] set \"bin\" CD-ROM disk image file as source\n"
|
||||
" -c, --cue-file[=FILE] set \"cue\" CD-ROM disk image file as source\n"
|
||||
" -i, --input[=FILE] set source and determine if \"bin\" image or\n"
|
||||
" device\n"
|
||||
" -C, --cdrom-device[=DEVICE] set CD-ROM device as source\n"
|
||||
" -N, --nrg-file[=FILE] set Nero CD-ROM disk image file as source\n"
|
||||
" -t, --toc-file[=FILE] set \"TOC\" CD-ROM disk image file as source\n"
|
||||
" -o, --output-file=FILE Output blocks to file rather than give a\n"
|
||||
" hexdump.\n"
|
||||
" -V, --version display version and copyright information\n"
|
||||
" and exit\n"
|
||||
"\n"
|
||||
"Help options:\n"
|
||||
" -?, --help Show this help message\n"
|
||||
" --usage Display brief usage message\n";
|
||||
|
||||
{"access-mode", 'a', POPT_ARG_STRING, &opts.access_mode, 0,
|
||||
"Set CD control access mode"},
|
||||
|
||||
{"mode", 'm',
|
||||
POPT_ARG_STRING, &opt_arg,
|
||||
OP_READ_MODE,
|
||||
"set CD-ROM read mode (audio, m1f1, m1f2, m2mf1, m2f2)",
|
||||
"MODE-TYPE"},
|
||||
|
||||
{"debug", 'd',
|
||||
POPT_ARG_INT, &opts.debug_level, 0,
|
||||
"Set debugging to LEVEL"},
|
||||
|
||||
{"hexdump", 'x', POPT_ARG_NONE, &opts.hexdump, 0,
|
||||
"Show output as a hex dump. The default is a hex dump when "
|
||||
"output goes to stdout and no hex dump when output is to a file."},
|
||||
|
||||
{"no-header", '\0', POPT_ARG_NONE, &opts.no_header,
|
||||
0, "Don't display header and copyright (for regression testing)"},
|
||||
|
||||
{"no-hexdump", '\0', POPT_ARG_NONE, &opts.nohexdump, 0,
|
||||
"Don't show output as a hex dump."},
|
||||
|
||||
{"start", 's',
|
||||
POPT_ARG_INT, &opts.start_lsn, 0,
|
||||
"Set LBA to start reading from"},
|
||||
|
||||
{"end", 'e',
|
||||
POPT_ARG_INT, &opts.end_lsn, 0,
|
||||
"Set LBA to end reading from"},
|
||||
|
||||
{"number", 'n',
|
||||
POPT_ARG_INT, &opts.num_sectors, 0,
|
||||
"Set number of sectors to read"},
|
||||
|
||||
{"bin-file", 'b', POPT_ARG_STRING|POPT_ARGFLAG_OPTIONAL, &psz_my_source,
|
||||
OP_SOURCE_BIN, "set \"bin\" CD-ROM disk image file as source", "FILE"},
|
||||
|
||||
{"cue-file", 'c', POPT_ARG_STRING|POPT_ARGFLAG_OPTIONAL, &psz_my_source,
|
||||
OP_SOURCE_CUE, "set \"cue\" CD-ROM disk image file as source", "FILE"},
|
||||
|
||||
{"input", 'i', POPT_ARG_STRING|POPT_ARGFLAG_OPTIONAL, &psz_my_source,
|
||||
OP_SOURCE_AUTO,
|
||||
"set source and determine if \"bin\" image or device", "FILE"},
|
||||
|
||||
{"cdrom-device", 'C', POPT_ARG_STRING|POPT_ARGFLAG_OPTIONAL, &source_name,
|
||||
OP_SOURCE_DEVICE,
|
||||
"set CD-ROM device as source", "DEVICE"},
|
||||
|
||||
{"nrg-file", 'N', POPT_ARG_STRING|POPT_ARGFLAG_OPTIONAL, &psz_my_source,
|
||||
OP_SOURCE_NRG, "set Nero CD-ROM disk image file as source", "FILE"},
|
||||
|
||||
{"toc-file", 't', POPT_ARG_STRING|POPT_ARGFLAG_OPTIONAL, &psz_my_source,
|
||||
OP_SOURCE_CDRDAO, "set \"TOC\" CD-ROM disk image file as source", "FILE"},
|
||||
|
||||
{"output-file", 'o', POPT_ARG_STRING, &opts.output_file, 0,
|
||||
"Output blocks to file rather than give a hexdump.", "FILE"},
|
||||
|
||||
{"version", 'V', POPT_ARG_NONE, NULL, OP_VERSION,
|
||||
"display version and copyright information and exit"},
|
||||
POPT_AUTOHELP {NULL, 0, 0, NULL, 0}
|
||||
const char* usageText =
|
||||
"Usage: %s [-a|--access-mode STRING] [-m|--mode MODE-TYPE]\n"
|
||||
" [-d|--debug INT] [-x|--hexdump] [--no-header] [--no-hexdump]\n"
|
||||
" [-s|--start INT] [-e|--end INT] [-n|--number INT] [-b|--bin-file FILE]\n"
|
||||
" [-c|--cue-file FILE] [-i|--input FILE] [-C|--cdrom-device DEVICE]\n"
|
||||
" [-N|--nrg-file FILE] [-t|--toc-file FILE] [-o|--output-file FILE]\n"
|
||||
" [-V|--version] [-?|--help] [--usage]\n";
|
||||
|
||||
/* Command-line options */
|
||||
const char* optionsString = "a:m:d:xs:e:n:b::c::i::C::N::t::o:V?";
|
||||
struct option optionsTable[] = {
|
||||
|
||||
{"access-mode", required_argument, NULL, 'a'},
|
||||
{"mode", required_argument, NULL, 'm'},
|
||||
{"debug", required_argument, NULL, 'd'},
|
||||
{"hexdump", no_argument, NULL, 'x'},
|
||||
{"no-header", no_argument, &opts.no_header, 1},
|
||||
{"no-hexdump", no_argument, &opts.nohexdump, 1},
|
||||
{"start", required_argument, NULL, 's'},
|
||||
{"end", required_argument, NULL, 'e'},
|
||||
{"number", required_argument, NULL, 'n'},
|
||||
{"bin-file", optional_argument, NULL, 'b'},
|
||||
{"cue-file", optional_argument, NULL, 'c'},
|
||||
{"input", optional_argument, NULL, 'i'},
|
||||
{"cdrom-device", optional_argument, NULL, 'C'},
|
||||
{"nrg-file", optional_argument, NULL, 'N'},
|
||||
{"toc-file", optional_argument, NULL, 't'},
|
||||
{"output-file", required_argument, NULL, 'o'},
|
||||
{"version", no_argument, NULL, 'V'},
|
||||
|
||||
{"help", no_argument, NULL, '?' },
|
||||
{"usage", no_argument, NULL, OP_USAGE },
|
||||
{ NULL, 0, NULL, 0 }
|
||||
};
|
||||
poptContext optCon = poptGetContext (NULL, argc, argv, optionsTable, 0);
|
||||
|
||||
program_name = strrchr(argv[0],'/');
|
||||
program_name = program_name ? strdup(program_name+1) : strdup(argv[0]);
|
||||
|
||||
while ((opt = poptGetNextOpt (optCon)) >= 0)
|
||||
while ((opt = getopt_long(argc, argv, optionsString, optionsTable, NULL)) >= 0)
|
||||
switch (opt)
|
||||
{
|
||||
case OP_SOURCE_AUTO:
|
||||
case OP_SOURCE_BIN:
|
||||
case OP_SOURCE_CUE:
|
||||
case OP_SOURCE_NRG:
|
||||
case OP_SOURCE_DEVICE:
|
||||
if (opts.source_image != INPUT_UNKNOWN) {
|
||||
report( stderr, "%s: another source type option given before.\n",
|
||||
program_name );
|
||||
report( stderr, "%s: give only one source type option.\n",
|
||||
program_name );
|
||||
break;
|
||||
}
|
||||
|
||||
/* For all input sources which are not a DEVICE, we need to make
|
||||
a copy of the string; for a DEVICE the fill-out routine makes
|
||||
the copy.
|
||||
*/
|
||||
if (OP_SOURCE_DEVICE != opt)
|
||||
source_name = strdup(psz_my_source);
|
||||
|
||||
switch (opt) {
|
||||
case OP_SOURCE_BIN:
|
||||
opts.source_image = INPUT_BIN;
|
||||
break;
|
||||
case OP_SOURCE_CUE:
|
||||
opts.source_image = INPUT_CUE;
|
||||
break;
|
||||
case OP_SOURCE_NRG:
|
||||
opts.source_image = INPUT_NRG;
|
||||
break;
|
||||
case OP_SOURCE_AUTO:
|
||||
opts.source_image = INPUT_AUTO;
|
||||
break;
|
||||
case OP_SOURCE_DEVICE:
|
||||
opts.source_image = INPUT_DEVICE;
|
||||
source_name = fillout_device_name(source_name);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case OP_READ_MODE:
|
||||
process_suboption(opt_arg, modes_sublist,
|
||||
case 'a': opts.access_mode = strdup(optarg); break;
|
||||
case 'd': opts.debug_level = atoi(optarg); break;
|
||||
case 'x': opts.hexdump = 1; break;
|
||||
case 's': opts.start_lsn = atoi(optarg); break;
|
||||
case 'e': opts.end_lsn = atoi(optarg); break;
|
||||
case 'n': opts.num_sectors = atoi(optarg); break;
|
||||
case 'b': parse_source(OP_SOURCE_BIN); break;
|
||||
case 'c': parse_source(OP_SOURCE_CUE); break;
|
||||
case 'i': parse_source(OP_SOURCE_AUTO); break;
|
||||
case 'C': parse_source(OP_SOURCE_DEVICE); break;
|
||||
case 'N': parse_source(OP_SOURCE_NRG); break;
|
||||
case 't': parse_source(OP_SOURCE_CDRDAO); break;
|
||||
case 'o': opts.output_file = strdup(optarg); break;
|
||||
|
||||
case 'm':
|
||||
process_suboption(optarg, modes_sublist,
|
||||
sizeof(modes_sublist) / sizeof(subopt_entry_t),
|
||||
"--mode");
|
||||
break;
|
||||
case OP_VERSION:
|
||||
|
||||
case 'V':
|
||||
print_version(program_name, VERSION, 0, true);
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit (EXIT_SUCCESS);
|
||||
break;
|
||||
|
||||
case '?':
|
||||
fprintf(stderr, helpText, program_name);
|
||||
free(program_name);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case OP_USAGE:
|
||||
fprintf(stderr, usageText, program_name);
|
||||
free(program_name);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case OP_HANDLED:
|
||||
break;
|
||||
}
|
||||
|
||||
if (opt < -1) {
|
||||
report( stderr, "%s: %s\n",
|
||||
poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
|
||||
poptStrerror(opt) );
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
{
|
||||
const char *remaining_arg = poptGetArg(optCon);
|
||||
if ( remaining_arg != NULL) {
|
||||
if (opts.source_image != INPUT_UNKNOWN) {
|
||||
report( stderr, "%s: Source specified in option %s and as %s\n",
|
||||
program_name, source_name, remaining_arg );
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
if (optind < argc) {
|
||||
const char *remaining_arg = argv[optind++];
|
||||
|
||||
/* NOTE: A bug in the libpopt version checked source_image, which
|
||||
rendered the subsequent source_image test useless.
|
||||
*/
|
||||
if (source_name != NULL) {
|
||||
report( stderr, "%s: Source specified in option %s and as %s\n",
|
||||
program_name, source_name, remaining_arg );
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (opts.source_image == INPUT_DEVICE)
|
||||
source_name = fillout_device_name(remaining_arg);
|
||||
else
|
||||
source_name = strdup(remaining_arg);
|
||||
|
||||
if (opts.source_image == OP_SOURCE_DEVICE)
|
||||
source_name = fillout_device_name(remaining_arg);
|
||||
else
|
||||
source_name = strdup(remaining_arg);
|
||||
|
||||
if ( (poptGetArgs(optCon)) != NULL) {
|
||||
report( stderr, "%s: Source specified in previously %s and %s\n",
|
||||
program_name, source_name, remaining_arg );
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
|
||||
}
|
||||
if (optind < argc) {
|
||||
report( stderr, "%s: Source specified in previously %s and %s\n",
|
||||
program_name, source_name, remaining_arg );
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -354,7 +383,6 @@ parse_options (int argc, const char *argv[])
|
||||
"%s: Need to give a read mode "
|
||||
"(audio, m1f1, m1f2, m2f1 or m2f2)\n",
|
||||
program_name );
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit(10);
|
||||
}
|
||||
@@ -382,7 +410,6 @@ parse_options (int argc, const char *argv[])
|
||||
" the sector to read (%lu)\n",
|
||||
program_name, (unsigned long) opts.end_lsn,
|
||||
(unsigned long) opts.num_sectors );
|
||||
poptFreeContext(optCon);
|
||||
exit(12);
|
||||
}
|
||||
opts.start_lsn = opts.end_lsn - opts.num_sectors + 1;
|
||||
@@ -401,7 +428,6 @@ parse_options (int argc, const char *argv[])
|
||||
"%s: end LSN (%lu) needs to be less than start LSN (%lu)\n",
|
||||
program_name, (unsigned long) opts.start_lsn,
|
||||
(unsigned long) opts.end_lsn );
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit(13);
|
||||
}
|
||||
@@ -412,14 +438,12 @@ parse_options (int argc, const char *argv[])
|
||||
"and count (%d)\n",
|
||||
program_name, (unsigned long) opts.start_lsn,
|
||||
(unsigned long) opts.end_lsn, opts.num_sectors );
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit(14);
|
||||
}
|
||||
opts.num_sectors = opts.end_lsn - opts.start_lsn + 1;
|
||||
}
|
||||
|
||||
poptFreeContext(optCon);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -454,7 +478,7 @@ init(void)
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, const char *argv[])
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
uint8_t buffer[CDIO_CD_FRAMESIZE_RAW] = { 0, };
|
||||
unsigned int blocklen=CDIO_CD_FRAMESIZE_RAW;
|
||||
|
||||
136
src/iso-info.c
136
src/iso-info.c
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
$Id: iso-info.c,v 1.30 2005/03/18 12:56:00 rocky Exp $
|
||||
$Id: iso-info.c,v 1.31 2005/10/05 09:48:12 rocky Exp $
|
||||
|
||||
Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#include <getopt.h>
|
||||
|
||||
#if 0
|
||||
#define STRONG "\033[1m"
|
||||
@@ -73,7 +74,10 @@ struct arguments
|
||||
|
||||
/* Configuration option codes */
|
||||
enum {
|
||||
|
||||
OP_HANDLED = 0,
|
||||
|
||||
OP_USAGE,
|
||||
|
||||
/* These are the remaining configuration options */
|
||||
OP_VERSION,
|
||||
|
||||
@@ -84,75 +88,95 @@ char *temp_str;
|
||||
|
||||
/* Parse a all options. */
|
||||
static bool
|
||||
parse_options (int argc, const char *argv[])
|
||||
parse_options (int argc, char *argv[])
|
||||
{
|
||||
int opt;
|
||||
|
||||
struct poptOption optionsTable[] = {
|
||||
{"debug", 'd', POPT_ARG_INT, &opts.debug_level, 0,
|
||||
"Set debugging to LEVEL"},
|
||||
|
||||
{"input", 'i', POPT_ARG_STRING|POPT_ARGFLAG_OPTIONAL, &source_name, 0,
|
||||
"Filename to read ISO-9960 image from", "FILE"},
|
||||
|
||||
{'\0', 'f', POPT_ARG_NONE, &opts.print_iso9660_short, 0,
|
||||
"Generate output similar to 'find . -print'"},
|
||||
|
||||
{"iso9660", 'l', POPT_ARG_NONE, &opts.print_iso9660, 0,
|
||||
"Generate output similar to 'ls -lR'"},
|
||||
|
||||
{"no-header", '\0', POPT_ARG_NONE, &opts.no_header,
|
||||
0, "Don't display header and copyright (for regression testing)"},
|
||||
|
||||
const char* helpText =
|
||||
"Usage: %s [OPTION...]\n"
|
||||
" -d, --debug=INT Set debugging to LEVEL\n"
|
||||
" -i, --input[=FILE] Filename to read ISO-9960 image from\n"
|
||||
" -f Generate output similar to 'find . -print'\n"
|
||||
" -l, --iso9660 Generate output similar to 'ls -lR'\n"
|
||||
" --no-header Don't display header and copyright (for regression\n"
|
||||
" testing)\n"
|
||||
#ifdef HAVE_JOLIET
|
||||
{"no-joliet", '\0', POPT_ARG_NONE, &opts.no_joliet,
|
||||
0, "Don't use Joliet-extension information"},
|
||||
" --no-joliet Don't use Joliet-extension information\n"
|
||||
#endif /*HAVE_JOLIET*/
|
||||
|
||||
{"no-rock-ridge", '\0', POPT_ARG_NONE, &opts.no_rock_ridge,
|
||||
0, "Don't use Rock-Ridge-extension information"},
|
||||
" --no-rock-ridge Don't use Rock-Ridge-extension information\n"
|
||||
" --no-xa Don't use XA-extension information\n"
|
||||
" -q, --quiet Don't produce warning output\n"
|
||||
" -V, --version display version and copyright information and exit\n"
|
||||
"\n"
|
||||
"Help options:\n"
|
||||
" -?, --help Show this help message\n"
|
||||
" --usage Display brief usage message\n";
|
||||
|
||||
{"no-xa", '\0', POPT_ARG_NONE, &opts.no_xa,
|
||||
0, "Don't use XA-extension information"},
|
||||
const char* usageText =
|
||||
"Usage: %s [-d|--debug INT] [-i|--input FILE] [-f] [-l|--iso9660]\n"
|
||||
" [--no-header] [--no-joliet] [--no-rock-ridge] [--no-xa] [-q|--quiet]\n"
|
||||
" [-V|--version] [-?|--help] [--usage]\n";
|
||||
|
||||
{"quiet", 'q', POPT_ARG_NONE, &opts.silent, 0,
|
||||
"Don't produce warning output" },
|
||||
|
||||
{"version", 'V', POPT_ARG_NONE, &opts.version_only, 0,
|
||||
"display version and copyright information and exit"},
|
||||
POPT_AUTOHELP {NULL, 0, 0, NULL, 0}
|
||||
const char* optionsString = "d:i::flqV?";
|
||||
struct option optionsTable[] = {
|
||||
{"debug", required_argument, NULL, 'd'},
|
||||
{"input", optional_argument, NULL, 'i'},
|
||||
{"iso9660", no_argument, NULL, 'l'},
|
||||
{"no-header", no_argument, &opts.no_header, 1 },
|
||||
#ifdef HAVE_JOLIET
|
||||
{"no-joliet", no_argument, &opts.no_joliet, 1 },
|
||||
#endif /*HAVE_JOLIET*/
|
||||
{"no-rock-ridge", no_argument, &opts.no_rock_ridge, 1 },
|
||||
{"no-xa", no_argument, &opts.no_xa, 1 },
|
||||
{"quiet", no_argument, NULL, 'q'},
|
||||
{"version", no_argument, NULL, 'V'},
|
||||
|
||||
{"help", no_argument, NULL, '?' },
|
||||
{"usage", no_argument, NULL, OP_USAGE },
|
||||
{ NULL, 0, NULL, 0 }
|
||||
};
|
||||
poptContext optCon = poptGetContext (NULL, argc, argv, optionsTable, 0);
|
||||
|
||||
program_name = strrchr(argv[0],'/');
|
||||
program_name = program_name ? strdup(program_name+1) : strdup(argv[0]);
|
||||
|
||||
while ((opt = poptGetNextOpt (optCon)) >= 0) {
|
||||
;
|
||||
}
|
||||
if (opt < -1) {
|
||||
/* an error occurred during option processing */
|
||||
report(stderr, "%s: %s\n",
|
||||
poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
|
||||
poptStrerror(opt));
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
{
|
||||
const char *remaining_arg = poptGetArg(optCon);
|
||||
if ( remaining_arg != NULL) {
|
||||
if ( (poptGetArgs(optCon)) != NULL) {
|
||||
report( stderr, "%s: Source specified in previously %s and %s\n",
|
||||
program_name, source_name, remaining_arg );
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
while ((opt = getopt_long(argc, argv, optionsString, optionsTable, NULL)) >= 0) {
|
||||
switch (opt)
|
||||
{
|
||||
case 'd': opts.debug_level = atoi(optarg); break;
|
||||
case 'i': if (optarg != NULL) source_name = strdup(optarg); break;
|
||||
case 'f': opts.print_iso9660_short = 1; break;
|
||||
case 'l': opts.print_iso9660 = 1; break;
|
||||
case 'q': opts.silent = 1; break;
|
||||
case 'V': opts.version_only = 1; break;
|
||||
|
||||
case '?':
|
||||
fprintf(stderr, helpText, program_name);
|
||||
free(program_name);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case OP_USAGE:
|
||||
fprintf(stderr, usageText, program_name);
|
||||
free(program_name);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case OP_HANDLED:
|
||||
break;
|
||||
}
|
||||
source_name = strdup(remaining_arg);
|
||||
}
|
||||
|
||||
if (optind < argc) {
|
||||
const char *remaining_arg = argv[optind++];
|
||||
if ( optind < argc ) {
|
||||
report( stderr, "%s: Source specified in previously %s and %s\n",
|
||||
program_name, source_name, remaining_arg );
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
source_name = strdup(remaining_arg);
|
||||
}
|
||||
|
||||
poptFreeContext(optCon);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -286,7 +310,7 @@ init(void)
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
int
|
||||
main(int argc, const char *argv[])
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
|
||||
iso9660_t *p_iso=NULL;
|
||||
|
||||
144
src/iso-read.c
144
src/iso-read.c
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
$Id: iso-read.c,v 1.9 2005/02/19 11:43:05 rocky Exp $
|
||||
$Id: iso-read.c,v 1.10 2005/10/05 09:48:12 rocky Exp $
|
||||
|
||||
Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||
|
||||
@@ -45,6 +45,8 @@
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#include <getopt.h>
|
||||
|
||||
/* Used by `main' to communicate with `parse_opt'. And global options
|
||||
*/
|
||||
struct arguments
|
||||
@@ -58,100 +60,112 @@ struct arguments
|
||||
|
||||
/* Parse a options. */
|
||||
static bool
|
||||
parse_options (int argc, const char *argv[])
|
||||
parse_options (int argc, char *argv[])
|
||||
{
|
||||
|
||||
int opt;
|
||||
|
||||
/* Configuration option codes */
|
||||
enum {
|
||||
OP_VERSION=1
|
||||
OP_HANDLED = 0,
|
||||
OP_VERSION=1,
|
||||
OP_USAGE
|
||||
};
|
||||
|
||||
const char* helpText =
|
||||
"Usage: %s [OPTION...]\n"
|
||||
" -d, --debug=INT Set debugging to LEVEL.\n"
|
||||
" -i, --image=FILE Read from ISO-9660 image. This option is mandatory\n"
|
||||
" -e, --extract=FILE Extract FILE from ISO-9660 image. This option is\n"
|
||||
" mandatory.\n"
|
||||
" --no-header Don't display header and copyright (for\n"
|
||||
" regression testing)\n"
|
||||
" -o, --output-file=FILE Output file. This option is mandatory.\n"
|
||||
" -V, --version display version and copyright information and exit\n"
|
||||
"\n"
|
||||
"Help options:\n"
|
||||
" -?, --help Show this help message\n"
|
||||
" --usage Display brief usage message\n";
|
||||
|
||||
/* Command-line options */
|
||||
struct poptOption optionsTable[] = {
|
||||
const char* usageText =
|
||||
"Usage: %s [-d|--debug INT] [-i|--image FILE] [-e|--extract FILE]\n"
|
||||
" [--no-header] [-o|--output-file FILE] [-V|--version] [-?|--help]\n"
|
||||
" [--usage]\n";
|
||||
|
||||
{"debug", 'd',
|
||||
POPT_ARG_INT, &opts.debug_level, 0,
|
||||
"Set debugging to LEVEL."},
|
||||
|
||||
{"image", 'i', POPT_ARG_STRING, &opts.iso9660_image, 0,
|
||||
"Read from ISO-9660 image. This option is mandatory",
|
||||
"FILE"},
|
||||
|
||||
{"extract", 'e', POPT_ARG_STRING, &opts.file_name, 0,
|
||||
"Extract FILE from ISO-9660 image. This option is mandatory.",
|
||||
"FILE"},
|
||||
|
||||
{"no-header", '\0', POPT_ARG_NONE, &opts.no_header,
|
||||
0, "Don't display header and copyright (for regression testing)"},
|
||||
/* Command-line options */
|
||||
const char* optionsString = "d:i:e:o:V?";
|
||||
struct option optionsTable[] = {
|
||||
{"debug", required_argument, NULL, 'd' },
|
||||
{"image", required_argument, NULL, 'i' },
|
||||
{"extract", required_argument, NULL, 'e' },
|
||||
{"no-header", no_argument, &opts.no_header, 1 },
|
||||
{"output-file", required_argument, NULL, 'o' },
|
||||
{"version", no_argument, NULL, 'V' },
|
||||
|
||||
{"output-file", 'o', POPT_ARG_STRING, &opts.output_file, 0,
|
||||
"Output file. This option is mandatory.", "FILE"},
|
||||
|
||||
{"version", 'V', POPT_ARG_NONE, NULL, OP_VERSION,
|
||||
"display version and copyright information and exit"},
|
||||
POPT_AUTOHELP {NULL, 0, 0, NULL, 0}
|
||||
{"help", no_argument, NULL, '?' },
|
||||
{"usage", no_argument, NULL, OP_USAGE },
|
||||
{ NULL, 0, NULL, 0 }
|
||||
};
|
||||
poptContext optCon = poptGetContext (NULL, argc, argv, optionsTable, 0);
|
||||
|
||||
program_name = strrchr(argv[0],'/');
|
||||
program_name = program_name ? strdup(program_name+1) : strdup(argv[0]);
|
||||
|
||||
while ((opt = poptGetNextOpt (optCon)) != -1)
|
||||
while ((opt = getopt_long(argc, argv, optionsString, optionsTable, NULL)) != -1)
|
||||
switch (opt)
|
||||
{
|
||||
case OP_VERSION:
|
||||
case 'd': opts.debug_level = atoi(optarg); break;
|
||||
case 'i': opts.iso9660_image = strdup(optarg); break;
|
||||
case 'e': opts.file_name = strdup(optarg); break;
|
||||
case 'o': opts.output_file = strdup(optarg); break;
|
||||
|
||||
case 'V':
|
||||
print_version(program_name, CDIO_VERSION, 0, true);
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit (EXIT_SUCCESS);
|
||||
break;
|
||||
|
||||
default:
|
||||
report( stderr, "%s: %s\n",
|
||||
poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
|
||||
poptStrerror(opt) );
|
||||
report( stderr, "Error while parsing command line - try --help.\n" );
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
case '?':
|
||||
fprintf(stderr, helpText, program_name);
|
||||
free(program_name);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case OP_USAGE:
|
||||
fprintf(stderr, usageText, program_name);
|
||||
free(program_name);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case OP_HANDLED:
|
||||
break;
|
||||
}
|
||||
|
||||
{
|
||||
const char *remaining_arg = poptGetArg(optCon);
|
||||
if ( remaining_arg != NULL) {
|
||||
if (opts.iso9660_image != NULL) {
|
||||
report( stderr, "%s: Source specified as --image %s and as %s\n",
|
||||
program_name, opts.iso9660_image, remaining_arg );
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
opts.iso9660_image = strdup(remaining_arg);
|
||||
|
||||
if ( (poptGetArgs(optCon)) != NULL) {
|
||||
report( stderr,
|
||||
"%s: use only one unnamed argument for the ISO 9660 "
|
||||
"image name\n",
|
||||
program_name );
|
||||
poptFreeContext(optCon);
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
|
||||
}
|
||||
if (optind < argc) {
|
||||
const char *remaining_arg = argv[optind++];
|
||||
if (opts.iso9660_image != NULL) {
|
||||
report( stderr, "%s: Source specified as --image %s and as %s\n",
|
||||
program_name, opts.iso9660_image, remaining_arg );
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
opts.iso9660_image = strdup(remaining_arg);
|
||||
|
||||
if (optind < argc ) {
|
||||
report( stderr,
|
||||
"%s: use only one unnamed argument for the ISO 9660 "
|
||||
"image name\n",
|
||||
program_name );
|
||||
free(program_name);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
poptFreeContext(optCon);
|
||||
|
||||
if (NULL == opts.iso9660_image) {
|
||||
report( stderr, "%s: you need to specify an ISO-9660 image name.\n",
|
||||
program_name );
|
||||
program_name );
|
||||
report( stderr, "%s: Use option --image or try --help.\n",
|
||||
program_name );
|
||||
program_name );
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
@@ -185,7 +199,7 @@ init(void)
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, const char *argv[])
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
iso9660_stat_t *statbuf;
|
||||
FILE *outfd;
|
||||
|
||||
13
src/util.h
13
src/util.h
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
$Id: util.h,v 1.12 2005/02/21 09:00:53 rocky Exp $
|
||||
$Id: util.h,v 1.13 2005/10/05 09:48:12 rocky Exp $
|
||||
|
||||
Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||
|
||||
@@ -44,10 +44,13 @@
|
||||
#include <stdarg.h>
|
||||
#endif
|
||||
|
||||
#include <popt.h>
|
||||
/* Accomodate to older popt that doesn't support the "optional" flag */
|
||||
#ifndef POPT_ARGFLAG_OPTIONAL
|
||||
#define POPT_ARGFLAG_OPTIONAL 0
|
||||
/* FreeBSD 4 has getopt in unistd.h. So we include that before
|
||||
getopt.h */
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#ifdef HAVE_GETOPT_H
|
||||
#include <getopt.h>
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_NLS
|
||||
|
||||
Reference in New Issue
Block a user