xref: /openbsd/usr.bin/cvs/util.h (revision 7fbffbd7)
1 /*	$OpenBSD: util.h,v 1.8 2006/05/28 21:34:37 joris Exp $	*/
2 /*
3  * Copyright (c) 2006 Niall O'Higgins <niallo@openbsd.org>
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. The name of the author may not be used to endorse or promote products
13  *    derived from this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
16  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
17  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
18  * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
24  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26 
27 #ifndef UTIL_H
28 #define UTIL_H
29 
30 void	  cvs_get_repository_path(const char *, char *, size_t);
31 void	  cvs_get_repository_name(const char *, char *, size_t);
32 void	  cvs_modetostr(mode_t, char *, size_t);
33 void	  cvs_strtomode(const char *, mode_t *);
34 void	  cvs_splitpath(const char *, char *, size_t, char **);
35 void	  cvs_mkadmin(const char *, const char *, const char *);
36 void	  cvs_mkpath(const char *);
37 int	  cvs_cksum(const char *, char *, size_t);
38 int	  cvs_exec(int, char **, int []);
39 int	  cvs_getargv(const char *, char **, int);
40 int	  cvs_chdir(const char *, int);
41 int	  cvs_rename(const char *, const char *);
42 int	  cvs_unlink(const char *);
43 int	  cvs_rmdir(const char *);
44 char	**cvs_makeargv(const char *, int *);
45 void	  cvs_freeargv(char **, int);
46 void	  cvs_write_tagfile(char *, char *, int);
47 void	  cvs_parse_tagfile(char **, char **, int *);
48 size_t	  cvs_path_cat(const char *, const char *, char *, size_t);
49 time_t	  cvs_hack_time(time_t, int);
50 
51 u_int	  cvs_revision_select(RCSFILE *, char *);
52 
53 struct cvs_line {
54 	char			*l_line;
55 	int			 l_lineno;
56 	TAILQ_ENTRY(cvs_line)	 l_list;
57 };
58 
59 TAILQ_HEAD(cvs_tqh, cvs_line);
60 
61 struct cvs_lines {
62 	int		l_nblines;
63 	char		*l_data;
64 	struct cvs_tqh	l_lines;
65 };
66 
67 struct cvs_argvector {
68 	char *str;
69 	char **argv;
70 };
71 
72 BUF			*cvs_patchfile(const char *, const char *,
73 			    int (*p)(struct cvs_lines *, struct cvs_lines *));
74 struct cvs_lines	*cvs_splitlines(const char *);
75 void			cvs_freelines(struct cvs_lines *);
76 struct cvs_argvector	*cvs_strsplit(char *, const char *);
77 
78 void			cvs_argv_destroy(struct cvs_argvector *);
79 
80 #endif	/* UTIL_H */
81