Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/tcl8.5.2/generic/tclFileSystem.h @ 35

Last change on this file since 35 was 25, checked in by landauf, 17 years ago

added tcl to libs

File size: 4.2 KB
Line 
1/*
2 * tclFileSystem.h --
3 *
4 *      This file contains the common defintions and prototypes for use by
5 *      Tcl's filesystem and path handling layers.
6 *
7 * Copyright (c) 2003 Vince Darley.
8 *
9 * See the file "license.terms" for information on usage and redistribution of
10 * this file, and for a DISCLAIMER OF ALL WARRANTIES.
11 *
12 * RCS: @(#) $Id: tclFileSystem.h,v 1.11 2005/10/13 00:07:17 dkf Exp $
13 */
14
15#ifndef _TCLFILESYSTEM
16#define _TCLFILESYSTEM
17
18#include "tcl.h"
19
20/*
21 * struct FilesystemRecord --
22 *
23 * A filesystem record is used to keep track of each filesystem currently
24 * registered with the core, in a linked list. Pointers to these structures
25 * are also kept by each "path" Tcl_Obj, and we must retain a refCount on the
26 * number of such references.
27 */
28
29typedef struct FilesystemRecord {
30    ClientData clientData;      /* Client specific data for the new filesystem
31                                 * (can be NULL) */
32    Tcl_Filesystem *fsPtr;      /* Pointer to filesystem dispatch table. */
33    int fileRefCount;           /* How many Tcl_Obj's use this filesystem. */
34    struct FilesystemRecord *nextPtr;
35                                /* The next filesystem registered to Tcl, or
36                                 * NULL if no more. */
37    struct FilesystemRecord *prevPtr;
38                                /* The previous filesystem registered to Tcl,
39                                 * or NULL if no more. */
40} FilesystemRecord;
41
42/*
43 * This structure holds per-thread private copy of the current directory
44 * maintained by the global cwdPathPtr. This structure holds per-thread
45 * private copies of some global data. This way we avoid most of the
46 * synchronization calls which boosts performance, at cost of having to update
47 * this information each time the corresponding epoch counter changes.
48 */
49
50typedef struct ThreadSpecificData {
51    int initialized;
52    int cwdPathEpoch;
53    int filesystemEpoch;
54    Tcl_Obj *cwdPathPtr;
55    ClientData cwdClientData;
56    FilesystemRecord *filesystemList;
57} ThreadSpecificData;
58
59/*
60 * The internal TclFS API provides routines for handling and manipulating
61 * paths efficiently, taking direct advantage of the "path" Tcl_Obj type.
62 *
63 * These functions are not exported at all at present.
64 */
65
66MODULE_SCOPE int        TclFSCwdPointerEquals(Tcl_Obj **pathPtrPtr);
67MODULE_SCOPE int        TclFSMakePathFromNormalized(Tcl_Interp *interp,
68                            Tcl_Obj *pathPtr, ClientData clientData);
69MODULE_SCOPE int        TclFSNormalizeToUniquePath(Tcl_Interp *interp,
70                            Tcl_Obj *pathPtr, int startAt,
71                            ClientData *clientDataPtr);
72MODULE_SCOPE Tcl_Obj *  TclFSMakePathRelative(Tcl_Interp *interp,
73                            Tcl_Obj *pathPtr, Tcl_Obj *cwdPtr);
74MODULE_SCOPE Tcl_Obj *  TclFSInternalToNormalized(
75                            Tcl_Filesystem *fromFilesystem,
76                            ClientData clientData,
77                            FilesystemRecord **fsRecPtrPtr);
78MODULE_SCOPE int        TclFSEnsureEpochOk(Tcl_Obj *pathPtr,
79                            Tcl_Filesystem **fsPtrPtr);
80MODULE_SCOPE void       TclFSSetPathDetails(Tcl_Obj *pathPtr,
81                            FilesystemRecord *fsRecPtr,
82                            ClientData clientData);
83MODULE_SCOPE Tcl_Obj *  TclFSNormalizeAbsolutePath(Tcl_Interp *interp,
84                            Tcl_Obj *pathPtr, ClientData *clientDataPtr);
85
86/*
87 * Private shared variables for use by tclIOUtil.c and tclPathObj.c
88 */
89
90MODULE_SCOPE Tcl_Filesystem tclNativeFilesystem;
91MODULE_SCOPE Tcl_ThreadDataKey tclFsDataKey;
92
93/*
94 * Private shared functions for use by tclIOUtil.c, tclPathObj.c and
95 * tclFileName.c, and any platform-specific filesystem code.
96 */
97
98MODULE_SCOPE Tcl_PathType TclFSGetPathType(Tcl_Obj *pathPtr,
99                            Tcl_Filesystem **filesystemPtrPtr,
100                            int *driveNameLengthPtr);
101MODULE_SCOPE Tcl_PathType TclFSNonnativePathType(CONST char *pathPtr,
102                            int pathLen, Tcl_Filesystem **filesystemPtrPtr,
103                            int *driveNameLengthPtr, Tcl_Obj **driveNameRef);
104MODULE_SCOPE Tcl_PathType TclGetPathType(Tcl_Obj *pathPtr,
105                            Tcl_Filesystem **filesystemPtrPtr,
106                            int *driveNameLengthPtr, Tcl_Obj **driveNameRef);
107MODULE_SCOPE int        TclFSEpochOk(int filesystemEpoch);
108MODULE_SCOPE int        TclFSCwdIsNative(void);
109MODULE_SCOPE Tcl_Obj *  TclWinVolumeRelativeNormalize(Tcl_Interp *interp,
110                            CONST char *path, Tcl_Obj **useThisCwdPtr);
111
112MODULE_SCOPE Tcl_FSPathInFilesystemProc TclNativePathInFilesystem;
113MODULE_SCOPE Tcl_FSCreateInternalRepProc TclNativeCreateNativeRep;
114
115#endif /* _TCLFILESYSTEM */
116
117/*
118 * Local Variables:
119 * mode: c
120 * c-basic-offset: 4
121 * fill-column: 78
122 * End:
123 */
Note: See TracBrowser for help on using the repository browser.