if !debug then Syslog.notice "remote call: set_variable %s" name;
try
- (* Don't permit certain names. *)
- if name = "JOBSERIAL" then
- failwith "JOBSERIAL variable cannot be set";
-
- let len = String.length name in
- if len = 0 then
- failwith "variable name is an empty string";
- if name.[0] <> '_' && not (isalpha name.[0]) then
- failwith "variable name must start with alphabetic character or underscore";
-
- let rec loop i =
- if i >= len then ()
- else if name.[i] <> '_' && not (isalnum name.[i]) then
- failwith "variable name contains non-alphanumeric non-underscore character"
- else loop (i+1)
- in
- loop 1;
+ check_valid_variable_name name;
let value = variable_of_rpc value in
state := Whenstate.set_variable !state name value;
let t0 = Date.make 1970 1 1 in
let t' = Date.add t0 (Date.Period.month months) in
Date.to_unixfloat t'
+
+let check_valid_variable_name name =
+ (* Don't permit certain names. *)
+ if name = "JOBSERIAL" then
+ failwith "JOBSERIAL variable cannot be set";
+
+ let len = String.length name in
+ if len = 0 then
+ failwith "variable name is an empty string";
+ if name.[0] <> '_' && not (isalpha name.[0]) then
+ failwith "variable name must start with alphabetic character or underscore";
+
+ let rec loop i =
+ if i >= len then ()
+ else if name.[i] <> '_' && not (isalnum name.[i]) then
+ failwith "variable name contains non-alphanumeric non-underscore character"
+ else loop (i+1)
+ in
+ loop 1
midnight UTC on the 1st day of the year when
[(y - 1970) mod i == 0]. This returns midnight on the
1st day of the next year > t. *)
+
+val check_valid_variable_name : string -> unit
+(** Check that [name] is a valid variable name that users are permitted
+ to set, and raise [Failure] if it is not. *)