Blame lib/driver/util.c

Packit dd8086
/*
Packit dd8086
  Copyright (C) 2003, 2004, 2005, 2008, 2009, 2010, 2011
Packit dd8086
  Rocky Bernstein <rocky@gnu.org>
Packit dd8086
  Copyright (C) 2000 Herbert Valerio Riedel <hvr@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
#ifdef HAVE_CONFIG_H
Packit dd8086
# include "config.h"
Packit dd8086
# define __CDIO_CONFIG_H__ 1
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#include <ctype.h>
Packit dd8086
#ifdef HAVE_STDLIB_H
Packit dd8086
#include <stdlib.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_STDIO_H
Packit dd8086
#include <stdio.h>
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#ifdef HAVE_STRING_H
Packit dd8086
#include <string.h>
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#ifdef HAVE_INTTYPES_H
Packit dd8086
#include "inttypes.h"
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#include <ctype.h>
Packit dd8086
Packit dd8086
#include "cdio_assert.h"
Packit dd8086
#include <cdio/types.h>
Packit dd8086
#include <cdio/util.h>
Packit dd8086
#include <cdio/version.h>
Packit dd8086
Packit dd8086
size_t
Packit dd8086
_cdio_strlenv(char **str_array)
Packit dd8086
{
Packit dd8086
  size_t n = 0;
Packit dd8086
Packit dd8086
  cdio_assert (str_array != NULL);
Packit dd8086
Packit dd8086
  while(str_array[n])
Packit dd8086
    n++;
Packit dd8086
Packit dd8086
  return n;
Packit dd8086
}
Packit dd8086
Packit dd8086
void
Packit dd8086
_cdio_strfreev(char **strv)
Packit dd8086
{
Packit dd8086
  int n;
Packit dd8086
Packit dd8086
  cdio_assert (strv != NULL);
Packit dd8086
Packit dd8086
  for(n = 0; strv[n]; n++)
Packit dd8086
    free(strv[n]);
Packit dd8086
Packit dd8086
  free(strv);
Packit dd8086
}
Packit dd8086
Packit dd8086
char **
Packit dd8086
_cdio_strsplit(const char str[], char delim) /* fixme -- non-reentrant */
Packit dd8086
{
Packit dd8086
  int n;
Packit dd8086
  char **strv = NULL;
Packit dd8086
  char *_str, *p;
Packit dd8086
  char _delim[2] = { 0, 0 };
Packit dd8086
Packit dd8086
  cdio_assert (str != NULL);
Packit dd8086
Packit dd8086
  _str = strdup(str);
Packit dd8086
  _delim[0] = delim;
Packit dd8086
Packit dd8086
  cdio_assert (_str != NULL);
Packit dd8086
Packit dd8086
  n = 1;
Packit dd8086
  p = _str;
Packit dd8086
  while(*p)
Packit dd8086
    if (*(p++) == delim)
Packit dd8086
      n++;
Packit dd8086
Packit dd8086
  strv = calloc (n+1, sizeof (char *));
Packit dd8086
  cdio_assert (strv != NULL);
Packit dd8086
Packit dd8086
  n = 0;
Packit dd8086
  while((p = strtok(n ? NULL : _str, _delim)) != NULL)
Packit dd8086
    strv[n++] = strdup(p);
Packit dd8086
Packit dd8086
  free(_str);
Packit dd8086
Packit dd8086
  return strv;
Packit dd8086
}
Packit dd8086
Packit dd8086
void *
Packit dd8086
_cdio_memdup (const void *mem, size_t count)
Packit dd8086
{
Packit dd8086
  void *new_mem = NULL;
Packit dd8086
Packit dd8086
  if (mem)
Packit dd8086
    {
Packit dd8086
      new_mem = calloc (1, count);
Packit dd8086
      cdio_assert (new_mem != NULL);
Packit dd8086
      memcpy (new_mem, mem, count);
Packit dd8086
    }
Packit dd8086
Packit dd8086
  return new_mem;
Packit dd8086
}
Packit dd8086
Packit dd8086
char *
Packit dd8086
_cdio_strdup_upper (const char str[])
Packit dd8086
{
Packit dd8086
  char *new_str = NULL;
Packit dd8086
Packit dd8086
  if (str)
Packit dd8086
    {
Packit dd8086
      char *p;
Packit dd8086
Packit dd8086
      p = new_str = strdup (str);
Packit dd8086
Packit dd8086
      while (*p)
Packit dd8086
        {
Packit dd8086
          *p = toupper ((unsigned char) *p);
Packit dd8086
          p++;
Packit dd8086
        }
Packit dd8086
    }
Packit dd8086
Packit dd8086
  return new_str;
Packit dd8086
}
Packit dd8086
Packit dd8086
/* Convert MinGW/MSYS paths that start in "/c/..." to "c:/..."
Packit dd8086
   so that they can be used with fopen(), stat(), etc.
Packit dd8086
   Returned string must be freed by the caller using cdio_free().*/
Packit dd8086
char *
Packit dd8086
_cdio_strdup_fixpath (const char path[])
Packit dd8086
{
Packit dd8086
  char *new_path = NULL;
Packit dd8086
Packit dd8086
  if (path)
Packit dd8086
    {
Packit dd8086
       new_path = strdup (path);
Packit dd8086
#if defined(_WIN32)
Packit dd8086
       if (new_path && (strlen (new_path) >= 3) && (new_path[0] == '/') &&
Packit dd8086
          (new_path[2] == '/') && (isalpha (new_path[1])))
Packit dd8086
         {
Packit dd8086
           new_path[0] = new_path[1];
Packit dd8086
           new_path[1] = ':';
Packit dd8086
         }
Packit dd8086
#endif
Packit dd8086
    }
Packit dd8086
Packit dd8086
  return new_path;
Packit dd8086
}
Packit dd8086
Packit dd8086
uint8_t
Packit dd8086
cdio_to_bcd8 (uint8_t n)
Packit dd8086
{
Packit dd8086
  /*cdio_assert (n < 100);*/
Packit dd8086
Packit dd8086
  return ((n/10)<<4) | (n%10);
Packit dd8086
}
Packit dd8086
Packit dd8086
uint8_t
Packit dd8086
cdio_from_bcd8(uint8_t p)
Packit dd8086
{
Packit dd8086
  return (0xf & p)+(10*(p >> 4));
Packit dd8086
}
Packit dd8086
Packit dd8086
const char *cdio_version_string = CDIO_VERSION;
Packit dd8086
const unsigned int libcdio_version_num = LIBCDIO_VERSION_NUM;
Packit dd8086
Packit dd8086

Packit dd8086
/*
Packit dd8086
 * Local variables:
Packit dd8086
 *  c-file-style: "gnu"
Packit dd8086
 *  tab-width: 8
Packit dd8086
 *  indent-tabs-mode: nil
Packit dd8086
 * End:
Packit dd8086
 */