+
+int tr_name_cmp(TR_NAME *one, TR_NAME *two)
+{
+ int len=one->len;
+ int cmp=0;
+
+ if (two->len<one->len)
+ len=two->len; /* len now min(one->len,two->len) */
+
+ cmp=strncmp(one->buf, two->buf, len);
+ if (cmp==0) {
+ if (one->len<two->len)
+ return -1;
+ else if (one->len==two->len)
+ return 0;
+ else
+ return 1;
+ }
+ return cmp;
+}
+
+void tr_name_strlcat(char *dest, const TR_NAME *src, size_t len)
+{
+ size_t used_len;
+ if (src->len >= len)
+ used_len = len-1;
+ else used_len = src->len;
+ if (used_len > 0)
+ strncat(dest, src->buf, used_len);
+ else dest[0] = '\0';
+}
+
+
+char * tr_name_strdup(TR_NAME *src)
+{
+ char *s = calloc(src->len+1, 1);
+ if (s) {
+ memcpy(s, src->buf, src->len);
+ s[src->len] = '\0';
+ }
+ return s;
+}