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