1 /* $OpenBSD: file.h,v 1.48 2008/03/09 01:54:03 joris Exp $ */ 2 /* 3 * Copyright (c) 2006 Joris Vink <joris@openbsd.org> 4 * Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org> 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 17 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 18 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 19 * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28 #ifndef FILE_H 29 #define FILE_H 30 31 #include <sys/queue.h> 32 33 #include <dirent.h> 34 #include <stdio.h> 35 36 #include "rcs.h" 37 38 struct cvs_file { 39 char *file_name; 40 char *file_wd; 41 char *file_path; 42 char *file_rpath; 43 44 int fd; 45 int repo_fd; 46 int file_type; 47 int file_status; 48 int file_flags; 49 int in_attic; 50 int user_supplied; 51 52 RCSNUM *file_rcsrev; 53 RCSFILE *file_rcs; 54 struct cvs_ent *file_ent; 55 }; 56 57 #define FILE_UNKNOWN 0 58 #define FILE_ADDED 1 59 #define FILE_REMOVED 2 60 #define FILE_MODIFIED 3 61 #define FILE_UPTODATE 4 62 #define FILE_LOST 5 63 #define FILE_CHECKOUT 6 64 #define FILE_MERGE 7 65 #define FILE_PATCH 8 66 #define FILE_REMOVE_ENTRY 9 67 #define FILE_CONFLICT 10 68 #define FILE_UNLINK 11 69 70 #define DIR_CREATE 12 71 72 #define FILE_SKIP 100 73 74 #define FILE_HAS_TAG 0x01 75 76 struct cvs_filelist { 77 char *file_path; 78 int user_supplied; 79 TAILQ_ENTRY(cvs_filelist) flist; 80 }; 81 82 TAILQ_HEAD(cvs_flisthead, cvs_filelist); 83 84 struct cvs_recursion; 85 86 #define CVS_DIR 1 87 #define CVS_FILE 2 88 89 TAILQ_HEAD(cvs_flist, cvs_file); 90 91 struct cvs_ignpat { 92 char ip_pat[MAXNAMLEN]; 93 int ip_flags; 94 TAILQ_ENTRY(cvs_ignpat) ip_list; 95 }; 96 97 TAILQ_HEAD(ignore_head, cvs_ignpat); 98 99 void cvs_file_init(void); 100 void cvs_file_ignore(const char *, struct ignore_head *); 101 void cvs_file_classify(struct cvs_file *, const char *); 102 void cvs_file_free(struct cvs_file *); 103 void cvs_file_run(int, char **, struct cvs_recursion *); 104 void cvs_file_walklist(struct cvs_flisthead *, struct cvs_recursion *); 105 void cvs_file_walkdir(struct cvs_file *, struct cvs_recursion *); 106 void cvs_file_freelist(struct cvs_flisthead *); 107 struct cvs_filelist *cvs_file_get(const char *, int, struct cvs_flisthead *); 108 109 int cvs_file_chkign(const char *); 110 int cvs_file_cmpname(const char *, const char *); 111 int cvs_file_cmp(const char *, const char *); 112 int cvs_file_copy(const char *, const char *); 113 114 struct cvs_file *cvs_file_get_cf(const char *, const char *, int, int, int); 115 116 #endif /* FILE_H */ 117