changeset 6af9ce00486e in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=6af9ce00486e
description:
cprintf: properly deal with pointer types
diffstat:
1 file changed, 7 insertions(+)
src/base/varargs.hh | 7 +++++++
diffs (59 lines):
diff -r 11a1079070b6 -r 6af9ce00486e src/base/varargs.hh
--- a/src/base/varargs.hh Fri Oct 10 21:45:34 2008 -0700
+++ b/src/base/varargs.hh Fri Oct 10 21:45:35 2008 -0700
@@ -147,6 +147,20 @@
}
};
+template <typename T, class RECV>
+struct Any<T *, RECV> : public Base<RECV>
+{
+ const T *argument;
+
+ Any(const T *arg) : argument(arg) {}
+
+ virtual void
+ add_arg(RECV &receiver) const
+ {
+ receiver.add_arg(argument);
+ }
+};
+
template <class RECV>
struct Argument : public RefCountingPtr<Base<RECV> >
{
@@ -156,6 +170,8 @@
Argument(const Null &null) { }
template <typename T>
Argument(const T& arg) : Base(new Any<T, RECV>(arg)) { }
+ template <typename T>
+ Argument(const T* arg) : Base(new Any<T *, RECV>(arg)) { }
void
add_arg(RECV &receiver) const
diff -r 11a1079070b6 -r 6af9ce00486e src/unittest/cprintftest.cc
--- a/src/unittest/cprintftest.cc Fri Oct 10 21:45:34 2008 -0700
+++ b/src/unittest/cprintftest.cc Fri Oct 10 21:45:35 2008 -0700
@@ -34,6 +34,7 @@
#include <sstream>
#include "base/cprintf.hh"
+#include "base/misc.hh"
using namespace std;
@@ -42,6 +43,14 @@
{
char foo[] = "foo";
cprintf("%s\n", foo);
+
+ string _bar = "asdfkhasdlkfjhasdlkfhjalksdjfhalksdjhfalksdjfhalksdjhf";
+ int length = 11;
+ char bar[length + 1];
+ bar[length] = 0;
+
+ memcpy(bar, _bar.c_str(), length);
+ warn("%s\n", bar);
cprintf("%d\n", 'A');
cprintf("%shits%%s + %smisses%%s\n", "test", "test");
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev