X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_fixups.h;h=df250fc81876a12b51f7a4e163606d48b00277ba;hb=b751665aa8f78719eb3e4fe30545fffd5c423948;hp=fa50cb650dc047bec9430e0e5bd516c312002f67;hpb=1816e3ec924d0d5dc1d488b7b0470f9f1c6b587b;p=vlc diff --git a/include/vlc_fixups.h b/include/vlc_fixups.h index fa50cb650d..df250fc818 100644 --- a/include/vlc_fixups.h +++ b/include/vlc_fixups.h @@ -1,8 +1,7 @@ /***************************************************************************** * fixups.h: portability fixups included from config.h ***************************************************************************** - * Copyright © 1998-2007 the VideoLAN project - * $Id$ + * Copyright © 1998-2008 the VideoLAN project * * 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 @@ -28,49 +27,102 @@ # define LIBVLC_FIXUPS_H 1 #ifndef HAVE_STRDUP -# define strdup vlc_strdup +# include +# include +static inline char *strdup (const char *str) +{ + size_t len = strlen (str) + 1; + char *res = (char *)malloc (len); + if (res) memcpy (res, str, len); + return res; +} #endif #ifndef HAVE_VASPRINTF -# define vasprintf vlc_vasprintf +# include +# include +# include +static inline int vasprintf (char **strp, const char *fmt, va_list ap) +{ + int len = vsnprintf (NULL, 0, fmt, ap) + 1; + char *res = (char *)malloc (len); + if (res == NULL) + return -1; + *strp = res; + return vsprintf (res, fmt, ap); +} #endif #ifndef HAVE_ASPRINTF -# define asprintf vlc_asprintf +# include +# include +static inline int asprintf (char **strp, const char *fmt, ...) +{ + va_list ap; + int ret; + va_start (ap, fmt); + ret = vasprintf (strp, fmt, ap); + va_end (ap); + return ret; +} #endif -#ifndef HAVE_STRNDUP -# define strndup vlc_strndup +#ifndef HAVE_STRNLEN +# include +static inline size_t strnlen (const char *str, size_t max) +{ + const char *end = (const char *) memchr (str, 0, max); + return end ? (size_t)(end - str) : max; +} #endif -#ifndef HAVE_STRNLEN -# define strnlen vlc_strnlen +#ifndef HAVE_STRNDUP +# include +# include +static inline char *strndup (const char *str, size_t max) +{ + size_t len = strnlen (str, max); + char *res = (char *) malloc (len + 1); + if (res) + { + memcpy (res, str, len); + res[len] = '\0'; + } + return res; +} #endif #ifndef HAVE_STRLCPY # define strlcpy vlc_strlcpy #endif -#ifndef HAVE_ATOF -# define atof vlc_atof -#endif - #ifndef HAVE_STRTOF -# ifdef HAVE_STRTOD -# define strtof( a, b ) ((float)strtod (a, b)) -# endif +# define strtof( a, b ) ((float)strtod (a, b)) #endif -#ifndef HAVE_ATOLL -# define atoll vlc_atoll +#ifndef HAVE_ATOF +# define atof( str ) (strtod ((str), (char **)NULL, 10)) #endif #ifndef HAVE_STRTOLL # define strtoll vlc_strtoll #endif +#ifndef HAVE_ATOLL +# define atoll( str ) (strtoll ((str), (char **)NULL, 10)) +#endif + #ifndef HAVE_LLDIV -# define lldiv vlc_lldiv +typedef struct { + long long quot; /* Quotient. */ + long long rem; /* Remainder. */ +} lldiv_t; + +static inline lldiv_t lldiv (long long numer, long long denom) +{ + lldiv_t d = { .quot = numer / denom, .rem = numer % denom }; + return d; +} #endif #ifndef HAVE_SCANDIR @@ -79,12 +131,25 @@ #endif #ifndef HAVE_GETENV -# define getenv vlc_getenv +static inline getenv (const char *name) +{ + (void)name; + return NULL; +} #endif #ifndef HAVE_STRCASECMP # ifndef HAVE_STRICMP -# define strcasecmp vlc_strcasecmp +# include +static inline int strcasecmp (const char *s1, const char *s2) +{ + for (size_t i = 0;; i++) + { + int d = tolower (s1[i]) - tolower (s2[i]); + if (d || !s1[i]) return d; + } + return 0; +} # else # define strcasecmp stricmp # endif @@ -92,7 +157,16 @@ #ifndef HAVE_STRNCASECMP # ifndef HAVE_STRNICMP -# define strncasecmp vlc_strncasecmp +# include +static inline int strncasecmp (const char *s1, const char *s2, size_t n) +{ + for (size_t i = 0; i < n; i++) + { + int d = tolower (s1[i]) - tolower (s2[i]); + if (d || !s1[i]) return d; + } + return 0; +} # else # define strncasecmp strnicmp # endif @@ -119,6 +193,46 @@ static inline struct tm *localtime_r (const time_t *timep, struct tm *result) *result = *s; return result; } +static inline struct tm *gmtime_r (const time_t *timep, struct tm *result) +{ + struct tm *s = gmtime (timep); + if (s == NULL) + return NULL; + + *result = *s; + return result; +} +#endif + +/* Alignment of critical static data structures */ +#ifdef ATTRIBUTE_ALIGNED_MAX +# define ATTR_ALIGN(align) __attribute__ ((__aligned__ ((ATTRIBUTE_ALIGNED_MAX < align) ? ATTRIBUTE_ALIGNED_MAX : align))) +#else +# define ATTR_ALIGN(align) +#endif + +#ifndef HAVE_USELOCALE +typedef void *locale_t; +# define newlocale( a, b, c ) ((locale_t)0) +# define uselocale( a ) ((locale_t)0) +# define freelocale( a ) (void)0 #endif +#ifdef WIN32 +# include +# define opendir Use_utf8_opendir_or_vlc_wopendir_instead! +# define readdir Use_utf8_readdir_or_vlc_wreaddir_instead! +# define closedir vlc_wclosedir +#endif + +/* libintl support */ +#define _(str) vlc_gettext (str) + +#if defined (ENABLE_NLS) +# include +#endif + +#define N_(str) gettext_noop (str) +#define gettext_noop(str) (str) + #endif /* !LIBVLC_FIXUPS_H */