diff options
author | Neil <nyamatongwe@gmail.com> | 2013-12-22 18:00:45 +1100 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2013-12-22 18:00:45 +1100 |
commit | ca1a5ea845c283a9c84fd2ae9f6d152cca354183 (patch) | |
tree | d851b7c06cc7763849d504b58797199c9032b441 /lexlib/StringCopy.h | |
parent | 0b56a6704d1c64644d5bfef318806f8490d649ec (diff) | |
download | scintilla-mirror-ca1a5ea845c283a9c84fd2ae9f6d152cca354183.tar.gz |
Avoid unsafe strcpy, strncpy, and strcat replacing with safer functions which
guaranty termination where possible.
Diffstat (limited to 'lexlib/StringCopy.h')
-rw-r--r-- | lexlib/StringCopy.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/lexlib/StringCopy.h b/lexlib/StringCopy.h new file mode 100644 index 000000000..caca49911 --- /dev/null +++ b/lexlib/StringCopy.h @@ -0,0 +1,33 @@ +// Scintilla source code edit control +/** @file StringCopy.h + ** Safe string copy function which always NUL terminates. + **/ +// Copyright 2013 by Neil Hodgson <neilh@scintilla.org> +// The License.txt file describes the conditions under which this software may be distributed. + +#ifndef STRINGCOPY_H +#define STRINGCOPY_H + +#ifdef SCI_NAMESPACE +namespace Scintilla { +#endif + +// Safer version of string copy functions like strcpy, wcsncpy, etc. +// Instantiate over fixed length strings of both char and wchar_t. +// May truncate if source doesn't fit into dest with room for NUL. + +template <typename T, size_t count> +void StringCopy(T (&dest)[count], const T* source) { + for (size_t i=0; i<count; i++) { + dest[i] = source[i]; + if (!source[i]) + break; + } + dest[count-1] = 0; +} + +#ifdef SCI_NAMESPACE +} +#endif + +#endif |