1*4cb553bbSjoris /* $OpenBSD: file.h,v 1.53 2009/03/26 22:54:37 joris Exp $ */ 2dc6a6879Sjfb /* 33ad3fb45Sjoris * Copyright (c) 2006 Joris Vink <joris@openbsd.org> 4dc6a6879Sjfb * Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org> 5dc6a6879Sjfb * All rights reserved. 6dc6a6879Sjfb * 7dc6a6879Sjfb * Redistribution and use in source and binary forms, with or without 8dc6a6879Sjfb * modification, are permitted provided that the following conditions 9dc6a6879Sjfb * are met: 10dc6a6879Sjfb * 11dc6a6879Sjfb * 1. Redistributions of source code must retain the above copyright 12dc6a6879Sjfb * notice, this list of conditions and the following disclaimer. 13dc6a6879Sjfb * 2. The name of the author may not be used to endorse or promote products 14dc6a6879Sjfb * derived from this software without specific prior written permission. 15dc6a6879Sjfb * 16dc6a6879Sjfb * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 17dc6a6879Sjfb * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 18dc6a6879Sjfb * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 19dc6a6879Sjfb * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20dc6a6879Sjfb * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21dc6a6879Sjfb * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22dc6a6879Sjfb * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23dc6a6879Sjfb * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24dc6a6879Sjfb * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25dc6a6879Sjfb * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26dc6a6879Sjfb */ 27dc6a6879Sjfb 28dc6a6879Sjfb #ifndef FILE_H 29dc6a6879Sjfb #define FILE_H 30dc6a6879Sjfb 311f8531bdSotto #include <sys/queue.h> 32f106b389Sjoris #include <sys/tree.h> 331f8531bdSotto 341f8531bdSotto #include <dirent.h> 351f8531bdSotto #include <stdio.h> 361f8531bdSotto 37bb029937Sjfb #include "rcs.h" 38bb029937Sjfb 393ad3fb45Sjoris struct cvs_file { 403ad3fb45Sjoris char *file_name; 413ad3fb45Sjoris char *file_wd; 423ad3fb45Sjoris char *file_path; 433ad3fb45Sjoris char *file_rpath; 44dc6a6879Sjfb 453ad3fb45Sjoris int fd; 463ad3fb45Sjoris int repo_fd; 473ad3fb45Sjoris int file_type; 483ad3fb45Sjoris int file_status; 493ad3fb45Sjoris int file_flags; 50ca2dc546Sniallo int in_attic; 51dc6a6879Sjfb 523daf6609Sjoris RCSNUM *file_rcsrev; 533ad3fb45Sjoris RCSFILE *file_rcs; 543ad3fb45Sjoris struct cvs_ent *file_ent; 553ad3fb45Sjoris }; 56dc6a6879Sjfb 573ad3fb45Sjoris #define FILE_UNKNOWN 0 583ad3fb45Sjoris #define FILE_ADDED 1 593ad3fb45Sjoris #define FILE_REMOVED 2 603ad3fb45Sjoris #define FILE_MODIFIED 3 613ad3fb45Sjoris #define FILE_UPTODATE 4 623ad3fb45Sjoris #define FILE_LOST 5 633ad3fb45Sjoris #define FILE_CHECKOUT 6 643ad3fb45Sjoris #define FILE_MERGE 7 653ad3fb45Sjoris #define FILE_PATCH 8 663ad3fb45Sjoris #define FILE_REMOVE_ENTRY 9 673ad3fb45Sjoris #define FILE_CONFLICT 10 683ad3fb45Sjoris #define FILE_UNLINK 11 69dc6a6879Sjfb 703ad3fb45Sjoris #define DIR_CREATE 12 715805c4b0Sjoris 726ac6a1c7Sjoris #define FILE_SKIP 100 736ac6a1c7Sjoris 742cc1dd04Sjoris #define FILE_HAS_TAG 0x01 7598902223Sjoris #define FILE_USER_SUPPLIED 0x02 7698902223Sjoris #define FILE_INSIDE_ATTIC 0x04 7783389238Sjoris #define FILE_ON_DISK 0x08 782cc1dd04Sjoris 793ad3fb45Sjoris struct cvs_filelist { 80f106b389Sjoris RB_ENTRY(cvs_filelist) flist; 813ad3fb45Sjoris char *file_path; 8298902223Sjoris int flags; 83*4cb553bbSjoris int type; 843ad3fb45Sjoris }; 855805c4b0Sjoris 86f106b389Sjoris RB_HEAD(cvs_flisthead, cvs_filelist); 87f106b389Sjoris RB_PROTOTYPE(cvs_flisthead, cvs_filelist, flist, cvs_filelist_cmp); 883c1cf75fSjoris 893ad3fb45Sjoris struct cvs_recursion; 90dc6a6879Sjfb 913ad3fb45Sjoris #define CVS_DIR 1 923ad3fb45Sjoris #define CVS_FILE 2 93bb029937Sjfb 943ad3fb45Sjoris TAILQ_HEAD(cvs_flist, cvs_file); 95bb029937Sjfb 963ad3fb45Sjoris struct cvs_ignpat { 973ad3fb45Sjoris char ip_pat[MAXNAMLEN]; 983ad3fb45Sjoris int ip_flags; 993ad3fb45Sjoris TAILQ_ENTRY(cvs_ignpat) ip_list; 1003ad3fb45Sjoris }; 101d5d23119Sjoris 1023ad3fb45Sjoris TAILQ_HEAD(ignore_head, cvs_ignpat); 1036238ec2bSjfb 1043ad3fb45Sjoris void cvs_file_init(void); 1053ad3fb45Sjoris void cvs_file_ignore(const char *, struct ignore_head *); 10634911d69Sjoris void cvs_file_classify(struct cvs_file *, const char *); 1073ad3fb45Sjoris void cvs_file_free(struct cvs_file *); 1083ad3fb45Sjoris void cvs_file_run(int, char **, struct cvs_recursion *); 1093ad3fb45Sjoris void cvs_file_walklist(struct cvs_flisthead *, struct cvs_recursion *); 1103ad3fb45Sjoris void cvs_file_walkdir(struct cvs_file *, struct cvs_recursion *); 1113ad3fb45Sjoris void cvs_file_freelist(struct cvs_flisthead *); 112*4cb553bbSjoris struct cvs_filelist *cvs_file_get(char *, int, struct cvs_flisthead *, int); 113afa05271Sjfb 114f106b389Sjoris int cvs_filelist_cmp(struct cvs_filelist *, struct cvs_filelist *); 115dc6a6879Sjfb int cvs_file_chkign(const char *); 116de08069bSxsa int cvs_file_cmpname(const char *, const char *); 11793c88394Sxsa int cvs_file_cmp(const char *, const char *); 1180b10fb85Sxsa int cvs_file_copy(const char *, const char *); 1195805c4b0Sjoris 120a4a7c2faSjoris struct cvs_file *cvs_file_get_cf(const char *, const char *, const char *, 121a4a7c2faSjoris int, int, int); 122dc6a6879Sjfb 123dc6a6879Sjfb #endif /* FILE_H */ 124