1 /* 2 * Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc. 3 * 4 * This file is part of Jam - see jam.c for Copyright information. 5 */ 6 7 /* This file is ALSO: 8 * Copyright 2001-2004 David Abrahams. 9 * Distributed under the Boost Software License, Version 1.0. 10 * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) 11 */ 12 13 /* 14 * filesys.h - OS specific file routines 15 */ 16 17 #ifndef FILESYS_DWA20011025_H 18 #define FILESYS_DWA20011025_H 19 20 #include "config.h" 21 #include "hash.h" 22 #include "lists.h" 23 #include "object.h" 24 #include "pathsys.h" 25 #include "timestamp.h" 26 27 28 typedef struct file_info_t 29 { 30 OBJECT * name; 31 char is_file; 32 char is_dir; 33 char exists; 34 timestamp time; 35 LIST * files; 36 } file_info_t; 37 38 typedef struct file_item FILEITEM; 39 struct file_item 40 { 41 file_info_t * value; /* expected to be equivalent with &FILEITEM */ 42 FILEITEM * next; 43 }; 44 45 typedef struct file_list 46 { 47 FILEITEM * head; 48 FILEITEM * tail; 49 int size; 50 } FILELIST; 51 52 typedef file_info_t * * FILELISTITER; /* also &FILEITEM equivalent */ 53 54 55 typedef struct file_archive_info_t 56 { 57 OBJECT * name; 58 file_info_t * file; 59 FILELIST * members; 60 } file_archive_info_t; 61 62 63 typedef void (*archive_scanback)( void * closure, OBJECT * path, LIST * symbols, 64 int found, timestamp const * const ); 65 typedef void (*scanback)( void * closure, OBJECT * path, int found, 66 timestamp const * const ); 67 68 69 void file_archscan( char const * arch, scanback func, void * closure ); 70 void file_archivescan( OBJECT * path, archive_scanback func, void * closure ); 71 void file_build1( PATHNAME * const f, string * file ) ; 72 void file_dirscan( OBJECT * dir, scanback func, void * closure ); 73 file_info_t * file_info( OBJECT * const path, int * found ); 74 int file_is_file( OBJECT * const path ); 75 int file_mkdir( char const * const path ); 76 file_info_t * file_query( OBJECT * const path ); 77 void file_remove_atexit( OBJECT * const path ); 78 void file_supported_fmt_resolution( timestamp * const ); 79 int file_time( OBJECT * const path, timestamp * const ); 80 81 82 /* Archive/library file support */ 83 file_archive_info_t * file_archive_info( OBJECT * const path, int * found ); 84 file_archive_info_t * file_archive_query( OBJECT * const path ); 85 86 /* FILELIST linked-list */ 87 FILELIST * filelist_new( OBJECT * path ); 88 FILELIST * filelist_push_back( FILELIST * list, OBJECT * path ); 89 FILELIST * filelist_push_front( FILELIST * list, OBJECT * path ); 90 FILELIST * filelist_pop_front( FILELIST * list ); 91 int filelist_length( FILELIST * list ); 92 void filelist_free( FILELIST * list ); 93 94 FILELISTITER filelist_begin( FILELIST * list ); 95 FILELISTITER filelist_end( FILELIST * list ); 96 FILELISTITER filelist_next( FILELISTITER it ); 97 file_info_t * filelist_item( FILELISTITER it ); 98 file_info_t * filelist_front( FILELIST * list ); 99 file_info_t * filelist_back( FILELIST * list ); 100 101 int filelist_empty( FILELIST * list ); 102 103 #define FL0 ((FILELIST *)0) 104 105 106 /* Internal utility worker functions. */ 107 void file_query_posix_( file_info_t * const ); 108 109 void file_done(); 110 111 #endif 112