blob: 9ad72e27d24dde095d4f0f65ae68c7e124d2242e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
namespace Wixl {
public errordomain Error {
FAILED
}
namespace UUID {
[CCode (cname = "uuid_generate", cheader_filename = "uuid/uuid.h")]
internal extern static void generate ([CCode (array_length = false)] uchar[] uuid);
[CCode (cname = "uuid_unparse", cheader_filename = "uuid/uuid.h")]
internal extern static void unparse ([CCode (array_length = false)] uchar[] uuid,
[CCode (array_length = false)] uchar[] output);
}
string uuid_generate () {
var udn = new uchar[50];
var id = new uchar[16];
UUID.generate (id);
UUID.unparse (id, udn);
return (string) udn;
}
int enum_from_string (Type t, string str) throws GLib.Error {
var k = (EnumClass)t.class_ref ();
var v = k.get_value_by_nick (str);
if (v == null)
throw new Wixl.Error.FAILED ("Can't convert string to enum");
return v.value;
}
string add_braces (string str) {
return "{" + str + "}";
}
long now () {
var tv = TimeVal ();
tv.get_current_time ();
return tv.tv_sec;
}
uint64 time_to_filetime (long t) {
return (t + 134774ULL * 86400ULL) * 10000000ULL;
}
string get_attribute_content (Xml.Attr *attr) {
if (attr->children == null)
return "";
return attr->children->content;
}
public string indent (string space, string text) {
var indented = "";
foreach (var l in text.split ("\n")) {
if (indented.length != 0)
indented += "\n";
if (l.length != 0)
indented += space + l;
}
return indented;
}
public string generate_id (string prefix, uint n, ...) {
var l = va_list ();
var args = new string[n];
for (var i = 0; n > 0; n--) {
string? val = l.arg ();
if (val == null)
continue;
args[i] = val; // FIXME: misc vala bug when +=
i += 1;
}
var data = string.joinv ("|", args);
var hash = Checksum.compute_for_string (ChecksumType.MD5, data);
var str = prefix + hash[0:32].up ();
return str;
}
} // Wixl
|