aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/PropSet.h25
1 files changed, 20 insertions, 5 deletions
diff --git a/include/PropSet.h b/include/PropSet.h
index 4e30c37c5..ed580ee96 100644
--- a/include/PropSet.h
+++ b/include/PropSet.h
@@ -11,12 +11,16 @@ bool EqualCaseInsensitive(const char *a, const char *b);
// Define another string class.
// While it would be 'better' to use std::string, that doubles the executable size.
-inline char *StringDup(const char *s) {
+inline char *StringDup(const char *s, int len=-1) {
if (!s)
return 0;
- char *sNew = new char[strlen(s) + 1];
- if (sNew)
- strcpy(sNew, s);
+ if (len == -1)
+ len = strlen(s);
+ char *sNew = new char[len + 1];
+ if (sNew) {
+ strncpy(sNew, s, len);
+ sNew[len] = '\0';
+ }
return sNew;
}
@@ -103,9 +107,18 @@ public:
}
};
+unsigned int HashString(const char *s);
+
+struct Property {
+ unsigned int hash;
+ char *key;
+ char *val;
+ Property() : hash(0), key(0), val(0) {}
+};
+
class PropSet {
private:
- char **vals;
+ Property *properties;
int size;
int used;
void EnsureCanAddEntry();
@@ -116,6 +129,8 @@ public:
void Set(const char *key, const char *val);
void Set(char *keyval);
SString Get(const char *key);
+ SString GetExpanded(const char *key);
+ SString Expand(const char *withvars);
int GetInt(const char *key, int defaultValue=0);
SString GetWild(const char *keybase, const char *filename);
SString GetNewExpand(const char *keybase, const char *filename);