aboutsummaryrefslogtreecommitdiffhomepage
path: root/lexlib/StringCopy.h
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2013-12-22 18:00:45 +1100
committerNeil <nyamatongwe@gmail.com>2013-12-22 18:00:45 +1100
commitca1a5ea845c283a9c84fd2ae9f6d152cca354183 (patch)
treed851b7c06cc7763849d504b58797199c9032b441 /lexlib/StringCopy.h
parent0b56a6704d1c64644d5bfef318806f8490d649ec (diff)
downloadscintilla-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.h33
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