+static char *mkver(char *version)
+{
+ unsigned int lver;
+ char c, *r;
+ if (version) {
+ c = version[lver = 0];
+ while(c && c != ' ' && c != '.')
+ c = version[++lver];
+ if (c == '.') {
+ c = version[++lver];
+ while(c && c != ' ' && c != '.')
+ c = version[++lver];
+ }
+ r = malloc(lver + 1);
+ if (r) {
+ memcpy(r, version, lver);
+ r[lver] = 0;
+ return r;
+ }
+ }
+ return NULL;
+}
+
+static char *mkidaver(char *id, char *ver)
+{
+ size_t lid, lver;
+ char *r;
+ if (id && ver) {
+ lid = strlen(id);
+ lver = strlen(ver);
+ r = malloc(2 + lid + lver);
+ if (r) {
+ memcpy(r, id, lid);
+ r[lid] = '@';
+ memcpy(r + lid + 1, ver, lver);
+ r[lid + lver + 1] = 0;
+ return r;
+ }
+ }
+ return NULL;
+}
+