diff options
Diffstat (limited to 'x11-plugins/wmpinboard/files/wmpinboard-1.0.1-memcmp.patch')
-rw-r--r-- | x11-plugins/wmpinboard/files/wmpinboard-1.0.1-memcmp.patch | 443 |
1 files changed, 443 insertions, 0 deletions
diff --git a/x11-plugins/wmpinboard/files/wmpinboard-1.0.1-memcmp.patch b/x11-plugins/wmpinboard/files/wmpinboard-1.0.1-memcmp.patch new file mode 100644 index 000000000000..616b4b8ddc59 --- /dev/null +++ b/x11-plugins/wmpinboard/files/wmpinboard-1.0.1-memcmp.patch @@ -0,0 +1,443 @@ +diff -Naur wmpinboard-1.0.1.orig/src/Makefile.am wmpinboard-1.0.1/src/Makefile.am +--- wmpinboard-1.0.1.orig/src/Makefile.am 2015-05-25 02:30:37.000000000 +0200 ++++ wmpinboard-1.0.1/src/Makefile.am 2023-03-14 20:57:29.415810929 +0100 +@@ -5,7 +5,7 @@ + + bin_PROGRAMS = wmpinboard + +-wmpinboard_SOURCES = memcmp.c \ ++wmpinboard_SOURCES = \ + misc.c misc.h \ + notes.c notes.h \ + wmpinboard.c wmpinboard.h \ +@@ -13,6 +13,5 @@ + wmpinboard_CFLAGS = -g + + EXTRA_wmpinboard_SOURCES = \ +- getopt.c getopt1.c getopt.h \ +- memcmp.c memcmp.h ++ getopt.c getopt1.c getopt.h + +diff -Naur wmpinboard-1.0.1.orig/src/memcmp.c wmpinboard-1.0.1/src/memcmp.c +--- wmpinboard-1.0.1.orig/src/memcmp.c 2015-05-25 02:30:37.000000000 +0200 ++++ wmpinboard-1.0.1/src/memcmp.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,394 +0,0 @@ +-/* Copyright (C) 1991, 1993, 1995, 1997, 1998 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Torbjorn Granlund (tege@sics.se). +- +- 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. */ +- +-#ifdef HAVE_CONFIG_H +-# include <config.h> +-#endif +- +-#undef __ptr_t +-#if defined __cplusplus || (defined __STDC__ && __STDC__) +-# define __ptr_t void * +-#else /* Not C++ or ANSI C. */ +-# undef const +-# define const +-# define __ptr_t char * +-#endif /* C++ or ANSI C. */ +- +-#ifndef __P +-# if defined __GNUC__ || (defined __STDC__ && __STDC__) +-# define __P(args) args +-# else +-# define __P(args) () +-# endif /* GCC. */ +-#endif /* Not __P. */ +- +-#if defined HAVE_STRING_H || defined _LIBC +-# include <string.h> +-#endif +- +-#undef memcmp +- +-#ifdef _LIBC +- +-# include <memcopy.h> +-# include <endian.h> +- +-# if __BYTE_ORDER == __BIG_ENDIAN +-# define WORDS_BIGENDIAN +-# endif +- +-#else /* Not in the GNU C library. */ +- +-# include <sys/types.h> +- +-/* Type to use for aligned memory operations. +- This should normally be the biggest type supported by a single load +- and store. Must be an unsigned type. */ +-# define op_t unsigned long int +-# define OPSIZ (sizeof(op_t)) +- +-/* Threshold value for when to enter the unrolled loops. */ +-# define OP_T_THRES 16 +- +-/* Type to use for unaligned operations. */ +-typedef unsigned char byte; +- +-# ifndef WORDS_BIGENDIAN +-# define MERGE(w0, sh_1, w1, sh_2) (((w0) >> (sh_1)) | ((w1) << (sh_2))) +-# else +-# define MERGE(w0, sh_1, w1, sh_2) (((w0) << (sh_1)) | ((w1) >> (sh_2))) +-# endif +- +-#endif /* In the GNU C library. */ +- +-#ifdef WORDS_BIGENDIAN +-# define CMP_LT_OR_GT(a, b) ((a) > (b) ? 1 : -1) +-#else +-# define CMP_LT_OR_GT(a, b) memcmp_bytes ((a), (b)) +-#endif +- +-/* BE VERY CAREFUL IF YOU CHANGE THIS CODE! */ +- +-/* The strategy of this memcmp is: +- +- 1. Compare bytes until one of the block pointers is aligned. +- +- 2. Compare using memcmp_common_alignment or +- memcmp_not_common_alignment, regarding the alignment of the other +- block after the initial byte operations. The maximum number of +- full words (of type op_t) are compared in this way. +- +- 3. Compare the few remaining bytes. */ +- +-#ifndef WORDS_BIGENDIAN +-/* memcmp_bytes -- Compare A and B bytewise in the byte order of the machine. +- A and B are known to be different. +- This is needed only on little-endian machines. */ +- +-static int memcmp_bytes __P((op_t, op_t)); +- +-# ifdef __GNUC__ +-__inline +-# endif +-static int +-memcmp_bytes (a, b) +- op_t a, b; +-{ +- long int srcp1 = (long int) &a; +- long int srcp2 = (long int) &b; +- op_t a0, b0; +- +- do +- { +- a0 = ((byte *) srcp1)[0]; +- b0 = ((byte *) srcp2)[0]; +- srcp1 += 1; +- srcp2 += 1; +- } +- while (a0 == b0); +- return a0 - b0; +-} +-#endif +- +-static int memcmp_common_alignment __P((long, long, size_t)); +- +-/* memcmp_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN `op_t' +- objects (not LEN bytes!). Both SRCP1 and SRCP2 should be aligned for +- memory operations on `op_t's. */ +-#ifdef __GNUC__ +-__inline +-#endif +-static int +-memcmp_common_alignment (srcp1, srcp2, len) +- long int srcp1; +- long int srcp2; +- size_t len; +-{ +- op_t a0, a1; +- op_t b0, b1; +- +- switch (len % 4) +- { +- default: /* Avoid warning about uninitialized local variables. */ +- case 2: +- a0 = ((op_t *) srcp1)[0]; +- b0 = ((op_t *) srcp2)[0]; +- srcp1 -= 2 * OPSIZ; +- srcp2 -= 2 * OPSIZ; +- len += 2; +- goto do1; +- case 3: +- a1 = ((op_t *) srcp1)[0]; +- b1 = ((op_t *) srcp2)[0]; +- srcp1 -= OPSIZ; +- srcp2 -= OPSIZ; +- len += 1; +- goto do2; +- case 0: +- if (OP_T_THRES <= 3 * OPSIZ && len == 0) +- return 0; +- a0 = ((op_t *) srcp1)[0]; +- b0 = ((op_t *) srcp2)[0]; +- goto do3; +- case 1: +- a1 = ((op_t *) srcp1)[0]; +- b1 = ((op_t *) srcp2)[0]; +- srcp1 += OPSIZ; +- srcp2 += OPSIZ; +- len -= 1; +- if (OP_T_THRES <= 3 * OPSIZ && len == 0) +- goto do0; +- /* Fall through. */ +- } +- +- do +- { +- a0 = ((op_t *) srcp1)[0]; +- b0 = ((op_t *) srcp2)[0]; +- if (a1 != b1) +- return CMP_LT_OR_GT (a1, b1); +- +- do3: +- a1 = ((op_t *) srcp1)[1]; +- b1 = ((op_t *) srcp2)[1]; +- if (a0 != b0) +- return CMP_LT_OR_GT (a0, b0); +- +- do2: +- a0 = ((op_t *) srcp1)[2]; +- b0 = ((op_t *) srcp2)[2]; +- if (a1 != b1) +- return CMP_LT_OR_GT (a1, b1); +- +- do1: +- a1 = ((op_t *) srcp1)[3]; +- b1 = ((op_t *) srcp2)[3]; +- if (a0 != b0) +- return CMP_LT_OR_GT (a0, b0); +- +- srcp1 += 4 * OPSIZ; +- srcp2 += 4 * OPSIZ; +- len -= 4; +- } +- while (len != 0); +- +- /* This is the right position for do0. Please don't move +- it into the loop. */ +- do0: +- if (a1 != b1) +- return CMP_LT_OR_GT (a1, b1); +- return 0; +-} +- +-static int memcmp_not_common_alignment __P((long, long, size_t)); +- +-/* memcmp_not_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN +- `op_t' objects (not LEN bytes!). SRCP2 should be aligned for memory +- operations on `op_t', but SRCP1 *should be unaligned*. */ +-#ifdef __GNUC__ +-__inline +-#endif +-static int +-memcmp_not_common_alignment (srcp1, srcp2, len) +- long int srcp1; +- long int srcp2; +- size_t len; +-{ +- op_t a0, a1, a2, a3; +- op_t b0, b1, b2, b3; +- op_t x; +- int shl, shr; +- +- /* Calculate how to shift a word read at the memory operation +- aligned srcp1 to make it aligned for comparison. */ +- +- shl = 8 * (srcp1 % OPSIZ); +- shr = 8 * OPSIZ - shl; +- +- /* Make SRCP1 aligned by rounding it down to the beginning of the `op_t' +- it points in the middle of. */ +- srcp1 &= -OPSIZ; +- +- switch (len % 4) +- { +- default: /* Avoid warning about uninitialized local variables. */ +- case 2: +- a1 = ((op_t *) srcp1)[0]; +- a2 = ((op_t *) srcp1)[1]; +- b2 = ((op_t *) srcp2)[0]; +- srcp1 -= 1 * OPSIZ; +- srcp2 -= 2 * OPSIZ; +- len += 2; +- goto do1; +- case 3: +- a0 = ((op_t *) srcp1)[0]; +- a1 = ((op_t *) srcp1)[1]; +- b1 = ((op_t *) srcp2)[0]; +- srcp2 -= 1 * OPSIZ; +- len += 1; +- goto do2; +- case 0: +- if (OP_T_THRES <= 3 * OPSIZ && len == 0) +- return 0; +- a3 = ((op_t *) srcp1)[0]; +- a0 = ((op_t *) srcp1)[1]; +- b0 = ((op_t *) srcp2)[0]; +- srcp1 += 1 * OPSIZ; +- goto do3; +- case 1: +- a2 = ((op_t *) srcp1)[0]; +- a3 = ((op_t *) srcp1)[1]; +- b3 = ((op_t *) srcp2)[0]; +- srcp1 += 2 * OPSIZ; +- srcp2 += 1 * OPSIZ; +- len -= 1; +- if (OP_T_THRES <= 3 * OPSIZ && len == 0) +- goto do0; +- /* Fall through. */ +- } +- +- do +- { +- a0 = ((op_t *) srcp1)[0]; +- b0 = ((op_t *) srcp2)[0]; +- x = MERGE(a2, shl, a3, shr); +- if (x != b3) +- return CMP_LT_OR_GT (x, b3); +- +- do3: +- a1 = ((op_t *) srcp1)[1]; +- b1 = ((op_t *) srcp2)[1]; +- x = MERGE(a3, shl, a0, shr); +- if (x != b0) +- return CMP_LT_OR_GT (x, b0); +- +- do2: +- a2 = ((op_t *) srcp1)[2]; +- b2 = ((op_t *) srcp2)[2]; +- x = MERGE(a0, shl, a1, shr); +- if (x != b1) +- return CMP_LT_OR_GT (x, b1); +- +- do1: +- a3 = ((op_t *) srcp1)[3]; +- b3 = ((op_t *) srcp2)[3]; +- x = MERGE(a1, shl, a2, shr); +- if (x != b2) +- return CMP_LT_OR_GT (x, b2); +- +- srcp1 += 4 * OPSIZ; +- srcp2 += 4 * OPSIZ; +- len -= 4; +- } +- while (len != 0); +- +- /* This is the right position for do0. Please don't move +- it into the loop. */ +- do0: +- x = MERGE(a2, shl, a3, shr); +- if (x != b3) +- return CMP_LT_OR_GT (x, b3); +- return 0; +-} +- +-int +-memcmp (s1, s2, len) +- const __ptr_t s1; +- const __ptr_t s2; +- size_t len; +-{ +- op_t a0; +- op_t b0; +- long int srcp1 = (long int) s1; +- long int srcp2 = (long int) s2; +- op_t res; +- +- if (len >= OP_T_THRES) +- { +- /* There are at least some bytes to compare. No need to test +- for LEN == 0 in this alignment loop. */ +- while (srcp2 % OPSIZ != 0) +- { +- a0 = ((byte *) srcp1)[0]; +- b0 = ((byte *) srcp2)[0]; +- srcp1 += 1; +- srcp2 += 1; +- res = a0 - b0; +- if (res != 0) +- return res; +- len -= 1; +- } +- +- /* SRCP2 is now aligned for memory operations on `op_t'. +- SRCP1 alignment determines if we can do a simple, +- aligned compare or need to shuffle bits. */ +- +- if (srcp1 % OPSIZ == 0) +- res = memcmp_common_alignment (srcp1, srcp2, len / OPSIZ); +- else +- res = memcmp_not_common_alignment (srcp1, srcp2, len / OPSIZ); +- if (res != 0) +- return res; +- +- /* Number of bytes remaining in the interval [0..OPSIZ-1]. */ +- srcp1 += len & -OPSIZ; +- srcp2 += len & -OPSIZ; +- len %= OPSIZ; +- } +- +- /* There are just a few bytes to compare. Use byte memory operations. */ +- while (len != 0) +- { +- a0 = ((byte *) srcp1)[0]; +- b0 = ((byte *) srcp2)[0]; +- srcp1 += 1; +- srcp2 += 1; +- res = a0 - b0; +- if (res != 0) +- return res; +- len -= 1; +- } +- +- return 0; +-} +- +-#ifdef weak_alias +-# undef bcmp +-weak_alias (memcmp, bcmp) +-#endif +diff -Naur wmpinboard-1.0.1.orig/src/memcmp.h wmpinboard-1.0.1/src/memcmp.h +--- wmpinboard-1.0.1.orig/src/memcmp.h 2015-05-25 02:30:37.000000000 +0200 ++++ wmpinboard-1.0.1/src/memcmp.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,8 +0,0 @@ +-#ifndef MEMCMP_H_INCLUDED +-#define MEMCMP_H_INCLUDED +- +-extern int memcmp __P ((__const __ptr_t __s1, __const __ptr_t __s2, +- size_t __n)); +- +-#endif /* MEMCMP_H_INCLUDED */ +- +diff -Naur wmpinboard-1.0.1.orig/src/notes.c wmpinboard-1.0.1/src/notes.c +--- wmpinboard-1.0.1.orig/src/notes.c 2015-05-25 02:30:37.000000000 +0200 ++++ wmpinboard-1.0.1/src/notes.c 2023-03-14 20:58:50.523898242 +0100 +@@ -20,9 +20,6 @@ + #ifdef HAVE_STRING_H + #include <string.h> + #endif +-#ifndef HAVE_MEMCMP +-#include "memcmp.h" +-#endif + + /* a list of the upper left corners of the separate areas of the alarm panel, + numbered from left to right and from top to bottom (double digits followed |