1 /*============================================================================== 2 * 3 * PUBLIC DOMAIN NOTICE 4 * National Center for Biotechnology Information 5 * 6 * This software/database is a "United States Government Work" under the 7 * terms of the United States Copyright Act. It was written as part of 8 * the author's official duties as a United States Government employee and 9 * thus cannot be copyrighted. This software/database is freely available 10 * to the public for use. The National Library of Medicine and the U.S. 11 * Government have not placed any restriction on its use or reproduction. 12 * 13 * Although all reasonable efforts have been taken to ensure the accuracy 14 * and reliability of the software and data, the NLM and the U.S. 15 * Government do not and cannot warrant the performance or results that 16 * may be obtained by using this software or data. The NLM and the U.S. 17 * Government disclaim all warranties, express or implied, including 18 * warranties of performance, merchantability or fitness for any particular 19 * purpose. 20 * 21 * Please cite the author in any work or product based on this material. 22 * 23 * Author: Kurt Rodarmer 24 * 25 * =========================================================================== 26 * 27 */ 28 29 #pragma once 30 31 #include <stddef.h> 32 33 namespace ncbi 34 { 35 /** 36 * @fn memset_while_respecting_language_semantics 37 * @brief what is supposed to be memset_s but isn't always available 38 * @param dest pointer to destination block of memory 39 * @param dsize the number of bytes pointed to by dest 40 * @param ch the byte value to give dest memory 41 * @param count the number of bytes to actually set 42 * @param str a const char version of dest 43 * 44 * hopefully this is a memset that doesn't get easily optimized out 45 * our wonderful C/C++ stewards have seen proper the introduction of 46 * very clever optimizations that unfortunately change the semantics 47 * of the language in ways that can be danced around due to the language 48 * not having defined behavior with regard to de-allocated memory. 49 * 50 * the extra parameter "str" should have the same address as "dest" 51 * but is passed in so that the compiler can't perform aliasing tricks. 52 * it is there for potential examination for proper operation. 53 */ 54 void memset_while_respecting_language_semantics ( void * dest, size_t dsize, 55 int ch, size_t count, const char * str ); 56 } 57