-////////////////////////////////////////////////////////////////////////////////
-
-// Author: Andy Rushton
-// Copyright: (c) Southampton University 1999-2004
-// (c) Andy Rushton 2004-2009
-// License: BSD License, see ../docs/license.html
-
-// Notes:
-
-// Feb 2007: Rewritten in terms of platform-specific fixes to the
-// buffer-overflow problem. Using native functions for this has the added
-// benefit of giving access to other features of the C-runtime such as Unicode
-// support.
-
-////////////////////////////////////////////////////////////////////////////////
-
-#include "dprintf.hpp"
-#include <stdio.h>
-#include <limits.h>
-#include <float.h>
-#include <ctype.h>
-#include <stdlib.h>
-
-////////////////////////////////////////////////////////////////////////////////
-
-namespace stlplus
-{
-
-////////////////////////////////////////////////////////////////////////////////
-
- int vdprintf(std::string& formatted, const char* format, va_list args)
- {
-#ifdef MSWINDOWS
- int length = 0;
- char* buffer = 0;
- for(int buffer_length = 256; ; buffer_length*=2)
- {
- buffer = (char*)malloc(buffer_length);
- if (!buffer) return -1;
- length = _vsnprintf(buffer, buffer_length-1, format, args);
- if (length >= 0)
- {
- buffer[length] = 0;
- formatted += std::string(buffer);
- free(buffer);
- break;
- }
- free(buffer);
- }
- return length;
-#else
- char* buffer = 0;
- int length = vasprintf(&buffer, format, args);
- if (!buffer) return -1;
- if (length >= 0)
- formatted += std::string(buffer);
- free(buffer);
- return length;
-#endif
- }
-
- int dprintf(std::string& formatted, const char* format, ...)
- {
- va_list args;
- va_start(args, format);
- int result = vdprintf(formatted, format, args);
- va_end(args);
- return result;
- }
-
- std::string vdformat(const char* format, va_list args) throw(std::invalid_argument)
- {
- std::string formatted;
- int length = vdprintf(formatted, format, args);
- if (length < 0) throw std::invalid_argument("dprintf");
- return formatted;
- }
-
- std::string dformat(const char* format, ...) throw(std::invalid_argument)
- {
- std::string formatted;
- va_list args;
- va_start(args, format);
- int length = vdprintf(formatted, format, args);
- va_end(args);
- if (length < 0) throw std::invalid_argument("dprintf");
- return formatted;
- }
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // end namespace stlplus
+////////////////////////////////////////////////////////////////////////////////\r
+\r
+// Author: Andy Rushton\r
+// Copyright: (c) Southampton University 1999-2004\r
+// (c) Andy Rushton 2004 onwards\r
+// License: BSD License, see ../docs/license.html\r
+\r
+// Notes:\r
+\r
+// Feb 2007: Rewritten in terms of platform-specific fixes to the\r
+// buffer-overflow problem. Using native functions for this has the added\r
+// benefit of giving access to other features of the C-runtime such as Unicode\r
+// support.\r
+\r
+////////////////////////////////////////////////////////////////////////////////\r
+\r
+#include "dprintf.hpp"\r
+#include <stdio.h>\r
+#include <limits.h>\r
+#include <float.h>\r
+#include <ctype.h>\r
+#include <stdlib.h>\r
+\r
+////////////////////////////////////////////////////////////////////////////////\r
+\r
+namespace stlplus\r
+{\r
+\r
+////////////////////////////////////////////////////////////////////////////////\r
+\r
+ int vdprintf(std::string& formatted, const char* format, va_list args)\r
+ {\r
+#ifdef MSWINDOWS\r
+ int length = 0;\r
+ char* buffer = 0;\r
+ for(int buffer_length = 256; ; buffer_length*=2)\r
+ {\r
+ buffer = (char*)malloc(buffer_length);\r
+ if (!buffer) return -1;\r
+ length = _vsnprintf(buffer, buffer_length-1, format, args);\r
+ if (length >= 0)\r
+ {\r
+ buffer[length] = 0;\r
+ formatted += std::string(buffer);\r
+ free(buffer);\r
+ break;\r
+ }\r
+ free(buffer);\r
+ }\r
+ return length;\r
+#else\r
+ char* buffer = 0;\r
+ int length = vasprintf(&buffer, format, args);\r
+ if (!buffer) return -1;\r
+ if (length >= 0)\r
+ formatted += std::string(buffer);\r
+ free(buffer);\r
+ return length;\r
+#endif\r
+ }\r
+\r
+ int dprintf(std::string& formatted, const char* format, ...)\r
+ {\r
+ va_list args;\r
+ va_start(args, format);\r
+ int result = vdprintf(formatted, format, args);\r
+ va_end(args);\r
+ return result;\r
+ }\r
+\r
+ std::string vdformat(const char* format, va_list args) throw(std::invalid_argument)\r
+ {\r
+ std::string formatted;\r
+ int length = vdprintf(formatted, format, args);\r
+ if (length < 0) throw std::invalid_argument("dprintf");\r
+ return formatted;\r
+ }\r
+\r
+ std::string dformat(const char* format, ...) throw(std::invalid_argument)\r
+ {\r
+ std::string formatted;\r
+ va_list args;\r
+ va_start(args, format);\r
+ int length = vdprintf(formatted, format, args);\r
+ va_end(args);\r
+ if (length < 0) throw std::invalid_argument("dprintf");\r
+ return formatted;\r
+ }\r
+\r
+////////////////////////////////////////////////////////////////////////////////\r
+\r
+} // end namespace stlplus\r