mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Generate pg_config.h.in by autoheader. Separate out manually editable
parts. Standardize spelling of comments in pg_config.h.
This commit is contained in:
@ -2,7 +2,7 @@
|
||||
#
|
||||
# Makefile for backend/catalog
|
||||
#
|
||||
# $Header: /cvsroot/pgsql/src/backend/catalog/Makefile,v 1.45 2003/01/14 23:19:34 petere Exp $
|
||||
# $Header: /cvsroot/pgsql/src/backend/catalog/Makefile,v 1.46 2003/04/06 22:45:22 petere Exp $
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
@ -38,7 +38,7 @@ POSTGRES_BKI_SRCS := $(addprefix $(top_srcdir)/src/include/catalog/,\
|
||||
pg_includes := $(sort -I$(top_srcdir)/src/include -I$(top_builddir)/src/include)
|
||||
|
||||
postgres.bki postgres.description: genbki.sh $(POSTGRES_BKI_SRCS) \
|
||||
$(top_srcdir)/src/include/postgres_ext.h $(top_builddir)/src/include/pg_config.h
|
||||
$(top_srcdir)/src/include/postgres_ext.h $(top_builddir)/src/include/pg_config_manual.h
|
||||
CPP='$(CPP)' AWK='$(AWK)' $(SHELL) $< $(BKIOPTS) -o postgres $(pg_includes) $(POSTGRES_BKI_SRCS) --set-version=$(VERSION)
|
||||
|
||||
.PHONY: install-data
|
||||
|
@ -10,7 +10,7 @@
|
||||
#
|
||||
#
|
||||
# IDENTIFICATION
|
||||
# $Header: /cvsroot/pgsql/src/backend/catalog/Attic/genbki.sh,v 1.28 2002/07/31 17:19:51 tgl Exp $
|
||||
# $Header: /cvsroot/pgsql/src/backend/catalog/Attic/genbki.sh,v 1.29 2003/04/06 22:45:22 petere Exp $
|
||||
#
|
||||
# NOTES
|
||||
# non-essential whitespace is removed from the generated file.
|
||||
@ -66,7 +66,7 @@ do
|
||||
echo " $CMDNAME [ -D define [...] ] [ -I dir ] --set-version=VERSION -o prefix files..."
|
||||
echo
|
||||
echo "Options:"
|
||||
echo " -I path to postgres_ext.h and pg_config.h files"
|
||||
echo " -I path to postgres_ext.h and pg_config_manual.h files"
|
||||
echo " -o prefix of output files"
|
||||
echo " --set-version PostgreSQL version number for initdb cross-check"
|
||||
echo
|
||||
@ -126,11 +126,11 @@ for dir in $INCLUDE_DIRS; do
|
||||
fi
|
||||
done
|
||||
|
||||
# Get INDEX_MAX_KEYS from pg_config.h
|
||||
# Get INDEX_MAX_KEYS from pg_config_manual.h
|
||||
# (who needs consistency?)
|
||||
for dir in $INCLUDE_DIRS; do
|
||||
if [ -f "$dir/pg_config.h" ]; then
|
||||
INDEXMAXKEYS=`grep '^#define[ ]*INDEX_MAX_KEYS' $dir/pg_config.h | $AWK '{ print $3 }'`
|
||||
if [ -f "$dir/pg_config_manual.h" ]; then
|
||||
INDEXMAXKEYS=`grep '^#define[ ]*INDEX_MAX_KEYS' $dir/pg_config_manual.h | $AWK '{ print $3 }'`
|
||||
break
|
||||
fi
|
||||
done
|
||||
@ -152,9 +152,10 @@ for dir in $INCLUDE_DIRS; do
|
||||
done
|
||||
export BKIOBJECTID
|
||||
|
||||
# NOTE: we assume here that FUNC_MAX_ARGS has the same value as INDEX_MAX_KEYS,
|
||||
# and don't read it separately from pg_config.h. This is OK because both of them
|
||||
# must be equal to the length of oidvector.
|
||||
# NOTE: we assume here that FUNC_MAX_ARGS has the same value as
|
||||
# INDEX_MAX_KEYS, and don't read it separately from
|
||||
# pg_config_manual.h. This is OK because both of them must be equal
|
||||
# to the length of oidvector.
|
||||
|
||||
INDEXMAXKEYS2=`expr $INDEXMAXKEYS '*' 2` || exit
|
||||
INDEXMAXKEYS4=`expr $INDEXMAXKEYS '*' 4` || exit
|
||||
|
@ -37,7 +37,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.309 2003/03/24 22:40:14 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.310 2003/04/06 22:45:22 petere Exp $
|
||||
*
|
||||
* NOTES
|
||||
*
|
||||
@ -143,13 +143,12 @@ char *VirtualHost;
|
||||
|
||||
/*
|
||||
* MaxBackends is the limit on the number of backends we can start.
|
||||
* The default is established by configure, but it can be altered at
|
||||
* postmaster start with the postmaster's -N switch. Note
|
||||
* that a larger MaxBackends value will increase the size of the shared
|
||||
* memory area as well as cause the postmaster to grab more kernel
|
||||
* semaphores, even if you never actually use that many backends.
|
||||
* Note that a larger MaxBackends value will increase the size of the
|
||||
* shared memory area as well as cause the postmaster to grab more
|
||||
* kernel semaphores, even if you never actually use that many
|
||||
* backends.
|
||||
*/
|
||||
int MaxBackends = DEF_MAXBACKENDS;
|
||||
int MaxBackends;
|
||||
|
||||
/*
|
||||
* ReservedBackends is the number of backends reserved for superuser use.
|
||||
@ -160,7 +159,7 @@ int MaxBackends = DEF_MAXBACKENDS;
|
||||
* can make new connections" --- pre-existing superuser connections don't
|
||||
* count against the limit.
|
||||
*/
|
||||
int ReservedBackends = 2;
|
||||
int ReservedBackends;
|
||||
|
||||
|
||||
static char *progname = (char *) NULL;
|
||||
@ -892,7 +891,7 @@ usage(const char *progname)
|
||||
#ifdef USE_ASSERT_CHECKING
|
||||
printf(gettext(" -A 1|0 enable/disable run-time assert checking\n"));
|
||||
#endif
|
||||
printf(gettext(" -B NBUFFERS number of shared buffers (default %d)\n"), DEF_NBUFFERS);
|
||||
printf(gettext(" -B NBUFFERS number of shared buffers\n"));
|
||||
printf(gettext(" -c NAME=VALUE set run-time parameter\n"));
|
||||
printf(gettext(" -d 1-5 debugging level\n"));
|
||||
printf(gettext(" -D DATADIR database directory\n"));
|
||||
@ -903,10 +902,9 @@ usage(const char *progname)
|
||||
#ifdef USE_SSL
|
||||
printf(gettext(" -l enable SSL connections\n"));
|
||||
#endif
|
||||
printf(gettext(" -N MAX-CONNECT maximum number of allowed connections (default %d)\n"),
|
||||
DEF_MAXBACKENDS);
|
||||
printf(gettext(" -N MAX-CONNECT maximum number of allowed connections\n"));
|
||||
printf(gettext(" -o OPTIONS pass 'OPTIONS' to each backend server\n"));
|
||||
printf(gettext(" -p PORT port number to listen on (default %d)\n"), DEF_PGPORT);
|
||||
printf(gettext(" -p PORT port number to listen on\n"));
|
||||
printf(gettext(" -S silent mode (start in background without logging output)\n"));
|
||||
printf(gettext(" --help show this help, then exit\n"));
|
||||
printf(gettext(" --version output version information, then exit\n"));
|
||||
|
@ -12,7 +12,7 @@
|
||||
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: c.h,v 1.136 2003/04/04 20:42:13 momjian Exp $
|
||||
* $Id: c.h,v 1.137 2003/04/06 22:45:23 petere Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -51,6 +51,8 @@
|
||||
*/
|
||||
|
||||
#include "pg_config.h"
|
||||
#include "pg_config_manual.h"
|
||||
#include "pg_config_os.h"
|
||||
#include "postgres_ext.h"
|
||||
|
||||
#include <stdio.h>
|
||||
@ -708,8 +710,7 @@ off_t ftello(FILE *stream);
|
||||
|
||||
/*
|
||||
* Provide prototypes for routines not present in a particular machine's
|
||||
* standard C library. It'd be better to put these in pg_config.h, but
|
||||
* in pg_config.h we haven't yet included anything that defines size_t...
|
||||
* standard C library.
|
||||
*/
|
||||
|
||||
#if !HAVE_DECL_SNPRINTF
|
||||
@ -727,4 +728,87 @@ extern int vsnprintf(char *str, size_t count, const char *fmt, va_list args);
|
||||
#define memmove(d, s, c) bcopy(s, d, c)
|
||||
#endif
|
||||
|
||||
#ifndef DLLIMPORT
|
||||
#define DLLIMPORT /* no special DLL markers on most ports */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The following is used as the arg list for signal handlers. Any ports
|
||||
* that take something other than an int argument should override this in
|
||||
* their pg_config_os.h file. Note that variable names are required
|
||||
* because it is used in both the prototypes as well as the definitions.
|
||||
* Note also the long name. We expect that this won't collide with
|
||||
* other names causing compiler warnings.
|
||||
*/
|
||||
|
||||
#ifndef SIGNAL_ARGS
|
||||
#define SIGNAL_ARGS int postgres_signal_arg
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Default "extern" declarations or macro substitutes for library routines.
|
||||
* When necessary, these routines are provided by files in src/port/.
|
||||
*/
|
||||
#ifndef HAVE_FSEEKO
|
||||
#define fseeko(a, b, c) fseek((a), (b), (c))
|
||||
#define ftello(a) ftell((a))
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_ISINF
|
||||
extern int isinf(double x);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_GETHOSTNAME
|
||||
extern int gethostname(char *name, int namelen);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_INET_ATON
|
||||
# include <netinet/in.h>
|
||||
# include <arpa/inet.h>
|
||||
extern int inet_aton(const char *cp, struct in_addr * addr);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* When there is no sigsetjmp, its functionality is provided by plain
|
||||
* setjmp. Incidentally, nothing provides setjmp's functionality in
|
||||
* that case.
|
||||
*/
|
||||
#ifndef HAVE_SIGSETJMP
|
||||
# define sigjmp_buf jmp_buf
|
||||
# define sigsetjmp(x,y) setjmp(x)
|
||||
# define siglongjmp longjmp
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRCASECMP
|
||||
extern int strcasecmp(char *s1, char *s2);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRDUP
|
||||
extern char *strdup(char const *);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_RANDOM
|
||||
extern long random(void);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_SRANDOM
|
||||
extern void srandom(unsigned int seed);
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_FDATASYNC) && !HAVE_DECL_FDATASYNC
|
||||
extern int fdatasync(int fildes);
|
||||
#endif
|
||||
|
||||
/* If strtoq() exists, rename it to the more standard strtoll() */
|
||||
#if defined(HAVE_LONG_LONG_INT_64) && !defined(HAVE_STRTOLL) && defined(HAVE_STRTOQ)
|
||||
# define strtoll strtoq
|
||||
# define HAVE_STRTOLL 1
|
||||
#endif
|
||||
|
||||
/* If strtouq() exists, rename it to the more standard strtoull() */
|
||||
#if defined(HAVE_LONG_LONG_INT_64) && !defined(HAVE_STRTOULL) && defined(HAVE_STRTOUQ)
|
||||
# define strtoull strtouq
|
||||
# define HAVE_STRTOULL 1
|
||||
#endif
|
||||
|
||||
#endif /* C_H */
|
||||
|
@ -12,7 +12,7 @@
|
||||
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: miscadmin.h,v 1.117 2003/03/20 04:51:44 momjian Exp $
|
||||
* $Id: miscadmin.h,v 1.118 2003/04/06 22:45:23 petere Exp $
|
||||
*
|
||||
* NOTES
|
||||
* some of the information in this file should be moved to
|
||||
@ -171,8 +171,10 @@ extern bool NetServer;
|
||||
extern bool EnableSSL;
|
||||
extern bool SilentMode;
|
||||
extern int MaxBackends;
|
||||
#define DEF_MAXBACKENDS 32
|
||||
extern int ReservedBackends;
|
||||
extern DLLIMPORT int NBuffers;
|
||||
#define DEF_NBUFFERS (DEF_MAXBACKENDS > 8 ? DEF_MAXBACKENDS * 2 : 16)
|
||||
extern int PostPortNumber;
|
||||
extern int Unix_socket_permissions;
|
||||
extern char *Unix_socket_group;
|
||||
|
File diff suppressed because it is too large
Load Diff
212
src/include/pg_config_manual.h
Normal file
212
src/include/pg_config_manual.h
Normal file
@ -0,0 +1,212 @@
|
||||
/*------------------------------------------------------------------------
|
||||
* PostgreSQL manual configuration settings
|
||||
*
|
||||
* This file contains various configuration symbols and limits. In
|
||||
* all cases, changing them is only useful in very rare situations or
|
||||
* for developers. If you edit any of these, be sure to do a *full*
|
||||
* rebuild (and an initdb if noted).
|
||||
*
|
||||
* $Id: pg_config_manual.h,v 1.1 2003/04/06 22:45:23 petere Exp $
|
||||
*------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
* Size of a disk block --- this also limits the size of a tuple. You
|
||||
* can set it bigger if you need bigger tuples (although TOAST should
|
||||
* reduce the need to have large tuples, since fields can be spread
|
||||
* across multiple tuples).
|
||||
*
|
||||
* BLCKSZ must be a power of 2. The maximum possible value of BLCKSZ
|
||||
* is currently 2^15 (32768). This is determined by the 15-bit widths
|
||||
* of the lp_off and lp_len fields in ItemIdData (see
|
||||
* include/storage/itemid.h).
|
||||
*
|
||||
* Changing BLCKSZ requires an initdb.
|
||||
*/
|
||||
#define BLCKSZ 8192
|
||||
|
||||
/*
|
||||
* RELSEG_SIZE is the maximum number of blocks allowed in one disk
|
||||
* file. Thus, the maximum size of a single file is RELSEG_SIZE *
|
||||
* BLCKSZ; relations bigger than that are divided into multiple files.
|
||||
*
|
||||
* RELSEG_SIZE * BLCKSZ must be less than your OS' limit on file size.
|
||||
* This is often 2 GB or 4GB in a 32-bit operating system, unless you
|
||||
* have large file support enabled. By default, we make the limit 1
|
||||
* GB to avoid any possible integer-overflow problems within the OS.
|
||||
* A limit smaller than necessary only means we divide a large
|
||||
* relation into more chunks than necessary, so it seems best to err
|
||||
* in the direction of a small limit. (Besides, a power-of-2 value
|
||||
* saves a few cycles in md.c.)
|
||||
*
|
||||
* Changing RELSEG_SIZE requires an initdb.
|
||||
*/
|
||||
#define RELSEG_SIZE (0x40000000 / BLCKSZ)
|
||||
|
||||
/*
|
||||
* Maximum number of columns in an index and maximum number of
|
||||
* arguments to a function. They must be the same value.
|
||||
*
|
||||
* The minimum value is 8 (index creation uses 8-argument functions).
|
||||
* There is no specific upper limit, although large values will waste
|
||||
* system-table space and processing time.
|
||||
*
|
||||
* Changing these requires an initdb.
|
||||
*/
|
||||
#define INDEX_MAX_KEYS 32
|
||||
#define FUNC_MAX_ARGS INDEX_MAX_KEYS
|
||||
|
||||
/*
|
||||
* Define this to make libpgtcl's "pg_result -assign" command process
|
||||
* C-style backslash sequences in returned tuple data and convert
|
||||
* PostgreSQL array values into Tcl lists. CAUTION: This conversion
|
||||
* is *wrong* unless you install the routines in
|
||||
* contrib/string/string_io to make the server produce C-style
|
||||
* backslash sequences in the first place.
|
||||
*/
|
||||
/* #define TCL_ARRAYS */
|
||||
|
||||
/*
|
||||
* User locks are handled totally on the application side as long term
|
||||
* cooperative locks which extend beyond the normal transaction
|
||||
* boundaries. Their purpose is to indicate to an application that
|
||||
* someone is `working' on an item. Define this flag to enable user
|
||||
* locks. You will need the loadable module user-locks.c to use this
|
||||
* feature.
|
||||
*/
|
||||
#define USER_LOCKS
|
||||
|
||||
/*
|
||||
* Define this if you want psql to _always_ ask for a username and a
|
||||
* password for password authentication.
|
||||
*/
|
||||
/* #define PSQL_ALWAYS_GET_PASSWORDS */
|
||||
|
||||
/*
|
||||
* Define this if you want to allow the lo_import and lo_export SQL
|
||||
* functions to be executed by ordinary users. By default these
|
||||
* functions are only available to the Postgres superuser. CAUTION:
|
||||
* These functions are SECURITY HOLES since they can read and write
|
||||
* any file that the PostgreSQL server has permission to access. If
|
||||
* you turn this on, don't say we didn't warn you.
|
||||
*/
|
||||
/* #define ALLOW_DANGEROUS_LO_FUNCTIONS */
|
||||
|
||||
/*
|
||||
* MAXPGPATH: standard size of a pathname buffer in PostgreSQL (hence,
|
||||
* maximum usable pathname length is one less).
|
||||
*
|
||||
* We'd use a standard system header symbol for this, if there weren't
|
||||
* so many to choose from: MAXPATHLEN, MAX_PATH, PATH_MAX are all
|
||||
* defined by different "standards", and often have different values
|
||||
* on the same platform! So we just punt and use a reasonably
|
||||
* generous setting here.
|
||||
*/
|
||||
#define MAXPGPATH 1024
|
||||
|
||||
/*
|
||||
* DEFAULT_MAX_EXPR_DEPTH: default value of max_expr_depth SET variable.
|
||||
*/
|
||||
#define DEFAULT_MAX_EXPR_DEPTH 10000
|
||||
|
||||
/*
|
||||
* PG_SOMAXCONN: maximum accept-queue length limit passed to
|
||||
* listen(2). You'd think we should use SOMAXCONN from
|
||||
* <sys/socket.h>, but on many systems that symbol is much smaller
|
||||
* than the kernel's actual limit. In any case, this symbol need be
|
||||
* twiddled only if you have a kernel that refuses large limit values,
|
||||
* rather than silently reducing the value to what it can handle
|
||||
* (which is what most if not all Unixen do).
|
||||
*/
|
||||
#define PG_SOMAXCONN 10000
|
||||
|
||||
/*
|
||||
* You can try changing this if you have a machine with bytes of
|
||||
* another size, but no guarantee...
|
||||
*/
|
||||
#define BITS_PER_BYTE 8
|
||||
|
||||
/*
|
||||
* Define this if your operating system supports AF_UNIX family
|
||||
* sockets.
|
||||
*/
|
||||
#if !defined(__QNX__) && !defined(__BEOS__)
|
||||
# define HAVE_UNIX_SOCKETS 1
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This is the default directory in which AF_UNIX socket files are
|
||||
* placed. Caution: changing this risks breaking your existing client
|
||||
* applications, which are likely to continue to look in the old
|
||||
* directory. But if you just hate the idea of sockets in /tmp,
|
||||
* here's where to twiddle it. You can also override this at runtime
|
||||
* with the postmaster's -k switch.
|
||||
*/
|
||||
#define DEFAULT_PGSOCKET_DIR "/tmp"
|
||||
|
||||
/*
|
||||
* Defining this will make float4 and float8 operations faster by
|
||||
* suppressing overflow/underflow checks.
|
||||
*/
|
||||
/* #define UNSAFE_FLOATS */
|
||||
|
||||
/*
|
||||
* The random() function is expected to yield values between 0 and
|
||||
* MAX_RANDOM_VALUE. Currently, all known implementations yield
|
||||
* 0..2^31-1, so we just hardwire this constant. We could do a
|
||||
* configure test if it proves to be necessary. CAUTION: Think not to
|
||||
* replace this with RAND_MAX. RAND_MAX defines the maximum value of
|
||||
* the older rand() function, which is often different from --- and
|
||||
* considerably inferior to --- random().
|
||||
*/
|
||||
#define MAX_RANDOM_VALUE (0x7FFFFFFF)
|
||||
|
||||
|
||||
/*
|
||||
*------------------------------------------------------------------------
|
||||
* The following symbols are for enabling debugging code, not for
|
||||
* controlling user-visible features or resource limits.
|
||||
*------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
* Define this to cause pfree()'d memory to be cleared immediately, to
|
||||
* facilitate catching bugs that refer to already-freed values. XXX
|
||||
* Right now, this gets defined automatically if --enable-cassert. In
|
||||
* the long term it probably doesn't need to be on by default.
|
||||
*/
|
||||
#ifdef USE_ASSERT_CHECKING
|
||||
#define CLOBBER_FREED_MEMORY
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Define this to check memory allocation errors (scribbling on more
|
||||
* bytes than were allocated). Right now, this gets defined
|
||||
* automatically if --enable-cassert. In the long term it probably
|
||||
* doesn't need to be on by default.
|
||||
*/
|
||||
#ifdef USE_ASSERT_CHECKING
|
||||
#define MEMORY_CONTEXT_CHECKING
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Define this to force all parse and plan trees to be passed through
|
||||
* copyObject(), to facilitate catching errors and omissions in
|
||||
* copyObject().
|
||||
*/
|
||||
/* #define COPY_PARSE_PLAN_TREES */
|
||||
|
||||
/*
|
||||
* Enable debugging print statements for lock-related operations.
|
||||
*/
|
||||
/* #define LOCK_DEBUG */
|
||||
|
||||
/*
|
||||
* Other debug #defines (documentation, anyone?)
|
||||
*/
|
||||
/* #define IPORTAL_DEBUG */
|
||||
/* #define HEAPDEBUGALL */
|
||||
/* #define ISTRATDEBUG */
|
||||
/* #define ACLDEBUG */
|
||||
/* #define RTDEBUG */
|
||||
/* #define GISTDEBUG */
|
@ -10,7 +10,7 @@
|
||||
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1995, Regents of the University of California
|
||||
*
|
||||
* $Id: postgres.h,v 1.62 2002/10/18 20:33:57 tgl Exp $
|
||||
* $Id: postgres.h,v 1.63 2003/04/06 22:45:23 petere Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -130,6 +130,7 @@ typedef struct varattrib
|
||||
*/
|
||||
|
||||
typedef unsigned long Datum; /* XXX sizeof(long) >= sizeof(void *) */
|
||||
#define SIZEOF_DATUM SIZEOF_UNSIGNED_LONG
|
||||
typedef Datum *DatumPtr;
|
||||
|
||||
#define GET_1_BYTE(datum) (((Datum) (datum)) & 0x000000ff)
|
||||
|
Reference in New Issue
Block a user