diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/String.cc | 14 | ||||
-rw-r--r-- | lib/generic.cc | 20 |
2 files changed, 27 insertions, 7 deletions
diff --git a/lib/String.cc b/lib/String.cc index 4d7b0ff..a2c8829 100644 --- a/lib/String.cc +++ b/lib/String.cc @@ -130,8 +130,6 @@ const char * String::set(const char * s, ...) { return t; } -/* This causes a warning: cannot pass objects of type `const String' through `...' - but it is not really a problem. */ va_start(ap, s); #ifdef HAVE_VSNPRINTF vsnprintf(t, BUFSIZ, s, ap); @@ -145,14 +143,14 @@ const char * String::set(const char * s, ...) { return t; } -const char * String::set(const String & s, ...) { +const char * String::set(const ugly_string & s, ...) { va_list ap; va_start(ap, s); #ifdef HAVE_VSNPRINTF - vsnprintf(t, BUFSIZ, s.str, ap); + vsnprintf(t, BUFSIZ, s.p, ap); #else - vsprintf(t, s.str, ap); + vsprintf(t, s.p, ap); #endif free(str); str = Base::strdup(t); @@ -416,6 +414,12 @@ String operator+(const char * a, const String & b) { return String(a) + b; } +String::operator ugly_string() const { + ugly_string r; + r.p = str; + return r; +} + String & String::toupper() { for (int i = 0; i < strlen(); i++) { str[i] = ::toupper(str[i]); diff --git a/lib/generic.cc b/lib/generic.cc index 1f6b61d..6e6afb9 100644 --- a/lib/generic.cc +++ b/lib/generic.cc @@ -28,7 +28,7 @@ char verbosity = 0; char * heads[] = {"EE", "--", "WW", "II"}; -void Base::printm(int level, String m, ...) { +void Base::printm(int level, const ugly_string & m, ...) { va_list ap; if (verbosity < level) { @@ -40,7 +40,23 @@ void Base::printm(int level, String m, ...) { } va_start(ap, m); - vfprintf(stderr, m.to_charp(), ap); + vfprintf(stderr, m.p, ap); + va_end(ap); +} + +void Base::printm(int level, const char * m, ...) { + va_list ap; + + if (verbosity < level) { + return; + } + + if (level >= 0) { + fprintf(stderr, "(%s) ", heads[level]); + } + + va_start(ap, m); + vfprintf(stderr, m, ap); va_end(ap); } |