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