395
edits
Philosopher (talk | contribs) m (Fill in the sanitize function (you can remove the security if you want). Also, it is okay for getprop to return nil for non-existent properties.) |
|||
Line 92: | Line 92: | ||
var sanitize = func(p) { | var sanitize = func(p) { | ||
if (!p) die(); | |||
parts = split(p, "/"); | |||
for (var i=0; i<size(parts); i+=1) { | |||
if (parts[i] == "") { | |||
parts = parts[:i-1] ~ parts[i+1:]; | |||
i-=1; | |||
} | |||
for (j=0; j<size(parts[i]); j+=1) | |||
if (parts[i][j] == "[") break; | |||
if (parts[i][j] != `-` and !isalpha(parts[i][j]) and | |||
parts[i][j] != `_` and !isdigit(parts[i][j]) and | |||
parts[i][j] != `.`) die("bad character in name "~parts[i]~" at index "~j); | |||
if (j == size(parts[i])) | |||
parts[i] ~= "[0]"; | |||
elsif (parts[i][-1] != "]") die("bad index specifier") | |||
} | |||
var p = "/"; | |||
foreach (var part; parts) | |||
p ~= part; | |||
return p; | |||
} | } | ||
# wrappers for the FG setprop/getprop APIs: | # wrappers for the FG setprop/getprop APIs: | ||
var setprop = func(p, value) tree[ sanitize(p) ] = value; | var setprop = func(p, value) tree[ sanitize(p) ] = value; | ||
var getprop = func(p) return tree[ sanitize(p) ] | var getprop = func(p) return tree[ sanitize(p) ]; | ||
# init your tree: | # init your tree: |
edits