diff --git a/src/backend/columnar/Makefile b/src/backend/columnar/Makefile index 9927ff38c..8d8616c9f 100644 --- a/src/backend/columnar/Makefile +++ b/src/backend/columnar/Makefile @@ -1,10 +1,16 @@ +#SUBDIRS = . safeclib +#OBJS += \ + $(patsubst $(citus_abs_srcdir)/%.c,%.o,$(foreach dir,$(SUBDIRS), $(sort $(wildcard $(citus_abs_srcdir)/$(dir)/*.c)))) + +safestringlib_srcdir = $(citus_abs_top_srcdir)/vendor/safestringlib MODULE_big = columnar -OBJS = mem_primitives_lib.o \ - memcpy_s.o \ - safe_str_constraint.o \ - safe_mem_constraint.o \ - ignore_handler_s.o \ - abort_handler_s.o \ + +OBJS = safeclib/mem_primitives_lib.o \ + safeclib/memcpy_s.o \ + safeclib/safe_str_constraint.o \ + safeclib/safe_mem_constraint.o \ + safeclib/ignore_handler_s.o \ + safeclib/abort_handler_s.o \ columnar.o \ columnar_tableam.o \ columnar_storage.o \ @@ -17,7 +23,6 @@ OBJS = mem_primitives_lib.o \ mod.o \ write_state_management.o -safestringlib_srcdir = $(citus_abs_top_srcdir)/vendor/safestringlib PG_CPPFLAGS += -I$(libpq_srcdir) -I$(safestringlib_srcdir)/include EXTENSION = columnar diff --git a/src/backend/columnar/abort_handler_s.c b/src/backend/columnar/abort_handler_s.c deleted file mode 100644 index d956bfdaa..000000000 --- a/src/backend/columnar/abort_handler_s.c +++ /dev/null @@ -1,74 +0,0 @@ -/*------------------------------------------------------------------ - * abort_handler_s.c - * - * 2012, Jonathan Toppins - * - * Copyright (c) 2012 Cisco Systems - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - *------------------------------------------------------------------ - */ - -#include "safeclib_private.h" - -/** - * NAME - * abort_handler_s - * - * SYNOPSIS - * #include "safe_lib.h" - * void abort_handler_s(const char *msg, void *ptr, errno_t error) - * - * DESCRIPTION - * This function writes a message on the standard error stream in - * an implementation-defined format. The message shall include the - * string pointed to by msg. The abort_handler_s function then calls - * the abort function. - * - * SPECIFIED IN - * ISO/IEC JTC1 SC22 WG14 N1172, Programming languages, environments - * and system software interfaces, Extensions to the C Library, - * Part I: Bounds-checking interfaces - * - * INPUT PARAMETERS - * msg Pointer to the message describing the error - * - * ptr Pointer to aassociated data. Can be NULL. - * - * error The error code encountered. - * - * RETURN VALUE - * Does not return to caller. - * - * ALSO SEE - * ignore_handler_s() - * - */ - -void abort_handler_s(const char *msg, void *ptr, errno_t error) -{ - slprintf("ABORT CONSTRAINT HANDLER: (%u) %s\n", error, - (msg) ? msg : "Null message"); - slabort(); -} -EXPORT_SYMBOL(abort_handler_s) diff --git a/src/backend/columnar/ignore_handler_s.c b/src/backend/columnar/ignore_handler_s.c deleted file mode 100644 index 412e0cb71..000000000 --- a/src/backend/columnar/ignore_handler_s.c +++ /dev/null @@ -1,72 +0,0 @@ -/*------------------------------------------------------------------ - * ignore_handler_s.c - * - * 2012, Jonathan Toppins - * - * Copyright (c) 2012 Cisco Systems - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - *------------------------------------------------------------------ - */ - -#include "safeclib_private.h" - -/** - * NAME - * ignore_handler_s - * - * SYNOPSIS - * #include "safe_lib.h" - * void ignore_handler_s(const char *msg, void *ptr, errno_t error) - * - * DESCRIPTION - * This function simply returns to the caller. - * - * SPECIFIED IN - * ISO/IEC JTC1 SC22 WG14 N1172, Programming languages, environments - * and system software interfaces, Extensions to the C Library, - * Part I: Bounds-checking interfaces - * - * INPUT PARAMETERS - * msg Pointer to the message describing the error - * - * ptr Pointer to aassociated data. Can be NULL. - * - * error The error code encountered. - * - * RETURN VALUE - * Returns no value. - * - * ALSO SEE - * abort_handler_s() - * - */ - -void ignore_handler_s(const char *msg, void *ptr, errno_t error) -{ - - sldebug_printf("IGNORE CONSTRAINT HANDLER: (%u) %s\n", error, - (msg) ? msg : "Null message"); - return; -} -EXPORT_SYMBOL(ignore_handler_s) diff --git a/src/backend/columnar/mem_primitives_lib.c b/src/backend/columnar/mem_primitives_lib.c deleted file mode 100644 index 54b596d02..000000000 --- a/src/backend/columnar/mem_primitives_lib.c +++ /dev/null @@ -1,855 +0,0 @@ -/*------------------------------------------------------------------ - * mem_primitives_lib.c - Unguarded Memory Copy Routines - * - * February 2005, Bo Berry - * - * Copyright (c) 2005-2009 Cisco Systems - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - *------------------------------------------------------------------ - */ - -#include "mem_primitives_lib.h" - -#pragma GCC diagnostic ignored "-Wpragmas" -#pragma GCC diagnostic ignored "-Wimplicit-fallthrough" -/* - * mem_primitives_lib.c provides unguarded memory routines - * that are used by the safe_mem_library. These routines - * may also be used by an application, but the application - * is responsible for all parameter validation and alignment. - */ - -/** - * NAME - * mem_prim_set - Sets memory to value - * - * SYNOPSIS - * #include "mem_primitives_lib.h" - * void - * mem_prim_set(void *dest, uint32_t len, uint8_t value) - * - * DESCRIPTION - * Sets len bytes starting at dest to the specified value - * - * INPUT PARAMETERS - * dest - pointer to memory that will be set to value - * - * len - number of bytes to be set - * - * value - byte value - * - * OUTPUT PARAMETERS - * dest - is updated - * - * RETURN VALUE - * none - * - */ -void -mem_prim_set (void *dest, uint32_t len, uint8_t value) -{ - uint8_t *dp; - uint32_t count; - uint32_t lcount; - - uint32_t *lp; - uint32_t value32; - - count = len; - - dp = dest; - - value32 = value | (value << 8) | (value << 16) | (value << 24); - - /* - * First, do the few bytes to get uint32_t aligned. - */ - for (; count && ( (uintptr_t)dp & (sizeof(uint32_t)-1) ); count--) { - *dp++ = value; - } - - /* - * Then do the uint32_ts, unrolled the loop for performance - */ - lp = (uint32_t *)dp; - lcount = count >> 2; - - while (lcount != 0) { - - switch (lcount) { - /* - * Here we do blocks of 8. Once the remaining count - * drops below 8, take the fast track to finish up. - */ - default: - *lp++ = value32; *lp++ = value32; *lp++ = value32; *lp++ = value32; - *lp++ = value32; *lp++ = value32; *lp++ = value32; *lp++ = value32; - *lp++ = value32; *lp++ = value32; *lp++ = value32; *lp++ = value32; - *lp++ = value32; *lp++ = value32; *lp++ = value32; *lp++ = value32; - lcount -= 16; - break; - - case 15: *lp++ = value32; - case 14: *lp++ = value32; - case 13: *lp++ = value32; - case 12: *lp++ = value32; - case 11: *lp++ = value32; - case 10: *lp++ = value32; - case 9: *lp++ = value32; - case 8: *lp++ = value32; - - case 7: *lp++ = value32; - case 6: *lp++ = value32; - case 5: *lp++ = value32; - case 4: *lp++ = value32; - case 3: *lp++ = value32; - case 2: *lp++ = value32; - case 1: *lp++ = value32; - lcount = 0; - break; - } - } /* end while */ - - - dp = (uint8_t *)lp; - - /* - * compute the number of remaining bytes - */ - count &= (sizeof(uint32_t)-1); - - /* - * remaining bytes - */ - for (; count; dp++, count--) { - *dp = value; - } - - return; -} - - -/** - * NAME - * mem_prim_set16 - Sets memory to value - * - * SYNOPSIS - * #include "mem_primitives_lib.h" - * void - * mem_prim_set16(uint16_t *dp, uint32_t len, uint16_t value) - * - * DESCRIPTION - * Sets len uint16_ts starting at dest to the specified value. - * Pointers must meet system alignment requirements. - * - * INPUT PARAMETERS - * dest - pointer to memory that will be set to value - * - * len - number of uint16_ts to be set - * - * value - uint16_t value - * - * OUTPUT PARAMETERS - * dest - is updated - * - * RETURN VALUE - * none - * - */ -void -mem_prim_set16 (uint16_t *dp, uint32_t len, uint16_t value) -{ - - while (len != 0) { - - switch (len) { - /* - * Here we do blocks of 8. Once the remaining count - * drops below 8, take the fast track to finish up. - */ - default: - *dp++ = value; *dp++ = value; *dp++ = value; *dp++ = value; - *dp++ = value; *dp++ = value; *dp++ = value; *dp++ = value; - *dp++ = value; *dp++ = value; *dp++ = value; *dp++ = value; - *dp++ = value; *dp++ = value; *dp++ = value; *dp++ = value; - len -= 16; - break; - - case 15: *dp++ = value; - case 14: *dp++ = value; - case 13: *dp++ = value; - case 12: *dp++ = value; - case 11: *dp++ = value; - case 10: *dp++ = value; - case 9: *dp++ = value; - case 8: *dp++ = value; - - case 7: *dp++ = value; - case 6: *dp++ = value; - case 5: *dp++ = value; - case 4: *dp++ = value; - case 3: *dp++ = value; - case 2: *dp++ = value; - case 1: *dp++ = value; - len = 0; - break; - } - } /* end while */ - - return; -} - - -/** - * NAME - * mem_prim_set32 - Sets memory to the uint32_t value - * - * SYNOPSIS - * #include "mem_primitives_lib.h" - * void - * mem_prim_set32(uint32_t *dp, uint32_t len, uint32_t value) - * - * DESCRIPTION - * Sets len uint32_ts starting at dest to the specified value - * Pointers must meet system alignment requirements. - * - * INPUT PARAMETERS - * dest - pointer to memory that will be set to value - * - * len - number of uint32_ts to be set - * - * value - uint32_t value - * - * OUTPUT PARAMETERS - * dest - is updated - * - * RETURN VALUE - * none - * - */ -void -mem_prim_set32 (uint32_t *dp, uint32_t len, uint32_t value) -{ - - while (len != 0) { - - switch (len) { - /* - * Here we do blocks of 8. Once the remaining count - * drops below 8, take the fast track to finish up. - */ - default: - *dp++ = value; *dp++ = value; *dp++ = value; *dp++ = value; - *dp++ = value; *dp++ = value; *dp++ = value; *dp++ = value; - *dp++ = value; *dp++ = value; *dp++ = value; *dp++ = value; - *dp++ = value; *dp++ = value; *dp++ = value; *dp++ = value; - len -= 16; - break; - - case 15: *dp++ = value; - case 14: *dp++ = value; - case 13: *dp++ = value; - case 12: *dp++ = value; - case 11: *dp++ = value; - case 10: *dp++ = value; - case 9: *dp++ = value; - case 8: *dp++ = value; - - case 7: *dp++ = value; - case 6: *dp++ = value; - case 5: *dp++ = value; - case 4: *dp++ = value; - case 3: *dp++ = value; - case 2: *dp++ = value; - case 1: *dp++ = value; - len = 0; - break; - } - } /* end while */ - - return; -} - - -/** - * NAME - * mem_prim_move - Move (handles overlap) memory - * - * SYNOPSIS - * #include "mem_primitives_lib.h" - * void - * mem_prim_move(void *dest, const void *src, uint32_t len) - * - * DESCRIPTION - * Moves at most slen bytes from src to dest, up to dmax - * bytes. Dest may overlap with src. - * - * INPUT PARAMETERS - * dest - pointer to the memory that will be replaced by src. - * - * src - pointer to the memory that will be copied - * to dest - * - * len - maximum number bytes of src that can be copied - * - * OUTPUT PARAMETERS - * dest - is updated - * - * RETURN VALUE - * none - * - */ -void -mem_prim_move (void *dest, const void *src, uint32_t len) -{ - -#define wsize sizeof(uint32_t) -#define wmask (wsize - 1) - - uint8_t *dp = dest; - const uint8_t *sp = src; - - uint32_t tsp; - - /* - * Determine if we need to copy forward or backward (overlap) - */ - if ((uintptr_t)dp < (uintptr_t)sp) { - /* - * Copy forward. - */ - - /* - * get a working copy of src for bit operations - */ - tsp = (uintptr_t)sp; - - /* - * Try to align both operands. This cannot be done - * unless the low bits match. - */ - if ((tsp | (uintptr_t)dp) & wmask) { - /* - * determine how many bytes to copy to align operands - */ - if ((tsp ^ (uintptr_t)dp) & wmask || len < wsize) { - tsp = len; - - } else { - tsp = wsize - (tsp & wmask); - } - - len -= tsp; - - /* - * make the alignment - */ - do { - *dp++ = *sp++; - } while (--tsp); - } - - /* - * Now copy, then mop up any trailing bytes. - */ - tsp = len / wsize; - - if (tsp > 0) { - - do { - *(uint32_t *)dp = *(uint32_t *)sp; - - sp += wsize; - dp += wsize; - } while (--tsp); - } - - /* - * copy over the remaining bytes and we're done - */ - tsp = len & wmask; - - if (tsp > 0) { - do { - *dp++ = *sp++; - } while (--tsp); - } - - } else { - /* - * This section is used to copy backwards, to handle any - * overlap. The alignment requires (tps&wmask) bytes to - * align. - */ - - /* - * go to end of the memory to copy - */ - sp += len; - dp += len; - - /* - * get a working copy of src for bit operations - */ - tsp = (uintptr_t)sp; - - /* - * Try to align both operands. - */ - if ((tsp | (uintptr_t)dp) & wmask) { - - if ((tsp ^ (uintptr_t)dp) & wmask || len <= wsize) { - tsp = len; - } else { - tsp &= wmask; - } - - len -= tsp; - - /* - * make the alignment - */ - do { - *--dp = *--sp; - } while (--tsp); - } - - /* - * Now copy in uint32_t units, then mop up any trailing bytes. - */ - tsp = len / wsize; - - if (tsp > 0) { - do { - sp -= wsize; - dp -= wsize; - - *(uint32_t *)dp = *(uint32_t *)sp; - } while (--tsp); - } - - /* - * copy over the remaining bytes and we're done - */ - tsp = len & wmask; - if (tsp > 0) { - tsp = len & wmask; - do { - *--dp = *--sp; - } while (--tsp); - } - } - - return; -} - - -/** - * NAME - * mem_prim_move8 - Move (handles overlap) memory - * - * SYNOPSIS - * #include "mem_primitives_lib.h" - * void - * mem_prim_move8(void *dest, const void *src, uint32_t len) - * - * DESCRIPTION - * Moves at most len uint8_ts from sp to dp. - * The destination may overlap with source. - * - * INPUT PARAMETERS - * dp - pointer to the memory that will be replaced by sp. - * - * sp - pointer to the memory that will be copied - * to dp - * - * len - maximum number uint8_t of sp that can be copied - * - * OUTPUT PARAMETERS - * dp - pointer to the memory that will be replaced by sp. - * - * RETURN VALUE - * none - * - */ -void -mem_prim_move8 (uint8_t *dp, const uint8_t *sp, uint32_t len) -{ - - /* - * Determine if we need to copy forward or backward (overlap) - */ - if (dp < sp) { - /* - * Copy forward. - */ - - while (len != 0) { - - switch (len) { - /* - * Here we do blocks of 8. Once the remaining count - * drops below 8, take the fast track to finish up. - */ - default: - *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; - *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; - *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; - *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; - len -= 16; - break; - - case 15: *dp++ = *sp++; - case 14: *dp++ = *sp++; - case 13: *dp++ = *sp++; - case 12: *dp++ = *sp++; - case 11: *dp++ = *sp++; - case 10: *dp++ = *sp++; - case 9: *dp++ = *sp++; - case 8: *dp++ = *sp++; - - case 7: *dp++ = *sp++; - case 6: *dp++ = *sp++; - case 5: *dp++ = *sp++; - case 4: *dp++ = *sp++; - case 3: *dp++ = *sp++; - case 2: *dp++ = *sp++; - case 1: *dp++ = *sp++; - len = 0; - break; - } - } /* end while */ - - } else { - /* - * This section is used to copy backwards, to handle any - * overlap. The alignment requires (tps&wmask) bytes to - * align. - */ - - - /* - * go to end of the memory to copy - */ - sp += len; - dp += len; - - while (len != 0) { - - switch (len) { - /* - * Here we do blocks of 8. Once the remaining count - * drops below 8, take the fast track to finish up. - */ - default: - *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; - *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; - *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; - *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; - len -= 16; - break; - - case 15: *--dp = *--sp; - case 14: *--dp = *--sp; - case 13: *--dp = *--sp; - case 12: *--dp = *--sp; - case 11: *--dp = *--sp; - case 10: *--dp = *--sp; - case 9: *--dp = *--sp; - case 8: *--dp = *--sp; - - case 7: *--dp = *--sp; - case 6: *--dp = *--sp; - case 5: *--dp = *--sp; - case 4: *--dp = *--sp; - case 3: *--dp = *--sp; - case 2: *--dp = *--sp; - case 1: *--dp = *--sp; - len = 0; - break; - } - } /* end while */ - } - - return; -} - - -/** - * NAME - * mem_prim_move16 - Move (handles overlap) memory - * - * SYNOPSIS - * #include "mem_primitives_lib.h" - * void - * mem_prim_move16(void *dest, const void *src, uint32_t len) - * - * DESCRIPTION - * Moves at most len uint16_ts from sp to dp. - * The destination may overlap with source. - * - * INPUT PARAMETERS - * dp - pointer to the memory that will be replaced by sp. - * - * sp - pointer to the memory that will be copied - * to dp - * - * len - maximum number uint16_t of sp that can be copied - * - * OUTPUT PARAMETERS - * dp - is updated - * - * RETURN VALUE - * none - * - */ -void -mem_prim_move16 (uint16_t *dp, const uint16_t *sp, uint32_t len) -{ - - /* - * Determine if we need to copy forward or backward (overlap) - */ - if (dp < sp) { - /* - * Copy forward. - */ - - while (len != 0) { - - switch (len) { - /* - * Here we do blocks of 8. Once the remaining count - * drops below 8, take the fast track to finish up. - */ - default: - *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; - *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; - *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; - *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; - len -= 16; - break; - - case 15: *dp++ = *sp++; - case 14: *dp++ = *sp++; - case 13: *dp++ = *sp++; - case 12: *dp++ = *sp++; - case 11: *dp++ = *sp++; - case 10: *dp++ = *sp++; - case 9: *dp++ = *sp++; - case 8: *dp++ = *sp++; - - case 7: *dp++ = *sp++; - case 6: *dp++ = *sp++; - case 5: *dp++ = *sp++; - case 4: *dp++ = *sp++; - case 3: *dp++ = *sp++; - case 2: *dp++ = *sp++; - case 1: *dp++ = *sp++; - len = 0; - break; - } - } /* end while */ - - } else { - /* - * This section is used to copy backwards, to handle any - * overlap. The alignment requires (tps&wmask) bytes to - * align. - */ - - /* - * go to end of the memory to copy - */ - sp += len; - dp += len; - - while (len != 0) { - - switch (len) { - /* - * Here we do blocks of 8. Once the remaining count - * drops below 8, take the fast track to finish up. - */ - default: - *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; - *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; - *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; - *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; - len -= 16; - break; - - case 15: *--dp = *--sp; - case 14: *--dp = *--sp; - case 13: *--dp = *--sp; - case 12: *--dp = *--sp; - case 11: *--dp = *--sp; - case 10: *--dp = *--sp; - case 9: *--dp = *--sp; - case 8: *--dp = *--sp; - - case 7: *--dp = *--sp; - case 6: *--dp = *--sp; - case 5: *--dp = *--sp; - case 4: *--dp = *--sp; - case 3: *--dp = *--sp; - case 2: *--dp = *--sp; - case 1: *--dp = *--sp; - len = 0; - break; - } - } /* end while */ - } - - return; -} - - -/** - * NAME - * mem_prim_move32 - Move (handles overlap) memory - * - * SYNOPSIS - * #include "mem_primitives_lib.h" - * void - * mem_prim_move32(void *dest, const void *src, uint32_t len) - * - * DESCRIPTION - * Moves at most len uint32_ts from sp to dp. - * The destination may overlap with source. - * - * INPUT PARAMETERS - * dp - pointer to the memory that will be replaced by sp. - * - * sp - pointer to the memory that will be copied - * to dp - * - * len - maximum number uint32_t of sp that can be copied - * - * OUTPUT PARAMETERS - * dp - is updated - * - * RETURN VALUE - * none - * - */ -void -mem_prim_move32 (uint32_t *dp, const uint32_t *sp, uint32_t len) -{ - - /* - * Determine if we need to copy forward or backward (overlap) - */ - if (dp < sp) { - /* - * Copy forward. - */ - - while (len != 0) { - - switch (len) { - /* - * Here we do blocks of 8. Once the remaining count - * drops below 8, take the fast track to finish up. - */ - default: - *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; - *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; - *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; - *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; *dp++ = *sp++; - len -= 16; - break; - - case 15: *dp++ = *sp++; - case 14: *dp++ = *sp++; - case 13: *dp++ = *sp++; - case 12: *dp++ = *sp++; - case 11: *dp++ = *sp++; - case 10: *dp++ = *sp++; - case 9: *dp++ = *sp++; - case 8: *dp++ = *sp++; - - case 7: *dp++ = *sp++; - case 6: *dp++ = *sp++; - case 5: *dp++ = *sp++; - case 4: *dp++ = *sp++; - case 3: *dp++ = *sp++; - case 2: *dp++ = *sp++; - case 1: *dp++ = *sp++; - len = 0; - break; - } - } /* end while */ - - } else { - /* - * This section is used to copy backwards, to handle any - * overlap. - */ - - /* - * go to end of the memory to copy - */ - sp += len; - dp += len; - - while (len != 0) { - - switch (len) { - /* - * Here we do blocks of 8. Once the remaining count - * drops below 8, take the fast track to finish up. - */ - default: - *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; - *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; - *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; - *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; *--dp = *--sp; - len -= 16; - break; - - case 15: *--dp = *--sp; - case 14: *--dp = *--sp; - case 13: *--dp = *--sp; - case 12: *--dp = *--sp; - case 11: *--dp = *--sp; - case 10: *--dp = *--sp; - case 9: *--dp = *--sp; - case 8: *--dp = *--sp; - - case 7: *--dp = *--sp; - case 6: *--dp = *--sp; - case 5: *--dp = *--sp; - case 4: *--dp = *--sp; - case 3: *--dp = *--sp; - case 2: *--dp = *--sp; - case 1: *--dp = *--sp; - len = 0; - break; - } - } /* end while */ - } - - return; -} diff --git a/src/backend/columnar/mem_primitives_lib.h b/src/backend/columnar/mem_primitives_lib.h deleted file mode 100644 index 26c83d858..000000000 --- a/src/backend/columnar/mem_primitives_lib.h +++ /dev/null @@ -1,74 +0,0 @@ -/*------------------------------------------------------------------ - * mem_primitives_lib.h - Unguarded Memory Copy Routines - * - * October 2008, Bo Berry - * - * Copyright (c) 2008-2011 by Cisco Systems, Inc - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - *------------------------------------------------------------------ - */ - -#ifndef __MEM_PRIMITIVES_LIB_H__ -#define __MEM_PRIMITIVES_LIB_H__ - -#include "safeclib_private.h" - -/* - * These are prototypes for _unguarded_ memory routines. The caller must - * validate all parameters prior to invocation. Useful for diagnostics - * and system initialization processing. - */ - -/* moves (handles overlap) memory */ -extern void -mem_prim_move(void *dest, const void *src, uint32_t length); - - -/* uint8_t moves (handles overlap) memory */ -extern void -mem_prim_move8(uint8_t *dest, const uint8_t *src, uint32_t length); - -/* uint16_t moves (handles overlap) memory */ -extern void -mem_prim_move16(uint16_t *dest, const uint16_t *src, uint32_t length); - -/* uint32_t moves (handles overlap) memory */ -extern void -mem_prim_move32(uint32_t *dest, const uint32_t *src, uint32_t length); - - -/* set bytes */ -extern void -mem_prim_set(void *dest, uint32_t dmax, uint8_t value); - -/* set uint16_ts */ -extern void -mem_prim_set16(uint16_t *dest, uint32_t dmax, uint16_t value); - -/* set uint32_ts */ -extern void -mem_prim_set32(uint32_t *dest, uint32_t dmax, uint32_t value); - - -#endif /* __MEM_PRIMITIVES_LIB_H__ */ diff --git a/src/backend/columnar/memcpy_s.c b/src/backend/columnar/memcpy_s.c deleted file mode 100644 index a5c77b7c6..000000000 --- a/src/backend/columnar/memcpy_s.c +++ /dev/null @@ -1,163 +0,0 @@ -/*------------------------------------------------------------------ - * memcpy_s - * - * October 2008, Bo Berry - * - * Copyright (c) 2008-2011 Cisco Systems - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - *------------------------------------------------------------------ - */ - -#include "safeclib_private.h" -#include "safe_mem_constraint.h" -#include "mem_primitives_lib.h" -#include "safe_mem_lib.h" - - -/** - * NAME - * memcpy_s - * - * SYNOPSIS - * #include "safe_mem_lib.h" - * errno_t - * memcpy_s(void *dest, rsize_t dmax, const void *src, rsize_t smax) - * - * DESCRIPTION - * This function copies at most smax bytes from src to dest, up to - * dmax. The size values are unsigned values. - * - * AR: Dave - verify ISO spec requires unsigned - * - * SPECIFIED IN - * ISO/IEC JTC1 SC22 WG14 N1172, Programming languages, environments - * and system software interfaces, Extensions to the C Library, - * Part I: Bounds-checking interfaces - * - * INPUT PARAMETERS - * dest pointer to memory that will be replaced by src. - * - * dmax maximum length of the resulting dest - * - * src pointer to the memory that will be copied to dest - * - * smax maximum number bytes of src to copy - * - * OUTPUT PARAMETERS - * dest is updated - * - * RUNTIME CONSTRAINTS - * Neither dest nor src shall be a null pointer. - * Neither dmax nor smax shall be zero. - * dmax shall not be greater than RSIZE_MAX_MEM. - * smax shall not be greater than dmax. - * Copying shall not take place between regions that overlap. - * If there is a runtime-constraint violation, the memcpy_s function - * stores zeros in the first dmax bytes of the region pointed to - * by dest if dest is not a null pointer and smax is valid. - * - * RETURN VALUE - * EOK successful operation - * ESNULLP NULL pointer - * ESZEROL zero length - * ESLEMAX length exceeds max limit - * ESOVRLP source memory overlaps destination - * - * ALSO SEE - * memcpy16_s(), memcpy32_s(), memmove_s(), memmove16_s(), - * memmove32_s() - * - */ -errno_t -memcpy_s (void *dest, rsize_t dmax, const void *src, rsize_t smax) -{ - uint8_t *dp; - const uint8_t *sp; - - dp = dest; - sp = src; - - if (dp == NULL) { - invoke_safe_mem_constraint_handler("memcpy_s: dest is NULL", - NULL, ESNULLP); - return RCNEGATE(ESNULLP); - } - - if (dmax == 0) { - invoke_safe_mem_constraint_handler("memcpy_s: dmax is 0", - NULL, ESZEROL); - return RCNEGATE(ESZEROL); - } - - if (dmax > RSIZE_MAX_MEM) { - invoke_safe_mem_constraint_handler("memcpy_s: dmax exceeds max", - NULL, ESLEMAX); - return RCNEGATE(ESLEMAX); - } - - // AR: This is not a requirement according to the ISO spec - Change? - // AR: documentation needed on use of the error handlers - - // AR: default err handler should output to stderr on DEBUG - // AR: update docs to define return RCNEGATE of the error number - if (smax == 0) { - mem_prim_set(dp, dmax, 0); - invoke_safe_mem_constraint_handler("memcpy_s: smax is 0", - NULL, ESZEROL); - return RCNEGATE(ESZEROL); - } - - if (smax > dmax) { - mem_prim_set(dp, dmax, 0); - invoke_safe_mem_constraint_handler("memcpy_s: smax exceeds dmax", - NULL, ESLEMAX); - return RCNEGATE(ESLEMAX); - } - - if (sp == NULL) { - mem_prim_set(dp, dmax, 0); - invoke_safe_mem_constraint_handler("memcpy_s: src is NULL", - NULL, ESNULLP); - return RCNEGATE(ESNULLP); - } - - - /* - * overlap is undefined behavior, do not allow - */ - if( ((dp > sp) && (dp < (sp+smax))) || - ((sp > dp) && (sp < (dp+dmax))) ) { - mem_prim_set(dp, dmax, 0); - invoke_safe_mem_constraint_handler("memcpy_s: overlap undefined", - NULL, ESOVRLP); - return RCNEGATE(ESOVRLP); - } - - /* - * now perform the copy - */ - mem_prim_move(dp, sp, smax); - - return RCNEGATE(EOK); -} -EXPORT_SYMBOL(memcpy_s) diff --git a/src/backend/columnar/safe_mem_constraint.c b/src/backend/columnar/safe_mem_constraint.c deleted file mode 100644 index 9fafe9e89..000000000 --- a/src/backend/columnar/safe_mem_constraint.c +++ /dev/null @@ -1,142 +0,0 @@ -/*------------------------------------------------------------------ - * safe_mem_constraint.c - * - * October 2008, Bo Berry - * 2012, Jonathan Toppins - * - * Copyright (c) 2008-2012 Cisco Systems - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - *------------------------------------------------------------------ - */ - -#include "safeclib_private.h" -#include "safe_mem_constraint.h" -#include "safe_mem_lib.h" - - -static constraint_handler_t mem_handler = NULL; - - -/** - * NAME - * set_mem_constraint_handler_s - * - * SYNOPSIS - * #include "safe_mem_lib.h" - * constraint_handler_t - * set_mem_constraint_handler_straint_handler_t handler) - * - * DESCRIPTION - * The set_mem_constraint_handler_s function sets the runtime-constraint - * handler to be handler. The runtime-constraint handler is the function to - * be called when a library function detects a runtime-constraint - * order: - * 1. A pointer to a character string describing the - * runtime-constraint violation. - * 2. A null pointer or a pointer to an implementation defined - * object. - * 3. If the function calling the handler has a return type declared - * as errno_t, the return value of the function is passed. - * Otherwise, a positive value of type errno_t is passed. - * The implementation has a default constraint handler that is used if no - * calls to the set_constraint_handler_s function have been made. The - * behavior of the default handler is implementation-defined, and it may - * cause the program to exit or abort. If the handler argument to - * set_constraint_handler_s is a null pointer, the implementation default - * handler becomes the current constraint handler. - * - * SPECIFIED IN - * ISO/IEC JTC1 SC22 WG14 N1172, Programming languages, environments - * and system software interfaces, Extensions to the C Library, - * Part I: Bounds-checking interfaces - * - * INPUT PARAMETERS - * *msg Pointer to the message describing the error - * - * *ptr Pointer to aassociated data. Can be NULL. - * - * error The error code encountered. - * - * OUTPUT PARAMETERS - * none - * - * RETURN VALUE - * none - * - * ALSO SEE - * set_str_constraint_handler_s() - */ -constraint_handler_t -set_mem_constraint_handler_s (constraint_handler_t handler) -{ - constraint_handler_t prev_handler = mem_handler; - if (NULL == handler) { - mem_handler = sl_default_handler; - } else { - mem_handler = handler; - } - return prev_handler; -} -EXPORT_SYMBOL(set_mem_constraint_handler_s) - - -/** - * NAME - * invoke_safe_mem_constraint_handler - * - * SYNOPSIS - * #include "safe_mem_constraint.h" - * void - * invoke_safe_mem_constraint_handler(const char *msg, - * void *ptr, - * errno_t error) - * - * DESCRIPTION - * Invokes the currently set constraint handler or the default. - * - * INPUT PARAMETERS - * *msg Pointer to the message describing the error - * - * *ptr Pointer to aassociated data. Can be NULL. - * - * error The error code encountered. - * - * OUTPUT PARAMETERS - * none - * - * RETURN VALUE - * none - * - */ -void -invoke_safe_mem_constraint_handler (const char *msg, - void *ptr, - errno_t error) -{ - if (NULL != mem_handler) { - mem_handler(msg, ptr, error); - } else { - sl_default_handler(msg, ptr, error); - } -} diff --git a/src/backend/columnar/safe_mem_constraint.h b/src/backend/columnar/safe_mem_constraint.h deleted file mode 100644 index 7ec898e1f..000000000 --- a/src/backend/columnar/safe_mem_constraint.h +++ /dev/null @@ -1,46 +0,0 @@ -/*------------------------------------------------------------------ - * safe_mem_constraint.h - * - * October 2008, Bo Berry - * - * Copyright (c) 2008, 2009 by Cisco Systems, Inc. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - *------------------------------------------------------------------ - */ - -#ifndef __SAFE_MEM_CONSTRAINT_H__ -#define __SAFE_MEM_CONSTRAINT_H__ - -#include "safeclib_private.h" - -/* - * Function used by the libraries to invoke the registered - * runtime-constraint handler. Always needed. - */ -extern void invoke_safe_mem_constraint_handler( - const char *msg, - void *ptr, - errno_t error); - -#endif /* __SAFE_MEM_CONSTRAINT_H__ */ diff --git a/src/backend/columnar/safe_str_constraint.c b/src/backend/columnar/safe_str_constraint.c deleted file mode 100644 index d57058f93..000000000 --- a/src/backend/columnar/safe_str_constraint.c +++ /dev/null @@ -1,146 +0,0 @@ -/*------------------------------------------------------------------ - * safe_str_constraint.c - * - * October 2008, Bo Berry - * 2012, Jonathan Toppins - * - * Copyright (c) 2008, 2009, 2012 Cisco Systems - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - *------------------------------------------------------------------ - */ - -#include "safeclib_private.h" -#include "safe_str_constraint.h" -#include "safe_str_lib.h" - - -static constraint_handler_t str_handler = NULL; - - -/** - * NAME - * set_str_constraint_handler_s - * - * SYNOPSIS - * #include "safe_str_lib.h" - * constraint_handler_t - * set_str_constraint_handler_s(constraint_handler_t handler) - * - * DESCRIPTION - * The set_str_constraint_handler_s function sets the runtime-constraint - * handler to be handler. The runtime-constraint handler is the function to - * be called when a library function detects a runtime-constraint - * violation. Only the most recent handler registered with - * set_str_constraint_handler_s is called when a runtime-constraint - * violation occurs. - * When the handler is called, it is passed the following arguments in - * the following order: - * 1. A pointer to a character string describing the - * runtime-constraint violation. - * 2. A null pointer or a pointer to an implementation defined - * object. - * 3. If the function calling the handler has a return type declared - * as errno_t, the return value of the function is passed. - * Otherwise, a positive value of type errno_t is passed. - * The implementation has a default constraint handler that is used if no - * calls to the set_constraint_handler_s function have been made. The - * behavior of the default handler is implementation-defined, and it may - * cause the program to exit or abort. If the handler argument to - * set_constraint_handler_s is a null pointer, the implementation default - * handler becomes the current constraint handler. - * - * SPECIFIED IN - * ISO/IEC JTC1 SC22 WG14 N1172, Programming languages, environments - * and system software interfaces, Extensions to the C Library, - * Part I: Bounds-checking interfaces - * - * INPUT PARAMETERS - * *msg Pointer to the message describing the error - * - * *ptr Pointer to aassociated data. Can be NULL. - * - * error The error code encountered. - * - * OUTPUT PARAMETERS - * none - * - * RETURN VALUE - * none - * - * ALSO SEE - * set_str_constraint_handler_s() - */ -constraint_handler_t -set_str_constraint_handler_s (constraint_handler_t handler) -{ - constraint_handler_t prev_handler = str_handler; - if (NULL == handler) { - str_handler = sl_default_handler; - } else { - str_handler = handler; - } - return prev_handler; -} -EXPORT_SYMBOL(set_str_constraint_handler_s) - - -/** - * NAME - * invoke_safe_str_constraint_handler - * - * SYNOPSIS - * #include "safe_str_constraint.h" - * void - * invoke_safe_str_constraint_handler (const char *msg, - * void *ptr, - * errno_t error) - * - * DESCRIPTION - * Invokes the currently set constraint handler or the default. - * - * INPUT PARAMETERS - * *msg Pointer to the message describing the error - * - * *ptr Pointer to aassociated data. Can be NULL. - * - * error The error code encountered. - * - * OUTPUT PARAMETERS - * none - * - * RETURN VALUE - * none - * - */ -void -invoke_safe_str_constraint_handler (const char *msg, - void *ptr, - errno_t error) -{ - if (NULL != str_handler) { - str_handler(msg, ptr, error); - } else { - sl_default_handler(msg, ptr, error); - } -} diff --git a/src/backend/columnar/safe_str_constraint.h b/src/backend/columnar/safe_str_constraint.h deleted file mode 100644 index a1fba3e7e..000000000 --- a/src/backend/columnar/safe_str_constraint.h +++ /dev/null @@ -1,78 +0,0 @@ -/*------------------------------------------------------------------ - * safe_str_constraint.h - * - * October 2008, Bo Berry - * - * Copyright (c) 2008-2011 Cisco Systems - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - *------------------------------------------------------------------ - */ - -#ifndef __SAFE_STR_CONSTRAINT_H__ -#define __SAFE_STR_CONSTRAINT_H__ - -#include "safeclib_private.h" - -/* - * Function used by the libraries to invoke the registered - * runtime-constraint handler. Always needed. - */ -extern void invoke_safe_str_constraint_handler( - const char *msg, - void *ptr, - errno_t error); - - -/* - * Safe C Lib internal string routine to consolidate error handling - */ -static inline void handle_error(char *orig_dest, rsize_t orig_dmax, - char *err_msg, errno_t err_code) -{ -#ifdef SAFECLIB_STR_NULL_SLACK - /* null string to eliminate partial copy */ - while (orig_dmax) { *orig_dest = '\0'; orig_dmax--; orig_dest++; } -#else - *orig_dest = '\0'; -#endif - - invoke_safe_str_constraint_handler(err_msg, NULL, err_code); - return; -} - -static inline void handle_wc_error(wchar_t *orig_dest, rsize_t orig_dmax, - char *err_msg, errno_t err_code) -{ -#ifdef SAFECLIB_STR_NULL_SLACK - /* null string to eliminate partial copy */ - while (orig_dmax) { *orig_dest = L'\0'; orig_dmax--; orig_dest++; } -#else - *orig_dest = L'\0'; -#endif - - invoke_safe_str_constraint_handler(err_msg, NULL, err_code); - return; -} - -#endif /* __SAFE_STR_CONSTRAINT_H__ */ diff --git a/src/backend/columnar/safeclib b/src/backend/columnar/safeclib new file mode 120000 index 000000000..c4da5b7ad --- /dev/null +++ b/src/backend/columnar/safeclib @@ -0,0 +1 @@ +../../../vendor/safestringlib/safeclib/ \ No newline at end of file diff --git a/src/backend/columnar/safeclib_private.h b/src/backend/columnar/safeclib_private.h deleted file mode 100644 index 89ee97727..000000000 --- a/src/backend/columnar/safeclib_private.h +++ /dev/null @@ -1,94 +0,0 @@ -/*------------------------------------------------------------------ - * safeclib_private.h - Internal library references - * - * 2012, Jonathan Toppins - * - * Copyright (c) 2012, 2013 by Cisco Systems, Inc - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - *------------------------------------------------------------------ - */ - -#ifndef __SAFECLIB_PRIVATE_H__ -#define __SAFECLIB_PRIVATE_H__ - -#include "citus_config.h" -#ifdef __KERNEL__ -/* linux kernel environment */ - -#include -#include -#include - -#define RCNEGATE(x) ( -(x) ) - -#define slprintf(...) printk(KERN_EMERG __VA_ARGS__) -#define slabort() -#ifdef DEBUG -#define sldebug_printf(...) printk(KERN_DEBUG __VA_ARGS__) -#endif - -#else /* !__KERNEL__ */ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#ifdef STDC_HEADERS -# include -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_LIMITS_H -# include -#endif - -#define EXPORT_SYMBOL(sym) -#define RCNEGATE(x) (x) - -#define slprintf(...) fprintf(stderr, __VA_ARGS__) -#define slabort() abort() -#ifdef DEBUG -#define sldebug_printf(...) printf(__VA_ARGS__) -#endif - -#endif /* __KERNEL__ */ - -#ifndef sldebug_printf -#define sldebug_printf(...) -#endif - -#include "safe_lib.h" - -#endif /* __SAFECLIB_PRIVATE_H__ */