aboutsummaryrefslogtreecommitdiff
path: root/multimedia/xbmc-pvr/files/patch-xbmc__linux__FreeBSDGNUReplacements.c
diff options
context:
space:
mode:
Diffstat (limited to 'multimedia/xbmc-pvr/files/patch-xbmc__linux__FreeBSDGNUReplacements.c')
-rw-r--r--multimedia/xbmc-pvr/files/patch-xbmc__linux__FreeBSDGNUReplacements.c255
1 files changed, 255 insertions, 0 deletions
diff --git a/multimedia/xbmc-pvr/files/patch-xbmc__linux__FreeBSDGNUReplacements.c b/multimedia/xbmc-pvr/files/patch-xbmc__linux__FreeBSDGNUReplacements.c
new file mode 100644
index 000000000000..41313ca75aa5
--- /dev/null
+++ b/multimedia/xbmc-pvr/files/patch-xbmc__linux__FreeBSDGNUReplacements.c
@@ -0,0 +1,255 @@
+--- /dev/null 2010-12-16 16:44:10.000000000 +0100
++++ xbmc/linux/FreeBSDGNUReplacements.c 2010-12-16 16:45:22.613185593 +0100
+@@ -0,0 +1,252 @@
++
++#include "FreeBSDGNUReplacements.h"
++
++#if __FreeBSD_version < 800067
++
++/*-
++ * Copyright (c) 2009 David Schultz <das@FreeBSD.org>
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ */
++
++size_t
++strnlen(const char *s, size_t maxlen)
++{
++ size_t len;
++
++ for (len = 0; len < maxlen; len++, s++) {
++ if (!*s)
++ break;
++ }
++ return (len);
++}
++
++/* Copyright (C) 1991, 1992, 1995, 1996, 1997 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Library General Public License as
++ published by the Free Software Foundation; either version 2 of the
++ License, or (at your option) any later version.
++
++ The GNU C Library 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
++ Library General Public License for more details.
++
++ You should have received a copy of the GNU Library General Public
++ License along with the GNU C Library; see the file COPYING.LIB. If not,
++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA.
++*/
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <limits.h>
++#include <errno.h>
++
++/* Read up to (and including) a TERMINATOR from STREAM into *LINEPTR
++ (and null-terminate it). *LINEPTR is a pointer returned from malloc (or
++ NULL), pointing to *N characters of space. It is realloc'd as
++ necessary. Returns the number of characters read (not including the
++ null terminator), or -1 on error or EOF. */
++
++ssize_t
++getdelim(char **lineptr, size_t *n, int terminator, FILE *stream)
++{
++ char *line, *p;
++ size_t size, copy;
++
++ if (stream == NULL || lineptr == NULL || n == NULL)
++ {
++ errno = EINVAL;
++ return -1;
++ }
++
++ if (ferror (stream))
++ return -1;
++
++ /* Make sure we have a line buffer to start with. */
++ if (*lineptr == NULL || *n < 2) /* !seen and no buf yet need 2 chars. */
++ {
++#ifndef MAX_CANON
++#define MAX_CANON 256
++#endif
++ line = (char *)realloc (*lineptr, MAX_CANON);
++ if (line == NULL)
++ return -1;
++ *lineptr = line;
++ *n = MAX_CANON;
++ }
++
++ line = *lineptr;
++ size = *n;
++
++ copy = size;
++ p = line;
++
++ while (1)
++ {
++ size_t len;
++
++ while (--copy > 0)
++ {
++ register int c = getc (stream);
++ if (c == EOF)
++ goto lose;
++ else if ((*p++ = c) == terminator)
++ goto win;
++ }
++
++ /* Need to enlarge the line buffer. */
++ len = p - line;
++ size *= 2;
++ line = (char *)realloc (line, size);
++ if (line == NULL)
++ goto lose;
++ *lineptr = line;
++ *n = size;
++ p = line + len;
++ copy = size - len;
++ }
++
++ lose:
++ if (p == *lineptr)
++ return -1;
++ /* Return a partial line since we got an error in the middle. */
++ win:
++ *p = '\0';
++ return p - *lineptr;
++}
++
++#endif
++
++/* Compare strings while treating digits characters numerically.
++ Copyright (C) 1997, 2002, 2005 Free Software Foundation, Inc.
++ This file is part of the libiberty library.
++ Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 1997.
++
++ Libiberty is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ Libiberty 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
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++ 02110-1301 USA. */
++
++#include <ctype.h>
++
++#define ISASCII(c) isascii(c)
++#define ISDIGIT(c) (ISASCII (c) && isdigit (c))
++/* states: S_N: normal, S_I: comparing integral part, S_F: comparing
++ fractional parts, S_Z: idem but with leading Zeroes only */
++#define S_N 0x0
++#define S_I 0x4
++#define S_F 0x8
++#define S_Z 0xC
++
++/* result_type: CMP: return diff; LEN: compare using len_diff/diff */
++#define CMP 2
++#define LEN 3
++
++
++/* Compare S1 and S2 as strings holding indices/version numbers,
++ returning less than, equal to or greater than zero if S1 is less than,
++ equal to or greater than S2 (for more info, see the Glibc texinfo doc). */
++
++int
++strverscmp (const char *s1, const char *s2)
++{
++ const unsigned char *p1 = (const unsigned char *) s1;
++ const unsigned char *p2 = (const unsigned char *) s2;
++ unsigned char c1, c2;
++ int state;
++ int diff;
++
++ /* Symbol(s) 0 [1-9] others (padding)
++ Transition (10) 0 (01) d (00) x (11) - */
++ static const unsigned int next_state[] =
++ {
++ /* state x d 0 - */
++ /* S_N */ S_N, S_I, S_Z, S_N,
++ /* S_I */ S_N, S_I, S_I, S_I,
++ /* S_F */ S_N, S_F, S_F, S_F,
++ /* S_Z */ S_N, S_F, S_Z, S_Z
++ };
++
++ static const int result_type[] =
++ {
++ /* state x/x x/d x/0 x/- d/x d/d d/0 d/-
++ 0/x 0/d 0/0 0/- -/x -/d -/0 -/- */
++
++ /* S_N */ CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP,
++ CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
++ /* S_I */ CMP, -1, -1, CMP, +1, LEN, LEN, CMP,
++ +1, LEN, LEN, CMP, CMP, CMP, CMP, CMP,
++ /* S_F */ CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP,
++ CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
++ /* S_Z */ CMP, +1, +1, CMP, -1, CMP, CMP, CMP,
++ -1, CMP, CMP, CMP
++ };
++
++ if (p1 == p2)
++ return 0;
++
++ c1 = *p1++;
++ c2 = *p2++;
++ /* Hint: '0' is a digit too. */
++ state = S_N | ((c1 == '0') + (ISDIGIT (c1) != 0));
++
++ while ((diff = c1 - c2) == 0 && c1 != '\0')
++ {
++ state = next_state[state];
++ c1 = *p1++;
++ c2 = *p2++;
++ state |= (c1 == '0') + (ISDIGIT (c1) != 0);
++ }
++
++ state = result_type[state << 2 | (((c2 == '0') + (ISDIGIT (c2) != 0)))];
++
++ switch (state)
++ {
++ case CMP:
++ return diff;
++
++ case LEN:
++ while (ISDIGIT (*p1++))
++ if (!ISDIGIT (*p2++))
++ return 1;
++
++ return ISDIGIT (*p2) ? -1 : diff;
++
++ default:
++ return state;
++ }
++}