summaryrefslogtreecommitdiff
path: root/data/_apt7/memrchr.diff
diff options
context:
space:
mode:
Diffstat (limited to 'data/_apt7/memrchr.diff')
-rw-r--r--data/_apt7/memrchr.diff195
1 files changed, 0 insertions, 195 deletions
diff --git a/data/_apt7/memrchr.diff b/data/_apt7/memrchr.diff
deleted file mode 100644
index 8913e1816..000000000
--- a/data/_apt7/memrchr.diff
+++ /dev/null
@@ -1,195 +0,0 @@
-diff -ru apt-0.7.20.2/ftparchive/cachedb.cc apt-0.7.20.2+iPhone/ftparchive/cachedb.cc
---- apt-0.7.20.2/ftparchive/cachedb.cc 2009-02-07 15:09:35.000000000 +0000
-+++ apt-0.7.20.2+iPhone/ftparchive/cachedb.cc 2009-04-14 16:10:02.000000000 +0000
-@@ -315,6 +315,14 @@
- }
- }
-
-+void *memrchr(void *data, char value, int size) {
-+ char *cdata = (char *) data;
-+ for (int i = 0; i != size; ++i)
-+ if (cdata[size - i - 1] == value)
-+ return cdata + size - i - 1;
-+ return NULL;
-+}
-+
- // CacheDB::GetMD5 - Get the MD5 hash /*{{{*/
- // ---------------------------------------------------------------------
- /* */
-diff -ru apt-0.7.20.2/apt-pkg/deb/dpkgpm.cc apt-0.7.20.2+iPhone/apt-pkg/deb/dpkgpm.cc
---- apt-0.7.20.2/apt-pkg/deb/dpkgpm.cc 2009-02-07 15:09:35.000000000 +0000
-+++ apt-0.7.20.2+iPhone/apt-pkg/deb/dpkgpm.cc 2009-04-15 19:25:04.000000000 +0000
-@@ -501,6 +501,7 @@
-
- // now move the unprocessed bits (after the final \n that is now a 0x0)
- // to the start and update dpkgbuf_pos
-+ void *memrchr(void const *, int, size_t);
- p = (char*)memrchr(dpkgbuf, 0, dpkgbuf_pos);
- if(p == NULL)
- return;
-@@ -974,3 +975,165 @@
- List.erase(List.begin(),List.end());
- }
- /*}}}*/
-+
-+/* memrchr -- find the last occurrence of a byte in a memory block
-+
-+ Copyright (C) 1991, 1993, 1996, 1997, 1999, 2000, 2003, 2004, 2005,
-+ 2006, 2007, 2008 Free Software Foundation, Inc.
-+
-+ Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
-+ with help from Dan Sahlin (dan@sics.se) and
-+ commentary by Jim Blandy (jimb@ai.mit.edu);
-+ adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu),
-+ and implemented by Roland McGrath (roland@ai.mit.edu).
-+
-+ 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
-+ the Free Software Foundation; either version 3 of the License, or
-+ (at your option) any later version.
-+
-+ This program 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 General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
-+
-+#if defined _LIBC
-+# include <memcopy.h>
-+#else
-+# include <config.h>
-+# define reg_char char
-+#endif
-+
-+#include <string.h>
-+#include <limits.h>
-+
-+#undef __memrchr
-+#ifdef _LIBC
-+# undef memrchr
-+#endif
-+
-+#ifndef weak_alias
-+# define __memrchr memrchr
-+#endif
-+
-+/* Search no more than N bytes of S for C. */
-+void *
-+__memrchr (void const *s, int c_in, size_t n)
-+{
-+ /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
-+ long instead of a 64-bit uintmax_t tends to give better
-+ performance. On 64-bit hardware, unsigned long is generally 64
-+ bits already. Change this typedef to experiment with
-+ performance. */
-+ typedef unsigned long int longword;
-+
-+ const unsigned char *char_ptr;
-+ const longword *longword_ptr;
-+ longword repeated_one;
-+ longword repeated_c;
-+ unsigned reg_char c;
-+
-+ c = (unsigned char) c_in;
-+
-+ /* Handle the last few bytes by reading one byte at a time.
-+ Do this until CHAR_PTR is aligned on a longword boundary. */
-+ for (char_ptr = (const unsigned char *) s + n;
-+ n > 0 && (size_t) char_ptr % sizeof (longword) != 0;
-+ --n)
-+ if (*--char_ptr == c)
-+ return (void *) char_ptr;
-+
-+ longword_ptr = (const longword *) char_ptr;
-+
-+ /* All these elucidatory comments refer to 4-byte longwords,
-+ but the theory applies equally well to any size longwords. */
-+
-+ /* Compute auxiliary longword values:
-+ repeated_one is a value which has a 1 in every byte.
-+ repeated_c has c in every byte. */
-+ repeated_one = 0x01010101;
-+ repeated_c = c | (c << 8);
-+ repeated_c |= repeated_c << 16;
-+ if (0xffffffffU < (longword) -1)
-+ {
-+ repeated_one |= repeated_one << 31 << 1;
-+ repeated_c |= repeated_c << 31 << 1;
-+ if (8 < sizeof (longword))
-+ {
-+ size_t i;
-+
-+ for (i = 64; i < sizeof (longword) * 8; i *= 2)
-+ {
-+ repeated_one |= repeated_one << i;
-+ repeated_c |= repeated_c << i;
-+ }
-+ }
-+ }
-+
-+ /* Instead of the traditional loop which tests each byte, we will test a
-+ longword at a time. The tricky part is testing if *any of the four*
-+ bytes in the longword in question are equal to c. We first use an xor
-+ with repeated_c. This reduces the task to testing whether *any of the
-+ four* bytes in longword1 is zero.
-+
-+ We compute tmp =
-+ ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
-+ That is, we perform the following operations:
-+ 1. Subtract repeated_one.
-+ 2. & ~longword1.
-+ 3. & a mask consisting of 0x80 in every byte.
-+ Consider what happens in each byte:
-+ - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
-+ and step 3 transforms it into 0x80. A carry can also be propagated
-+ to more significant bytes.
-+ - If a byte of longword1 is nonzero, let its lowest 1 bit be at
-+ position k (0 <= k <= 7); so the lowest k bits are 0. After step 1,
-+ the byte ends in a single bit of value 0 and k bits of value 1.
-+ After step 2, the result is just k bits of value 1: 2^k - 1. After
-+ step 3, the result is 0. And no carry is produced.
-+ So, if longword1 has only non-zero bytes, tmp is zero.
-+ Whereas if longword1 has a zero byte, call j the position of the least
-+ significant zero byte. Then the result has a zero at positions 0, ...,
-+ j-1 and a 0x80 at position j. We cannot predict the result at the more
-+ significant bytes (positions j+1..3), but it does not matter since we
-+ already have a non-zero bit at position 8*j+7.
-+
-+ So, the test whether any byte in longword1 is zero is equivalent to
-+ testing whether tmp is nonzero. */
-+
-+ while (n >= sizeof (longword))
-+ {
-+ longword longword1 = *--longword_ptr ^ repeated_c;
-+
-+ if ((((longword1 - repeated_one) & ~longword1)
-+ & (repeated_one << 7)) != 0)
-+ {
-+ longword_ptr++;
-+ break;
-+ }
-+ n -= sizeof (longword);
-+ }
-+
-+ char_ptr = (const unsigned char *) longword_ptr;
-+
-+ /* At this point, we know that either n < sizeof (longword), or one of the
-+ sizeof (longword) bytes starting at char_ptr is == c. On little-endian
-+ machines, we could determine the first such byte without any further
-+ memory accesses, just by looking at the tmp result from the last loop
-+ iteration. But this does not work on big-endian machines. Choose code
-+ that works in both cases. */
-+
-+ while (n-- > 0)
-+ {
-+ if (*--char_ptr == c)
-+ return (void *) char_ptr;
-+ }
-+
-+ return NULL;
-+}
-+#ifdef weak_alias
-+weak_alias (__memrchr, memrchr)
-+#endif