Blame test/driver/bincue.c

Packit dd8086
/* -*- C -*-
Packit dd8086
  Copyright (C) 2004, 2006, 2008, 2010, 2011, 2012
Packit dd8086
  Rocky Bernstein <rocky@gnu.org>
Packit dd8086
Packit dd8086
  This program is free software: you can redistribute it and/or modify
Packit dd8086
  it under the terms of the GNU General Public License as published by
Packit dd8086
  the Free Software Foundation, either version 3 of the License, or
Packit dd8086
  (at your option) any later version.
Packit dd8086
Packit dd8086
  This program is distributed in the hope that it will be useful,
Packit dd8086
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd8086
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd8086
  GNU General Public License for more details.
Packit dd8086
Packit dd8086
  You should have received a copy of the GNU General Public License
Packit dd8086
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit dd8086
*/
Packit dd8086
Packit dd8086
/*
Packit dd8086
   Regression test for BIN/CUE device driver: lib/driver/image/bincue.c.
Packit dd8086
*/
Packit dd8086
#ifdef HAVE_CONFIG_H
Packit dd8086
#include "config.h"
Packit dd8086
#define __CDIO_CONFIG_H__ 1
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#ifdef HAVE_STDIO_H
Packit dd8086
#include <stdio.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_SYS_TYPES_H
Packit dd8086
#include <sys/types.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_STDLIB_H
Packit dd8086
#include <stdlib.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_STRING_H
Packit dd8086
#include <string.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_UNISTD_H
Packit dd8086
#include <unistd.h> /* chdir */
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#include <cdio/cdio.h>
Packit dd8086
#include <cdio/logging.h>
Packit dd8086
#include "helper.h"
Packit dd8086
Packit dd8086
#ifndef DATA_DIR
Packit dd8086
#define DATA_DIR "../data"
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#define NUM_GOOD_CUES 2
Packit dd8086
#define NUM_BAD_CUES 7
Packit dd8086
int
Packit dd8086
main(int argc, const char *argv[])
Packit dd8086
{
Packit dd8086
  const char *cue_file[NUM_GOOD_CUES] = {
Packit dd8086
    "cdda.cue",
Packit dd8086
    "isofs-m1.cue",
Packit dd8086
  };
Packit dd8086
Packit dd8086
  const char *badcue_file[NUM_BAD_CUES] = {
Packit dd8086
    "bad-cat1.cue",
Packit dd8086
    "bad-cat2.cue",
Packit dd8086
    "bad-cat3.cue",
Packit dd8086
    "bad-mode1.cue",
Packit dd8086
    "bad-msf-1.cue",
Packit dd8086
    "bad-msf-2.cue",
Packit dd8086
    "bad-msf-3.cue",
Packit dd8086
  };
Packit dd8086
  int ret=0;
Packit dd8086
  unsigned int i;
Packit dd8086
  char psz_cuefile[500];
Packit dd8086
  unsigned int verbose = (argc > 1);
Packit dd8086
Packit dd8086
  psz_cuefile[sizeof(psz_cuefile)-1] = '\0';
Packit dd8086
  cdio_loglevel_default = (argc > 1) ? CDIO_LOG_DEBUG : CDIO_LOG_WARN;
Packit dd8086
  for (i=0; i
Packit dd8086
    char *psz_binfile;
Packit dd8086
    snprintf(psz_cuefile, sizeof(psz_cuefile)-1,
Packit dd8086
             "%s/%s", DATA_DIR, cue_file[i]);
Packit dd8086
    psz_binfile = cdio_is_cuefile(psz_cuefile);
Packit dd8086
    if (!psz_binfile) {
Packit dd8086
      printf("Incorrect: %s doesn't parse as a CDRWin CUE file.\n",
Packit dd8086
             cue_file[i]);
Packit dd8086
      ret=i+1;
Packit dd8086
    } else {
Packit dd8086
        if (verbose)
Packit dd8086
            printf("Correct: %s parses as a CDRWin CUE file.\n",
Packit dd8086
                   cue_file[i]);
Packit dd8086
      free(psz_binfile);
Packit dd8086
    }
Packit dd8086
  }
Packit dd8086
Packit dd8086
  for (i=0; i
Packit dd8086
    char *psz_binfile;
Packit dd8086
    snprintf(psz_cuefile, sizeof(psz_cuefile)-1,
Packit dd8086
             "%s/%s", DATA_DIR, badcue_file[i]);
Packit dd8086
    psz_binfile=cdio_is_cuefile(psz_cuefile);
Packit dd8086
    if (!psz_binfile) {
Packit dd8086
        if (verbose)
Packit dd8086
            printf("Correct: %s doesn't parse as a CDRWin CUE file.\n",
Packit dd8086
                   badcue_file[i]);
Packit dd8086
    } else {
Packit dd8086
      printf("Incorrect: %s parses as a CDRWin CUE file.\n",
Packit dd8086
             badcue_file[i]);
Packit dd8086
      free(psz_binfile);
Packit dd8086
      ret+=50*i+1;
Packit dd8086
      break;
Packit dd8086
    }
Packit dd8086
  }
Packit dd8086
Packit dd8086
  {
Packit dd8086
    CdIo_t *p_cdio;
Packit dd8086
    snprintf(psz_cuefile, sizeof(psz_cuefile)-1,
Packit dd8086
             "%s/%s", DATA_DIR, "cdda.cue");
Packit dd8086
    p_cdio  = cdio_open (psz_cuefile, DRIVER_UNKNOWN);
Packit dd8086
    if (!p_cdio) {
Packit dd8086
      printf("Can't open cdda.cue\n");
Packit dd8086
    } else {
Packit dd8086
      char *psz_device;
Packit dd8086
Packit dd8086
      /* Just test performing some operations. */
Packit dd8086
      cdio_set_blocksize(p_cdio, 2048);
Packit dd8086
Packit dd8086
#ifdef HAVE_CHDIR
Packit dd8086
      if (0 == chdir(DATA_DIR))
Packit dd8086
#endif
Packit dd8086
      {
Packit dd8086
          psz_device = cdio_get_default_device(p_cdio);
Packit dd8086
Packit dd8086
          check_mmc_supported(p_cdio, 1);
Packit dd8086
          check_access_mode(p_cdio, "image");
Packit dd8086
          // check_get_arg_source(p_cdio, psz_device);
Packit dd8086
Packit dd8086
          /* Could chdir to srcdir to hedge the bet? */
Packit dd8086
          if (psz_device)
Packit dd8086
              free(psz_device);
Packit dd8086
          else {
Packit dd8086
              /* Unless we do the chdir, will fail. So don't set as an
Packit dd8086
               * error. */
Packit dd8086
              printf("Can't get default device\n");
Packit dd8086
          }
Packit dd8086
          cdio_set_speed(p_cdio, 5);
Packit dd8086
      }
Packit dd8086
Packit dd8086
      cdio_destroy(p_cdio);
Packit dd8086
Packit dd8086
    }
Packit dd8086
Packit dd8086
  }
Packit dd8086
Packit dd8086
  return ret;
Packit dd8086
}