1 /***********************************************************************
2 * *
3 * This software is part of the ast package *
4 * Copyright (c) 1990-2012 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Eclipse Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
8 * *
9 * A copy of the License is available at *
10 * http://www.eclipse.org/org/documents/epl-v10.html *
11 * (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12 * *
13 * Information and Software Systems Research *
14 * AT&T Research *
15 * Florham Park NJ *
16 * *
17 * Glenn Fowler <gsf@research.att.com> *
18 * *
19 ***********************************************************************/
20 /*
21 * tag.c
22 *
23 */
24
25 #include "vcs_rscs.h"
26
27 /*
28 * Always point to next tag after call
29 */
30
get_tag(f,tp)31 tag_t* get_tag(f, tp)
32 Sfio_t* f;
33 register tag_t* tp;
34 {
35 register char *s;
36 int len;
37
38 s = (char *)tp + sizeof(int);
39 (void) memset((char *)tp, 0, sizeof(tag_t));
40 if (!sfread(f, (char *)&(tp->length), sizeof(int)) || (len = tp->length - sizeof(int)) && sfread(f, (char *)s, len) != len)
41 return (NULL);
42
43 if (tp->type & LOG)
44 {
45 tp->del = WHERE(f);
46 ADVANCE(f, tp->dsize);
47 }
48
49 return (tp);
50 }
51
52
53
new_tag(tp,sp,v,dsize,domain,type)54 int new_tag(tp, sp, v, dsize, domain, type)
55 register tag_t* tp;
56 struct stat* sp;
57 char* v;
58 int dsize;
59 int domain;
60 int type;
61 {
62 memset((char *)tp, 0, sizeof(tag_t));
63 tp->type = type;
64 tp->dsize = dsize;
65 tp->stat = *sp;
66 tp->stat.st_ctime = cs.time;
67 tp->domain = (domain ? domain : getmydomain());
68 strcpy(tp->version, v);
69 tp->length = sizeof(tag_t) - MAXVID + strlen(v) + 1;
70 return (tp->length);
71 }
72
keycmp(tp1,tp2)73 int keycmp(tp1, tp2)
74 register tag_t* tp1;
75 register tag_t* tp2;
76 {
77 int n;
78
79 if ((n = strcmp(tp1->version, tp2->version)))
80 return (n);
81
82 return (tp1->domain - tp2->domain);
83 }
84