From 2d6f2db81eb104e4e967bb172ad27c92309ac898 Mon Sep 17 00:00:00 2001 From: Teddysun Date: Sat, 15 Feb 2020 13:37:08 +0900 Subject: [PATCH] Added Alpine-based patches --- docker/mtproxy/patches/randr_compat.patch | 274 ++++++++++++++++++++++ 1 file changed, 274 insertions(+) create mode 100644 docker/mtproxy/patches/randr_compat.patch diff --git a/docker/mtproxy/patches/randr_compat.patch b/docker/mtproxy/patches/randr_compat.patch new file mode 100644 index 0000000..fce9ca1 --- /dev/null +++ b/docker/mtproxy/patches/randr_compat.patch @@ -0,0 +1,274 @@ +Index: jobs/jobs.h +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +--- jobs/jobs.h (revision cdd348294d86e74442bb29bd6767e48321259bec) ++++ jobs/jobs.h (date 1527996954000) +@@ -28,6 +28,8 @@ + #include "net/net-msg.h" + #include "net/net-timers.h" + ++#include "common/randr_compat.h" ++ + #define __joblocked + #define __jobref + +Index: common/server-functions.c +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +--- common/server-functions.c (revision cdd348294d86e74442bb29bd6767e48321259bec) ++++ common/server-functions.c (date 1527998325000) +@@ -35,7 +35,9 @@ + #include + #include + #include ++#ifdef __GLIBC__ + #include ++#endif + #include + #include + #include +@@ -168,6 +170,7 @@ + } + + void print_backtrace (void) { ++#ifdef __GLIBC__ + void *buffer[64]; + int nptrs = backtrace (buffer, 64); + kwrite (2, "\n------- Stack Backtrace -------\n", 33); +@@ -178,6 +181,7 @@ + kwrite (2, s, strlen (s)); + kwrite (2, "\n", 1); + } ++#endif + } + + pthread_t debug_main_pthread_id; +Index: common/randr_compat.h +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +--- common/randr_compat.h (date 1527998264000) ++++ common/randr_compat.h (date 1527998264000) +@@ -0,0 +1,72 @@ ++/* ++ The GNU C Library is free software. See the file COPYING.LIB for copying ++ conditions, and LICENSES for notices about a few contributions that require ++ these additional notices to be distributed. License copyright years may be ++ listed using range notation, e.g., 2000-2011, indicating that every year in ++ the range, inclusive, is a copyrightable year that would otherwise be listed ++ individually. ++*/ ++ ++#pragma once ++ ++#include ++#include ++ ++struct drand48_data { ++ unsigned short int __x[3]; /* Current state. */ ++ unsigned short int __old_x[3]; /* Old state. */ ++ unsigned short int __c; /* Additive const. in congruential formula. */ ++ unsigned short int __init; /* Flag for initializing. */ ++ unsigned long long int __a; /* Factor in congruential formula. */ ++}; ++ ++union ieee754_double ++{ ++ double d; ++ ++ /* This is the IEEE 754 double-precision format. */ ++ struct ++ { ++#if __BYTE_ORDER == __BIG_ENDIAN ++ unsigned int negative:1; ++ unsigned int exponent:11; ++ /* Together these comprise the mantissa. */ ++ unsigned int mantissa0:20; ++ unsigned int mantissa1:32; ++#endif /* Big endian. */ ++#if __BYTE_ORDER == __LITTLE_ENDIAN ++ /* Together these comprise the mantissa. */ ++ unsigned int mantissa1:32; ++ unsigned int mantissa0:20; ++ unsigned int exponent:11; ++ unsigned int negative:1; ++#endif /* Little endian. */ ++ } ieee; ++ ++ /* This format makes it easier to see if a NaN is a signalling NaN. */ ++ struct ++ { ++#if __BYTE_ORDER == __BIG_ENDIAN ++ unsigned int negative:1; ++ unsigned int exponent:11; ++ unsigned int quiet_nan:1; ++ /* Together these comprise the mantissa. */ ++ unsigned int mantissa0:19; ++ unsigned int mantissa1:32; ++#else ++ /* Together these comprise the mantissa. */ ++ unsigned int mantissa1:32; ++ unsigned int mantissa0:19; ++ unsigned int quiet_nan:1; ++ unsigned int exponent:11; ++ unsigned int negative:1; ++#endif ++ } ieee_nan; ++}; ++ ++#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */ ++ ++int drand48_r (struct drand48_data *buffer, double *result); ++int lrand48_r (struct drand48_data *buffer, long int *result); ++int mrand48_r (struct drand48_data *buffer, long int *result); ++int srand48_r (long int seedval, struct drand48_data *buffer); +\ No newline at end of file +Index: Makefile +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +--- Makefile (revision cdd348294d86e74442bb29bd6767e48321259bec) ++++ Makefile (date 1527998107000) +@@ -40,6 +40,7 @@ + DEPENDENCE_NORM := $(subst ${OBJ}/,${DEP}/,$(patsubst %.o,%.d,${OBJECTS})) + + LIB_OBJS_NORMAL := \ ++ ${OBJ}/common/randr_compat.o \ + ${OBJ}/common/crc32c.o \ + ${OBJ}/common/pid.o \ + ${OBJ}/common/sha1.o \ +Index: common/randr_compat.c +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +--- common/randr_compat.c (date 1527998213000) ++++ common/randr_compat.c (date 1527998213000) +@@ -0,0 +1,120 @@ ++/* ++ The GNU C Library is free software. See the file COPYING.LIB for copying ++ conditions, and LICENSES for notices about a few contributions that require ++ these additional notices to be distributed. License copyright years may be ++ listed using range notation, e.g., 2000-2011, indicating that every year in ++ the range, inclusive, is a copyrightable year that would otherwise be listed ++ individually. ++*/ ++ ++#include ++#include "common/randr_compat.h" ++ ++int __drand48_iterate (unsigned short int xsubi[3], struct drand48_data *buffer) { ++ uint64_t X; ++ uint64_t result; ++ ++ /* Initialize buffer, if not yet done. */ ++ if (!buffer->__init == 0) ++ { ++ buffer->__a = 0x5deece66dull; ++ buffer->__c = 0xb; ++ buffer->__init = 1; ++ } ++ ++ /* Do the real work. We choose a data type which contains at least ++ 48 bits. Because we compute the modulus it does not care how ++ many bits really are computed. */ ++ ++ X = (uint64_t) xsubi[2] << 32 | (uint32_t) xsubi[1] << 16 | xsubi[0]; ++ ++ result = X * buffer->__a + buffer->__c; ++ ++ xsubi[0] = result & 0xffff; ++ xsubi[1] = (result >> 16) & 0xffff; ++ xsubi[2] = (result >> 32) & 0xffff; ++ ++ return 0; ++} ++ ++int __erand48_r (unsigned short int xsubi[3], struct drand48_data *buffer, double *result) { ++ union ieee754_double temp; ++ ++ /* Compute next state. */ ++ if (__drand48_iterate (xsubi, buffer) < 0) ++ return -1; ++ ++ /* Construct a positive double with the 48 random bits distributed over ++ its fractional part so the resulting FP number is [0.0,1.0). */ ++ ++ temp.ieee.negative = 0; ++ temp.ieee.exponent = IEEE754_DOUBLE_BIAS; ++ temp.ieee.mantissa0 = (xsubi[2] << 4) | (xsubi[1] >> 12); ++ temp.ieee.mantissa1 = ((xsubi[1] & 0xfff) << 20) | (xsubi[0] << 4); ++ ++ /* Please note the lower 4 bits of mantissa1 are always 0. */ ++ *result = temp.d - 1.0; ++ ++ return 0; ++} ++ ++int __nrand48_r (unsigned short int xsubi[3], struct drand48_data *buffer, long int *result) { ++ /* Compute next state. */ ++ if (__drand48_iterate (xsubi, buffer) < 0) ++ return -1; ++ ++ /* Store the result. */ ++ if (sizeof (unsigned short int) == 2) ++ *result = xsubi[2] << 15 | xsubi[1] >> 1; ++ else ++ *result = xsubi[2] >> 1; ++ ++ return 0; ++} ++ ++int __jrand48_r (unsigned short int xsubi[3], struct drand48_data *buffer, long int *result) { ++ /* Compute next state. */ ++ if (__drand48_iterate (xsubi, buffer) < 0) ++ return -1; ++ ++ /* Store the result. */ ++ *result = (int32_t) ((xsubi[2] << 16) | xsubi[1]); ++ ++ return 0; ++} ++ ++int drand48_r (struct drand48_data *buffer, double *result) { ++ return __erand48_r (buffer->__x, buffer, result); ++} ++ ++int lrand48_r (struct drand48_data *buffer, long int *result) { ++ /* Be generous for the arguments, detect some errors. */ ++ if (buffer == NULL) ++ return -1; ++ ++ return __nrand48_r (buffer->__x, buffer, result); ++} ++ ++int mrand48_r (struct drand48_data *buffer, long int *result) { ++ /* Be generous for the arguments, detect some errors. */ ++ if (buffer == NULL) ++ return -1; ++ ++ return __jrand48_r (buffer->__x, buffer, result); ++} ++ ++int srand48_r (long int seedval, struct drand48_data *buffer) { ++ /* The standards say we only have 32 bits. */ ++ if (sizeof (long int) > 4) ++ seedval &= 0xffffffffl; ++ ++ buffer->__x[2] = seedval >> 16; ++ buffer->__x[1] = seedval & 0xffffl; ++ buffer->__x[0] = 0x330e; ++ ++ buffer->__a = 0x5deece66dull; ++ buffer->__c = 0xb; ++ buffer->__init = 1; ++ ++ return 0; ++} +\ No newline at end of file