Blame include/cdio/util.h

Packit dd8086
/*
Packit dd8086
    Copyright (C) 2004, 2005, 2006, 2008, 2010, 2012, 2014
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
#ifndef CDIO_UTIL_H_
Packit dd8086
#define CDIO_UTIL_H_
Packit dd8086
Packit dd8086
/*!
Packit dd8086
   \file util.h
Packit dd8086
   \brief Miscellaneous utility functions.
Packit dd8086
Packit dd8086
   Warning: this will probably get removed/replaced by using glib.h
Packit dd8086
*/
Packit dd8086
#include <stdlib.h>
Packit dd8086
#include <cdio/types.h>
Packit dd8086
Packit dd8086
#if !defined CDIO_INLINE
Packit dd8086
#if defined(__cplusplus) || defined(inline)
Packit dd8086
#define CDIO_INLINE inline
Packit dd8086
#elif defined(__GNUC__)
Packit dd8086
#define CDIO_INLINE __inline__
Packit dd8086
#elif defined(_MSC_VER)
Packit dd8086
#define CDIO_INLINE __inline
Packit dd8086
#else
Packit dd8086
#define CDIO_INLINE
Packit dd8086
#endif
Packit dd8086
#endif /* CDIO_INLINE */
Packit dd8086
Packit dd8086
#undef  MAX
Packit dd8086
#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
Packit dd8086
Packit dd8086
#undef  MIN
Packit dd8086
#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
Packit dd8086
Packit dd8086
#undef  IN
Packit dd8086
#define IN(x, low, high) ((x) >= (low) && (x) <= (high))
Packit dd8086
Packit dd8086
#undef  CLAMP
Packit dd8086
#define CLAMP(x, low, high)  (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
Packit dd8086
Packit dd8086
static CDIO_INLINE uint32_t
Packit dd8086
_cdio_len2blocks (uint32_t i_len, uint16_t i_blocksize)
Packit dd8086
{
Packit dd8086
  uint32_t i_blocks;
Packit dd8086
Packit dd8086
  i_blocks = i_len / (uint32_t) i_blocksize;
Packit dd8086
  if (i_len % i_blocksize)
Packit dd8086
    i_blocks++;
Packit dd8086
Packit dd8086
  return i_blocks;
Packit dd8086
}
Packit dd8086
Packit dd8086
Packit dd8086
/*! free() and NULL out p_obj it is not already null. */
Packit dd8086
#define CDIO_FREE_IF_NOT_NULL(p_obj) \
Packit dd8086
  if (NULL != p_obj) { free(p_obj); p_obj=NULL; };
Packit dd8086
Packit dd8086
Packit dd8086
/* round up to next block boundary */
Packit dd8086
static CDIO_INLINE unsigned
Packit dd8086
_cdio_ceil2block (unsigned offset, uint16_t i_blocksize)
Packit dd8086
{
Packit dd8086
  return _cdio_len2blocks (offset, i_blocksize) * i_blocksize;
Packit dd8086
}
Packit dd8086
Packit dd8086
static CDIO_INLINE unsigned int
Packit dd8086
_cdio_ofs_add (unsigned offset, unsigned length, uint16_t i_blocksize)
Packit dd8086
{
Packit dd8086
  if (i_blocksize - (offset % i_blocksize) < length)
Packit dd8086
    offset = _cdio_ceil2block (offset, i_blocksize);
Packit dd8086
Packit dd8086
  offset += length;
Packit dd8086
Packit dd8086
  return offset;
Packit dd8086
}
Packit dd8086
Packit dd8086
static CDIO_INLINE const char *
Packit dd8086
_cdio_bool_str (bool b)
Packit dd8086
{
Packit dd8086
  return b ? "yes" : "no";
Packit dd8086
}
Packit dd8086
Packit dd8086
#ifdef __cplusplus
Packit dd8086
extern "C" {
Packit dd8086
#endif
Packit dd8086
Packit dd8086
void *
Packit dd8086
_cdio_memdup (const void *mem, size_t count);
Packit dd8086
Packit dd8086
char *
Packit dd8086
_cdio_strdup_upper (const char str[]);
Packit dd8086
Packit dd8086
/*! Duplicate path and make it platform compliant. Typically needed for
Packit dd8086
    MinGW/MSYS where a "/c/..." path must be translated to "c:/..." for
Packit dd8086
    use with fopen(), etc. Returned string must be freed by the caller
Packit dd8086
    using cdio_free(). */
Packit dd8086
char *
Packit dd8086
_cdio_strdup_fixpath (const char path[]);
Packit dd8086
Packit dd8086
void
Packit dd8086
_cdio_strfreev(char **strv);
Packit dd8086
Packit dd8086
size_t
Packit dd8086
_cdio_strlenv(char **str_array);
Packit dd8086
Packit dd8086
char **
Packit dd8086
_cdio_strsplit(const char str[], char delim);
Packit dd8086
Packit dd8086
uint8_t cdio_to_bcd8(uint8_t n);
Packit dd8086
uint8_t cdio_from_bcd8(uint8_t p);
Packit dd8086
Packit dd8086
/*!  cdio_realpath() same as POSIX.1-2001 realpath if that's
Packit dd8086
around. If not we do poor-man's simulation of that behavior.  */
Packit dd8086
char *cdio_realpath (const char *psz_src, char *psz_dst);
Packit dd8086
Packit dd8086
#ifdef WANT_FOLLOW_SYMLINK_COMPATIBILITY
Packit dd8086
# define cdio_follow_symlink cdio_realpath
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#ifdef __cplusplus
Packit dd8086
}
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#endif /* CDIO_UTIL_H_ */
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
 */