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