~ubuntu-branches/ubuntu/maverick/ncbi-tools6/maverick

« back to all changes in this revision

Viewing changes to corelib/morefile/MoreFilesX.h

  • Committer: Bazaar Package Importer
  • Author(s): Aaron M. Ucko
  • Date: 2005-03-27 12:00:15 UTC
  • mfrom: (2.1.2 hoary)
  • Revision ID: james.westby@ubuntu.com-20050327120015-embhesp32nj73p9r
Tags: 6.1.20041020-3
* Fix FTBFS under GCC 4.0 caused by inconsistent use of "static" on
  functions.  (Closes: #295110.)
* Add a watch file, now that we can.  (Upstream's layout needs version=3.)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
        File:           MoreFilesX.h
 
3
 
 
4
        Contains:       A collection of useful high-level File Manager routines
 
5
                                which use the HFS Plus APIs wherever possible.
 
6
 
 
7
        Version:        MoreFilesX 1.0
 
8
 
 
9
        Copyright:      � 1992-2002 by Apple Computer, Inc., all rights reserved.
 
10
 
 
11
        You may incorporate this sample code into your applications without
 
12
        restriction, though the sample code has been provided "AS IS" and the
 
13
        responsibility for its operation is 100% yours.  However, what you are
 
14
        not permitted to do is to redistribute the source as "DSC Sample Code"
 
15
        after having made changes. If you're going to re-distribute the source,
 
16
        we require that you make it clear in the source that the code was
 
17
        descended from Apple Sample Code, but that you've made changes.
 
18
 
 
19
        File Ownership:
 
20
 
 
21
                DRI:                            Apple Macintosh Developer Technical Support
 
22
 
 
23
                Other Contact:          For bug reports, consult the following page on
 
24
                                                        the World Wide Web:
 
25
                                                                http://developer.apple.com/bugreporter/
 
26
 
 
27
                Technology:                     DTS Sample Code
 
28
 
 
29
        Writers:
 
30
 
 
31
                (JL)    Jim Luther
 
32
 
 
33
        Change History (most recent first):
 
34
 
 
35
                 <1>     1/25/02        JL              MoreFilesX 1.0
 
36
        
 
37
        Notes:
 
38
                What do those arrows in the documentation for each routine mean?
 
39
                        
 
40
                        --> The parameter is an input
 
41
                        
 
42
                        <-- The parameter is an output. The pointer to the variable
 
43
                                where the output will be returned (must not be NULL).
 
44
                        
 
45
                        <** The parameter is an optional output. If it is not a
 
46
                                NULL pointer, it points to the variable where the output
 
47
                                will be returned. If it is a NULL pointer, the output will
 
48
                                not be returned and will possibly let the routine and the
 
49
                                File Manager do less work. If you don't need an optional output,
 
50
                                don't ask for it.
 
51
                        **> The parameter is an optional input. If it is not a
 
52
                                NULL pointer, it points to the variable containing the
 
53
                                input data. If it is a NULL pointer, the input is not used
 
54
                                and will possibly let the routine and the File Manager
 
55
                                do less work.
 
56
*/
 
57
 
 
58
#ifndef __MOREFILESX__
 
59
#define __MOREFILESX__
 
60
 
 
61
#ifndef __MACTYPES__
 
62
#include <MacTypes.h>
 
63
#endif
 
64
 
 
65
#ifndef __FINDER__
 
66
#include <Finder.h>
 
67
#endif
 
68
 
 
69
#ifndef __FILES__
 
70
#include <Files.h>
 
71
#endif
 
72
 
 
73
#ifndef __TEXTCOMMON__
 
74
#include <TextCommon.h>
 
75
#endif
 
76
 
 
77
#if PRAGMA_ONCE
 
78
#pragma once
 
79
#endif
 
80
 
 
81
#ifdef __cplusplus
 
82
extern "C" {
 
83
#endif
 
84
 
 
85
#if PRAGMA_IMPORT
 
86
#pragma import on
 
87
#endif
 
88
 
 
89
#if PRAGMA_STRUCT_ALIGN
 
90
        #pragma options align=mac68k
 
91
#elif PRAGMA_STRUCT_PACKPUSH
 
92
        #pragma pack(push, 2)
 
93
#elif PRAGMA_STRUCT_PACK
 
94
        #pragma pack(2)
 
95
#endif
 
96
 
 
97
/*****************************************************************************/
 
98
 
 
99
#pragma mark ----- FinderInfo and ExtendedFinderInfo -----
 
100
 
 
101
/*
 
102
 *      FSGetFinderInfo and FSSetFinderInfo use these unions for Finder information.
 
103
 */
 
104
 
 
105
union FinderInfo
 
106
{
 
107
  FileInfo                              file;
 
108
  FolderInfo                    folder;
 
109
};
 
110
typedef union FinderInfo FinderInfo;
 
111
 
 
112
union ExtendedFinderInfo
 
113
{
 
114
  ExtendedFileInfo              file;
 
115
  ExtendedFolderInfo    folder;
 
116
};
 
117
typedef union ExtendedFinderInfo ExtendedFinderInfo;
 
118
 
 
119
/*****************************************************************************/
 
120
 
 
121
#pragma mark ----- GetVolParmsInfoBuffer Macros -----
 
122
 
 
123
/*
 
124
 *      Macros to get information out of GetVolParmsInfoBuffer.
 
125
 */
 
126
 
 
127
/* version 1 field getters */
 
128
#define GetVolParmsInfoVersion(volParms) \
 
129
                ((volParms)->vMVersion)
 
130
#define GetVolParmsInfoAttrib(volParms) \
 
131
                ((volParms)->vMAttrib)
 
132
#define GetVolParmsInfoLocalHand(volParms) \
 
133
                ((volParms)->vMLocalHand)
 
134
#define GetVolParmsInfoServerAdr(volParms) \
 
135
                ((volParms)->vMServerAdr)
 
136
 
 
137
/* version 2 field getters (assume zero result if version < 2) */
 
138
#define GetVolParmsInfoVolumeGrade(volParms) \
 
139
                (((volParms)->vMVersion >= 2) ? (volParms)->vMVolumeGrade : 0)
 
140
#define GetVolParmsInfoForeignPrivID(volParms) \
 
141
                (((volParms)->vMVersion >= 2) ? (volParms)->vMForeignPrivID : 0)
 
142
 
 
143
/* version 3 field getters (assume zero result if version < 3) */
 
144
#define GetVolParmsInfoExtendedAttributes(volParms) \
 
145
                (((volParms)->vMVersion >= 3) ? (volParms)->vMExtendedAttributes : 0)
 
146
 
 
147
/* attribute bits supported by all versions of GetVolParmsInfoBuffer */
 
148
#define VolIsNetworkVolume(volParms) \
 
149
                ((volParms)->vMServerAdr != 0)
 
150
#define VolHasLimitFCBs(volParms) \
 
151
                (((volParms)->vMAttrib & (1L << bLimitFCBs)) != 0)
 
152
#define VolHasLocalWList(volParms) \
 
153
                (((volParms)->vMAttrib & (1L << bLocalWList)) != 0)
 
154
#define VolHasNoMiniFndr(volParms) \
 
155
                (((volParms)->vMAttrib & (1L << bNoMiniFndr)) != 0)
 
156
#define VolHasNoVNEdit(volParms) \
 
157
                (((volParms)->vMAttrib & (1L << bNoVNEdit)) != 0)
 
158
#define VolHasNoLclSync(volParms) \
 
159
                (((volParms)->vMAttrib & (1L << bNoLclSync)) != 0)
 
160
#define VolHasTrshOffLine(volParms) \
 
161
                (((volParms)->vMAttrib & (1L << bTrshOffLine)) != 0)
 
162
#define VolHasNoSwitchTo(volParms) \
 
163
                (((volParms)->vMAttrib & (1L << bNoSwitchTo)) != 0)
 
164
#define VolHasNoDeskItems(volParms) \
 
165
                (((volParms)->vMAttrib & (1L << bNoDeskItems)) != 0)
 
166
#define VolHasNoBootBlks(volParms) \
 
167
                (((volParms)->vMAttrib & (1L << bNoBootBlks)) != 0)
 
168
#define VolHasAccessCntl(volParms) \
 
169
                (((volParms)->vMAttrib & (1L << bAccessCntl)) != 0)
 
170
#define VolHasNoSysDir(volParms) \
 
171
                (((volParms)->vMAttrib & (1L << bNoSysDir)) != 0)
 
172
#define VolHasExtFSVol(volParms) \
 
173
                (((volParms)->vMAttrib & (1L << bHasExtFSVol)) != 0)
 
174
#define VolHasOpenDeny(volParms) \
 
175
                (((volParms)->vMAttrib & (1L << bHasOpenDeny)) != 0)
 
176
#define VolHasCopyFile(volParms) \
 
177
                (((volParms)->vMAttrib & (1L << bHasCopyFile)) != 0)
 
178
#define VolHasMoveRename(volParms) \
 
179
                (((volParms)->vMAttrib & (1L << bHasMoveRename)) != 0)
 
180
#define VolHasDesktopMgr(volParms) \
 
181
                (((volParms)->vMAttrib & (1L << bHasDesktopMgr)) != 0)
 
182
#define VolHasShortName(volParms) \
 
183
                (((volParms)->vMAttrib & (1L << bHasShortName)) != 0)
 
184
#define VolHasFolderLock(volParms) \
 
185
                (((volParms)->vMAttrib & (1L << bHasFolderLock)) != 0)
 
186
#define VolHasPersonalAccessPrivileges(volParms) \
 
187
                (((volParms)->vMAttrib & (1L << bHasPersonalAccessPrivileges)) != 0)
 
188
#define VolHasUserGroupList(volParms) \
 
189
                (((volParms)->vMAttrib & (1L << bHasUserGroupList)) != 0)
 
190
#define VolHasCatSearch(volParms) \
 
191
                (((volParms)->vMAttrib & (1L << bHasCatSearch)) != 0)
 
192
#define VolHasFileIDs(volParms) \
 
193
                (((volParms)->vMAttrib & (1L << bHasFileIDs)) != 0)
 
194
#define VolHasBTreeMgr(volParms) \
 
195
                (((volParms)->vMAttrib & (1L << bHasBTreeMgr)) != 0)
 
196
#define VolHasBlankAccessPrivileges(volParms) \
 
197
                (((volParms)->vMAttrib & (1L << bHasBlankAccessPrivileges)) != 0)
 
198
#define VolSupportsAsyncRequests(volParms) \
 
199
                (((volParms)->vMAttrib & (1L << bSupportsAsyncRequests)) != 0)
 
200
#define VolSupportsTrashVolumeCache(volParms) \
 
201
                (((volParms)->vMAttrib & (1L << bSupportsTrashVolumeCache)) != 0)
 
202
 
 
203
/* attribute bits supported by version 3 and greater versions of GetVolParmsInfoBuffer */
 
204
#define VolIsEjectable(volParms) \
 
205
                ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bIsEjectable)) != 0)
 
206
#define VolSupportsHFSPlusAPIs(volParms) \
 
207
                ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsHFSPlusAPIs)) != 0)
 
208
#define VolSupportsFSCatalogSearch(volParms) \
 
209
                ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsFSCatalogSearch)) != 0)
 
210
#define VolSupportsFSExchangeObjects(volParms) \
 
211
                ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsFSExchangeObjects)) != 0)
 
212
#define VolSupports2TBFiles(volParms) \
 
213
                ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupports2TBFiles)) != 0)
 
214
#define VolSupportsLongNames(volParms) \
 
215
                ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsLongNames)) != 0)
 
216
#define VolSupportsMultiScriptNames(volParms) \
 
217
                ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsMultiScriptNames)) != 0)
 
218
#define VolSupportsNamedForks(volParms) \
 
219
                ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsNamedForks)) != 0)
 
220
#define VolSupportsSubtreeIterators(volParms) \
 
221
                ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsSubtreeIterators)) != 0)
 
222
#define VolL2PCanMapFileBlocks(volParms) \
 
223
                ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bL2PCanMapFileBlocks)) != 0)
 
224
#define VolParentModDateChanges(volParms) \
 
225
                ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bParentModDateChanges)) != 0)
 
226
#define VolAncestorModDateChanges(volParms) \
 
227
                ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bAncestorModDateChanges)) != 0)
 
228
#define VolSupportsSymbolicLinks(volParms) \
 
229
                ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsSymbolicLinks)) != 0)
 
230
#define VolIsAutoMounted(volParms) \
 
231
                ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bIsAutoMounted)) != 0)
 
232
 
 
233
/*****************************************************************************/
 
234
 
 
235
#pragma mark ----- userPrivileges Bit Masks and Macros -----
 
236
 
 
237
/*
 
238
 *      Bit masks and macros to get common information out of userPrivileges byte
 
239
 *      returned by FSGetCatalogInfo.
 
240
 *
 
241
 *      Note:   The userPrivileges byte is the same as the ioACUser byte returned
 
242
 *                      by PBGetCatInfo, and is the 1's complement of the user's privileges
 
243
 *                      byte returned in ioACAccess by PBHGetDirAccess. That's where the
 
244
 *                      ioACUser names came from.
 
245
 *
 
246
 *                      The userPrivileges are user's effective privileges based on the
 
247
 *                      user ID and the groups that user belongs to, and the owner, group,
 
248
 *                      and everyone privileges for the given directory.
 
249
 */
 
250
 
 
251
enum
 
252
{
 
253
        /* mask for just the access restriction bits */
 
254
        kioACUserAccessMask             = (kioACUserNoSeeFolderMask +
 
255
                                                           kioACUserNoSeeFilesMask +
 
256
                                                           kioACUserNoMakeChangesMask),
 
257
        /* common access privilege settings */
 
258
        kioACUserFull                   = 0x00, /* no access restiction bits on */
 
259
        kioACUserNone                   = kioACUserAccessMask, /* all access restiction bits on */
 
260
        kioACUserDropBox                = (kioACUserNoSeeFolderMask +
 
261
                                                           kioACUserNoSeeFilesMask), /* make changes, but not see files or folders */
 
262
        kioACUserBulletinBoard  = kioACUserNoMakeChangesMask /* see files and folders, but not make changes */
 
263
};
 
264
 
 
265
 
 
266
/* Macros for testing ioACUser bits. */
 
267
 
 
268
#define UserIsOwner(userPrivileges) \
 
269
                (((userPrivileges) & kioACUserNotOwnerMask) == 0)
 
270
#define UserHasFullAccess(userPrivileges)       \
 
271
                (((userPrivileges) & (kioACUserAccessMask)) == kioACUserFull)
 
272
#define UserHasDropBoxAccess(userPrivileges)    \
 
273
                (((userPrivileges) & kioACUserAccessMask) == kioACUserDropBox)
 
274
#define UserHasBulletinBoard(userPrivileges)    \
 
275
                (((userPrivileges) & kioACUserAccessMask) == kioACUserBulletinBoard)
 
276
#define UserHasNoAccess(userPrivileges)         \
 
277
                (((userPrivileges) & kioACUserAccessMask) == kioACUserNone)
 
278
 
 
279
/*****************************************************************************/
 
280
 
 
281
#pragma mark ----- File Access Routines -----
 
282
 
 
283
/*****************************************************************************/
 
284
 
 
285
#pragma mark FSCopyFork
 
286
 
 
287
OSErr
 
288
FSCopyFork(
 
289
        SInt16 srcRefNum,
 
290
        SInt16 dstRefNum,
 
291
        void *copyBufferPtr,
 
292
        ByteCount copyBufferSize);
 
293
 
 
294
/*
 
295
        The FSCopyFork function copies all data from the source fork to the
 
296
        destination fork of open file forks and makes sure the destination EOF
 
297
        is equal to the source EOF.
 
298
 
 
299
        srcRefNum                       --> The source file reference number.
 
300
        dstRefNum                       --> The destination file reference number.
 
301
        copyBufferPtr           --> Pointer to buffer to use during copy. The
 
302
                                                        buffer should be at least 4K-bytes minimum.
 
303
                                                        The larger the buffer, the faster the copy
 
304
                                                        (up to a point).
 
305
        copyBufferSize          --> The size of the copy buffer.
 
306
*/
 
307
 
 
308
/*****************************************************************************/
 
309
 
 
310
#pragma mark ----- Volume Access Routines -----
 
311
 
 
312
/*****************************************************************************/
 
313
 
 
314
#pragma mark FSGetVolParms
 
315
 
 
316
OSErr
 
317
FSGetVolParms(
 
318
        FSVolumeRefNum volRefNum,
 
319
        UInt32 bufferSize,
 
320
        GetVolParmsInfoBuffer *volParmsInfo,
 
321
        UInt32 *actualInfoSize);
 
322
 
 
323
/*
 
324
        The FSGetVolParms function returns information about the characteristics
 
325
        of a volume. A result of paramErr usually just means the volume doesn't
 
326
        support GetVolParms and the feature you were going to check
 
327
        for isn't available.
 
328
        
 
329
        volRefNum                       --> Volume specification.
 
330
        bufferSize                      --> Size of buffer pointed to by volParmsInfo.
 
331
        volParmsInfo            <-- A GetVolParmsInfoBuffer record where the volume
 
332
                                                        attributes information is returned.
 
333
        actualInfoSize          <-- The number of bytes actually returned
 
334
                                                        in volParmsInfo.
 
335
        
 
336
        __________
 
337
        
 
338
        Also see:       The GetVolParmsInfoBuffer Macros for checking attribute bits
 
339
                                in this file
 
340
*/
 
341
 
 
342
/*****************************************************************************/
 
343
 
 
344
#pragma mark FSGetVRefNum
 
345
 
 
346
OSErr
 
347
FSGetVRefNum(
 
348
        const FSRef *ref,
 
349
        FSVolumeRefNum *vRefNum);
 
350
 
 
351
/*
 
352
        The FSGetVRefNum function determines the volume reference
 
353
        number of a volume from a FSRef.
 
354
 
 
355
        ref                                     --> The FSRef.
 
356
        vRefNum                         <-- The volume reference number.
 
357
*/
 
358
 
 
359
/*****************************************************************************/
 
360
 
 
361
#pragma mark FSGetVInfo
 
362
 
 
363
OSErr
 
364
FSGetVInfo(
 
365
        FSVolumeRefNum volume,
 
366
        HFSUniStr255 *volumeName,       /* can be NULL */
 
367
        UInt64 *freeBytes,                      /* can be NULL */
 
368
        UInt64 *totalBytes);            /* can be NULL */
 
369
 
 
370
/*
 
371
        The FSGetVInfo function returns the name, available space (in bytes),
 
372
        and total space (in bytes) for the specified volume.
 
373
 
 
374
        volume                          --> The volume reference number.
 
375
        volumeName                      <** An optional pointer to a HFSUniStr255.
 
376
                                                        If not NULL, the volume name will be returned in
 
377
                                                        the HFSUniStr255.
 
378
        freeBytes                       <** An optional pointer to a UInt64.
 
379
                                                        If not NULL, the number of free bytes on the
 
380
                                                        volume will be returned in the UInt64.
 
381
        totalBytes                      <** An optional pointer to a UInt64.
 
382
                                                        If not NULL, the total number of bytes on the
 
383
                                                        volume will be returned in the UInt64.
 
384
*/
 
385
 
 
386
/*****************************************************************************/
 
387
 
 
388
#pragma mark FSGetVolFileSystemID
 
389
 
 
390
OSErr
 
391
FSGetVolFileSystemID(
 
392
        FSVolumeRefNum volume,
 
393
        UInt16 *fileSystemID,   /* can be NULL */
 
394
        UInt16 *signature);             /* can be NULL */
 
395
 
 
396
/*
 
397
        The FSGetVolFileSystemID function returns the file system ID and signature
 
398
        of a mounted volume. The file system ID identifies the file system
 
399
        that handles requests to a particular volume. The signature identifies the
 
400
        volume type of the volume (for example, FSID 0 is Macintosh HFS Plus, HFS
 
401
        or MFS, where a signature of 0x4244 identifies the volume as HFS).
 
402
        Here's a partial list of file system ID numbers (only Apple's file systems
 
403
        are listed):
 
404
                FSID    File System
 
405
                -----   -----------------------------------------------------
 
406
                $0000   Macintosh HFS Plus, HFS or MFS
 
407
                $0100   ProDOS File System
 
408
                $0101   PowerTalk Mail Enclosures
 
409
                $4147   ISO 9660 File Access (through Foreign File Access)
 
410
                $4242   High Sierra File Access (through Foreign File Access)
 
411
                $464D   QuickTake File System (through Foreign File Access)
 
412
                $4953   Macintosh PC Exchange (MS-DOS)
 
413
                $4A48   Audio CD Access (through Foreign File Access)
 
414
                $4D4B   Apple Photo Access (through Foreign File Access)
 
415
                $6173   AppleShare (later versions of AppleShare only)
 
416
        
 
417
        See the Technical Note "FL 35 - Determining Which File System
 
418
        Is Active" and the "Guide to the File System Manager" for more
 
419
        information.
 
420
        
 
421
        volume                          --> The volume reference number.
 
422
        fileSystemID            <** An optional pointer to a UInt16.
 
423
                                                        If not NULL, the volume's file system ID will
 
424
                                                        be returned in the UInt16.
 
425
        signature                       <** An optional pointer to a UInt16.
 
426
                                                        If not NULL, the volume's signature will
 
427
                                                        be returned in the UInt16.
 
428
*/
 
429
 
 
430
/*****************************************************************************/
 
431
 
 
432
#pragma mark FSGetMountedVolumes
 
433
 
 
434
OSErr
 
435
FSGetMountedVolumes(
 
436
        FSRef ***volumeRefsHandle,      /* pointer to handle of FSRefs */
 
437
        ItemCount *numVolumes);
 
438
 
 
439
/*
 
440
        The FSGetMountedVolumes function returns the list of volumes currently
 
441
        mounted in an array of FSRef records. The array of FSRef records is
 
442
        returned in a Handle, volumeRefsHandle, which is allocated by
 
443
        FSGetMountedVolumes. The caller is responsible for disposing of
 
444
        volumeRefsHandle if the FSGetMountedVolumes returns noErr.
 
445
                
 
446
        volumeRefsHandle        <-- Pointer to an FSRef Handle where the array of
 
447
                                                        FSRefs is to be returned.
 
448
        numVolumes                      <-- The number of volumes returned in the array.
 
449
*/
 
450
 
 
451
/*****************************************************************************/
 
452
 
 
453
#pragma mark ----- FSRef/FSpec/Path/Name Conversion Routines -----
 
454
 
 
455
/*****************************************************************************/
 
456
 
 
457
#pragma mark FSRefMakeFSSpec
 
458
 
 
459
OSErr
 
460
FSRefMakeFSSpec(
 
461
        const FSRef *ref,
 
462
        FSSpec *spec);
 
463
 
 
464
/*
 
465
        The FSRefMakeFSSpec function returns an FSSpec for the file or
 
466
        directory specified by the ref parameter.
 
467
 
 
468
        ref                                     --> An FSRef specifying the file or directory.
 
469
        spec                            <-- The FSSpec.
 
470
*/
 
471
 
 
472
/*****************************************************************************/
 
473
 
 
474
#pragma mark FSMakeFSRef
 
475
 
 
476
OSErr
 
477
FSMakeFSRef(
 
478
        FSVolumeRefNum volRefNum,
 
479
        SInt32 dirID,
 
480
        ConstStr255Param name,
 
481
        FSRef *ref);
 
482
 
 
483
/*
 
484
        The FSMakeFSRef function creates an FSRef from the traditional
 
485
        volume reference number, directory ID and pathname inputs. It is
 
486
        functionally equivalent to FSMakeFSSpec followed by FSpMakeFSRef.
 
487
        
 
488
        volRefNum                       --> Volume specification.
 
489
        dirID                           --> Directory specification.
 
490
        name                            --> The file or directory name, or NULL.
 
491
        ref                                     <-- The FSRef.
 
492
*/
 
493
 
 
494
/*****************************************************************************/
 
495
 
 
496
#pragma mark FSMakePath
 
497
 
 
498
OSStatus
 
499
FSMakePath(
 
500
        SInt16 vRefNum,
 
501
        SInt32 dirID,
 
502
        ConstStr255Param name,
 
503
        UInt8 *path,
 
504
        UInt32 maxPathSize);
 
505
 
 
506
/*
 
507
        The FSMakePath function creates a pathname from the traditional volume reference
 
508
        number, directory ID, and pathname inputs. It is functionally equivalent to
 
509
        FSMakeFSSpec, FSpMakeFSRef, FSRefMakePath.
 
510
        
 
511
        volRefNum                       --> Volume specification.
 
512
        dirID                           --> Directory specification.
 
513
        name                            --> The file or directory name, or NULL.
 
514
        path                            <-- A pointer to a buffer which FSMakePath will
 
515
                                                        fill with a C string representing the pathname
 
516
                                                        to the file or directory specified. The format of
 
517
                                                        the pathname returned can be determined with the
 
518
                                                        Gestalt selector gestaltFSAttr's
 
519
                                                        gestaltFSUsesPOSIXPathsForConversion bit.
 
520
                                                        If the gestaltFSUsesPOSIXPathsForConversion bit is
 
521
                                                        clear, the pathname is a Mac OS File Manager full
 
522
                                                        pathname in a C string, and file or directory names
 
523
                                                        in the pathname may be mangled as returned by
 
524
                                                        the File Manager. If the
 
525
                                                        gestaltFSUsesPOSIXPathsForConversion bit is set,
 
526
                                                        the pathname is a UTF8 encoded POSIX absolute
 
527
                                                        pathname in a C string. In either case, the
 
528
                                                        pathname returned can be passed back to
 
529
                                                        FSPathMakeRef to create an FSRef to the file or
 
530
                                                        directory, or FSPathMakeFSSpec to craete an FSSpec
 
531
                                                        to the file or directory.
 
532
        maxPathSize                     --> The size of the path buffer in bytes. If the path
 
533
                                                        buffer is too small for the pathname string,
 
534
                                                        FSMakePath returns pathTooLongErr or
 
535
                                                        buffersTooSmall.
 
536
*/
 
537
 
 
538
/*****************************************************************************/
 
539
 
 
540
#pragma mark FSPathMakeFSSpec
 
541
 
 
542
OSStatus
 
543
FSPathMakeFSSpec(
 
544
        const UInt8 *path,
 
545
        FSSpec *spec,
 
546
        Boolean *isDirectory);  /* can be NULL */
 
547
 
 
548
/*
 
549
        The FSPathMakeFSSpec function converts a pathname to an FSSpec.
 
550
        
 
551
        path                            --> A pointer to a C String that is the pathname. The
 
552
                                                        format of the pathname you must supply can be
 
553
                                                        determined with the Gestalt selector gestaltFSAttr's
 
554
                                                        gestaltFSUsesPOSIXPathsForConversion bit.
 
555
                                                        If the gestaltFSUsesPOSIXPathsForConversion bit is
 
556
                                                        clear, the pathname must be a Mac OS File Manager
 
557
                                                        full pathname in a C string. If the
 
558
                                                        gestaltFSUsesPOSIXPathsForConversion bit is set,
 
559
                                                        the pathname must be a UTF8 encoded POSIX absolute
 
560
                                                        pathname in a C string.
 
561
        spec                            <-- The FSSpec.
 
562
        isDirectory                     <** An optional pointer to a Boolean.
 
563
                                                        If not NULL, true will be returned in the Boolean
 
564
                                                        if the specified path is a directory, or false will
 
565
                                                        be returned in the Boolean if the specified path is
 
566
                                                        a file.
 
567
*/
 
568
 
 
569
/*****************************************************************************/
 
570
 
 
571
#pragma mark UnicodeNameGetHFSName
 
572
 
 
573
OSErr
 
574
UnicodeNameGetHFSName(
 
575
        UniCharCount nameLength,
 
576
        const UniChar *name,
 
577
        TextEncoding textEncodingHint,
 
578
        Boolean isVolumeName,
 
579
        Str31 hfsName);
 
580
 
 
581
/*
 
582
        The UnicodeNameGetHFSName function converts a Unicode string
 
583
        to a Pascal Str31 (or Str27) string using an algorithm similar to that used
 
584
        by the File Manager. Note that if the name is too long or cannot be converted
 
585
        using the given text encoding hint, you will get an error instead of the
 
586
        mangled name that the File Manager would return.
 
587
        
 
588
        nameLength                      --> Number of UniChar in name parameter.
 
589
        name                            --> The Unicode string to convert.
 
590
        textEncodingHint        --> The text encoding hint used for the conversion.
 
591
                                                        You can pass kTextEncodingUnknown to use the
 
592
                                                        "default" textEncodingHint.
 
593
        isVolumeName            --> If true, the output name will be limited to
 
594
                                                        27 characters (kHFSMaxVolumeNameChars). If false,
 
595
                                                        the output name will be limited to 31 characters
 
596
                                                        (kHFSMaxFileNameChars).
 
597
        hfsName                         <-- The hfsName as a Pascal string.
 
598
        
 
599
        __________
 
600
        
 
601
        Also see:       HFSNameGetUnicodeName
 
602
*/
 
603
 
 
604
/*****************************************************************************/
 
605
 
 
606
#pragma mark HFSNameGetUnicodeName
 
607
 
 
608
OSErr
 
609
HFSNameGetUnicodeName(
 
610
        ConstStr31Param hfsName,
 
611
        TextEncoding textEncodingHint,
 
612
        HFSUniStr255 *unicodeName);
 
613
 
 
614
/*
 
615
        The HFSNameGetUnicodeName function converts a Pascal Str31 string to an
 
616
        Unicode HFSUniStr255 string using the same routines as the File Manager.
 
617
        
 
618
        hfsName                         --> The Pascal string to convert.
 
619
        textEncodingHint        --> The text encoding hint used for the conversion.
 
620
                                                        You can pass kTextEncodingUnknown to use the
 
621
                                                        "default" textEncodingHint.
 
622
        unicodeName                     <-- The Unicode string.
 
623
        
 
624
        __________
 
625
        
 
626
        Also see:       UnicodeNameGetHFSName
 
627
*/
 
628
 
 
629
/*****************************************************************************/
 
630
 
 
631
#pragma mark ----- File/Directory Manipulation Routines -----
 
632
 
 
633
/*****************************************************************************/
 
634
 
 
635
#pragma mark FSRefValid
 
636
 
 
637
Boolean FSRefValid(const FSRef *ref);
 
638
 
 
639
/*
 
640
        The FSRefValid function determines if an FSRef is valid. If the result is
 
641
        true, then the FSRef refers to an existing file or directory.
 
642
        
 
643
        ref                                     --> FSRef to a file or directory.
 
644
*/
 
645
 
 
646
/*****************************************************************************/
 
647
 
 
648
#pragma mark FSGetParentRef
 
649
 
 
650
OSErr
 
651
FSGetParentRef(
 
652
        const FSRef *ref,
 
653
        FSRef *parentRef);
 
654
 
 
655
/*
 
656
        The FSGetParentRef function gets the parent directory FSRef of the
 
657
        specified object.
 
658
        
 
659
        Note: FSRefs always point to real file system objects. So, there cannot
 
660
        be a FSRef to the parent of volume root directories. If you call
 
661
        FSGetParentRef with a ref to the root directory of a volume, the
 
662
        function result will be noErr and the parentRef will be invalid (using it
 
663
        for other file system requests will fail).
 
664
 
 
665
        ref                                     --> FSRef to a file or directory.
 
666
        parentRef                       <-- The parent directory's FSRef.
 
667
*/
 
668
 
 
669
/*****************************************************************************/
 
670
 
 
671
#pragma mark FSGetFileDirName
 
672
 
 
673
OSErr
 
674
FSGetFileDirName(
 
675
        const FSRef *ref,
 
676
        HFSUniStr255 *outName);
 
677
 
 
678
/*
 
679
        The FSGetFileDirName function gets the name of the file or directory
 
680
        specified.
 
681
 
 
682
        ref                                     --> FSRef to a file or directory.
 
683
        outName                         <-- The file or directory name.
 
684
*/
 
685
 
 
686
/*****************************************************************************/
 
687
 
 
688
#pragma mark FSGetNodeID
 
689
 
 
690
OSErr
 
691
FSGetNodeID(
 
692
        const FSRef *ref,
 
693
        long *nodeID,                   /* can be NULL */
 
694
        Boolean *isDirectory);  /* can be NULL */
 
695
 
 
696
/*
 
697
        The GetNodeIDFromFSRef function gets the node ID number of the
 
698
        file or directory specified (note: the node ID is the directory ID
 
699
        for directories).
 
700
 
 
701
        ref                                     --> FSRef to a file or directory.
 
702
        nodeID                          <** An optional pointer to a long.
 
703
                                                        If not NULL, the node ID will be returned in
 
704
                                                        the long.
 
705
        isDirectory                     <** An optional pointer to a Boolean.
 
706
                                                        If not NULL, true will be returned in the Boolean
 
707
                                                        if the object is a directory, or false will be
 
708
                                                        returned in the Boolean if object is a file.
 
709
*/
 
710
 
 
711
/*****************************************************************************/
 
712
 
 
713
#pragma mark FSGetUserPrivilegesPermissions
 
714
 
 
715
OSErr
 
716
FSGetUserPrivilegesPermissions(
 
717
        const FSRef *ref,
 
718
        UInt8 *userPrivileges,          /* can be NULL */
 
719
        UInt32 permissions[4]);         /* can be NULL */
 
720
 
 
721
/*
 
722
        The FSGetUserPrivilegesPermissions function gets the userPrivileges and/or
 
723
        permissions of the file or directory specified.
 
724
 
 
725
        ref                                     --> FSRef to a file or directory.
 
726
        userPrivileges          <** An optional pointer to a UInt8.
 
727
                                                        If not NULL, the userPrivileges will be returned
 
728
                                                        in the UInt8.
 
729
        permissions                     <** An optional pointer to an UInt32[4] array.
 
730
                                                        If not NULL, the permissions will be returned
 
731
                                                        in the UInt32[4] array.
 
732
*/
 
733
 
 
734
/*****************************************************************************/
 
735
 
 
736
#pragma mark FSCheckLock
 
737
 
 
738
OSErr
 
739
FSCheckLock(
 
740
        const FSRef *ref);
 
741
 
 
742
/*
 
743
        The FSCheckLock function determines if a file or directory is locked.
 
744
        If FSCheckLock returns noErr, then the file or directory is not locked
 
745
        and the volume it is on is not locked either. If FSCheckLock returns
 
746
        fLckdErr, then the file or directory is locked. If FSCheckLock returns
 
747
        wPrErr, then the volume is locked by hardware (i.e., locked tab on
 
748
        removable media). If FSCheckLock returns vLckdErr, then the volume is
 
749
        locked by software.
 
750
        
 
751
        ref                                     --> FSRef to a file or directory.
 
752
*/
 
753
 
 
754
/*****************************************************************************/
 
755
 
 
756
#pragma mark FSGetForkSizes
 
757
 
 
758
OSErr
 
759
FSGetForkSizes(
 
760
        const FSRef *ref,
 
761
        UInt64 *dataLogicalSize,        /* can be NULL */
 
762
        UInt64 *rsrcLogicalSize);       /* can be NULL */
 
763
 
 
764
/*
 
765
        The FSGetForkSizes returns the size of the data and/or resource fork for
 
766
        the specified file.
 
767
        
 
768
        ref                                     --> FSRef to a file or directory.
 
769
        dataLogicalSize         <** An optional pointer to a UInt64.
 
770
                                                        If not NULL, the data fork's size will be
 
771
                                                        returned in the UInt64.
 
772
        rsrcLogicalSize         <** An optional pointer to a UInt64.
 
773
                                                        If not NULL, the resource fork's size will be
 
774
                                                        returned in the UInt64.
 
775
        
 
776
        __________
 
777
        
 
778
        Also see:       FSGetTotalForkSizes
 
779
*/
 
780
 
 
781
/*****************************************************************************/
 
782
 
 
783
#pragma mark FSGetTotalForkSizes
 
784
 
 
785
OSErr
 
786
FSGetTotalForkSizes(
 
787
        const FSRef *ref,
 
788
        UInt64 *totalLogicalSize,       /* can be NULL */
 
789
        UInt64 *totalPhysicalSize,      /* can be NULL */
 
790
        ItemCount *forkCount);          /* can be NULL */
 
791
 
 
792
/*
 
793
        The FSGetTotalForkSizes returns the total logical size and/or the total
 
794
        physical size of the specified file (i.e., it adds the sizes of all file
 
795
        forks). It optionally returns the number of file forks.
 
796
        
 
797
        ref                                     --> FSRef to a file or directory.
 
798
        totalLogicalSize        <** An optional pointer to a UInt64.
 
799
                                                        If not NULL, the sum of all fork logical sizes
 
800
                                                        will be returned in the UInt64.
 
801
        totalPhysicalSize       <** An optional pointer to a UInt64.
 
802
                                                        If not NULL, the sum of all fork physical sizes
 
803
                                                        will be returned in the UInt64.
 
804
        forkCount                       <** An optional pointer to a ItemCount.
 
805
                                                        If not NULL, the number of file forks
 
806
                                                        will be returned in the ItemCount.
 
807
        
 
808
        __________
 
809
        
 
810
        Also see:       FSGetForkSizes
 
811
*/
 
812
 
 
813
/*****************************************************************************/
 
814
 
 
815
#pragma mark FSBumpDate
 
816
 
 
817
OSErr
 
818
FSBumpDate(
 
819
        const FSRef *ref);
 
820
 
 
821
/*
 
822
        The FSBumpDate function changes the content modification date of a file
 
823
        or directory to the current date/time. If the content modification date
 
824
        is already equal to the current date/time, then add one second to the
 
825
        content modification date.
 
826
 
 
827
        ref                                     --> FSRef to a file or directory.
 
828
*/
 
829
 
 
830
/*****************************************************************************/
 
831
 
 
832
#pragma mark FSGetFinderInfo
 
833
 
 
834
OSErr
 
835
FSGetFinderInfo(
 
836
        const FSRef *ref,
 
837
        FinderInfo *info,                                       /* can be NULL */
 
838
        ExtendedFinderInfo *extendedInfo,       /* can be NULL */
 
839
        Boolean *isDirectory);                          /* can be NULL */
 
840
 
 
841
/*
 
842
        The FSGetFinderInfo function gets the finder information for a file or
 
843
        directory.
 
844
 
 
845
        ref                                     --> FSRef to a file or directory.
 
846
        info                            <** An optional pointer to a FinderInfo.
 
847
                                                        If not NULL, the FileInfo (if ref is a file) or
 
848
                                                        the FolderInfo (if ref is a folder) will be
 
849
                                                        returned in the FinderInfo.
 
850
        extendedInfo            <** An optional pointer to a ExtendedFinderInfo.
 
851
                                                        If not NULL, the ExtendedFileInfo (if ref is a file)
 
852
                                                        or the ExtendedFolderInfo (if ref is a folder) will
 
853
                                                        be returned in the ExtendedFinderInfo.
 
854
        isDirectory                     <** An optional pointer to a Boolean.
 
855
                                                        If not NULL, true will be returned in the Boolean
 
856
                                                        if the object is a directory, or false will be
 
857
                                                        returned in the Boolean if object is a file.
 
858
 
 
859
        __________
 
860
 
 
861
        Also see:       FSSetFinderInfo
 
862
*/
 
863
 
 
864
/*****************************************************************************/
 
865
 
 
866
#pragma mark FSSetFinderInfo
 
867
 
 
868
OSErr
 
869
FSSetFinderInfo(
 
870
        const FSRef *ref,
 
871
        const FinderInfo *info,                                         /* can be NULL */
 
872
        const ExtendedFinderInfo *extendedInfo);        /* can be NULL */
 
873
 
 
874
/*
 
875
        The FSSetFinderInfo function sets the finder information for a file or
 
876
        directory.
 
877
 
 
878
        ref                                     --> FSRef to a file or directory.
 
879
        info                            **> A pointer to a FinderInfo record with the new
 
880
                                                        FileInfo (if ref is a file) or new FolderInfo
 
881
                                                        (if ref is a folder), or NULL if the FinderInfo
 
882
                                                        is not to be changed.
 
883
        extendedInfo            **> A pointer to a FinderInfo record with the new
 
884
                                                        ExtendedFileInfo (if ref is a file) or new
 
885
                                                        ExtendedFolderInfo (if ref is a folder), or NULL
 
886
                                                        if the ExtendedFinderInfo is not to be changed.
 
887
                
 
888
        __________
 
889
 
 
890
        Also see:       FSGetFinderInfo
 
891
*/
 
892
 
 
893
/*****************************************************************************/
 
894
 
 
895
#pragma mark FSChangeCreatorType
 
896
 
 
897
OSErr
 
898
FSChangeCreatorType(
 
899
        const FSRef *ref,
 
900
        OSType fileCreator,
 
901
        OSType fileType);
 
902
 
 
903
/*
 
904
        The FSChangeCreatorType function changes the creator and/or file type of a file.
 
905
 
 
906
        ref                                     --> FSRef to a file.
 
907
        creator                         --> The new creator type or 0x00000000 to leave
 
908
                                                        the creator type alone.
 
909
        fileType                        --> The new file type or 0x00000000 to leave the
 
910
                                                        file type alone.
 
911
*/
 
912
 
 
913
/*****************************************************************************/
 
914
 
 
915
#pragma mark FSChangeFinderFlags
 
916
 
 
917
OSErr
 
918
FSChangeFinderFlags(
 
919
        const FSRef *ref,
 
920
        Boolean setBits,
 
921
        UInt16 flagBits);
 
922
 
 
923
/*
 
924
        The FSChangeFinderFlags function sets or clears flag bits in
 
925
        the finderFlags field of a file's FileInfo record or a
 
926
        directory's FolderInfo record.
 
927
 
 
928
        ref                                     --> FSRef to a file or directory.
 
929
        setBits                         --> If true, then set the bits specified in flagBits.
 
930
                                                        If false, then clear the bits specified in flagBits.
 
931
        flagBits                        --> The flagBits parameter specifies which Finder Flag
 
932
                                                        bits to set or clear. If a bit in flagBits is set,
 
933
                                                        then the same bit in fdFlags is either set or
 
934
                                                        cleared depending on the state of the setBits
 
935
                                                        parameter.
 
936
*/
 
937
 
 
938
/*****************************************************************************/
 
939
 
 
940
#pragma mark FSSetInvisible
 
941
 
 
942
OSErr
 
943
FSSetInvisible(
 
944
        const FSRef *ref);
 
945
 
 
946
#pragma mark FSClearInvisible
 
947
 
 
948
OSErr
 
949
FSClearInvisible(
 
950
        const FSRef *ref);
 
951
 
 
952
/*
 
953
        The FSSetInvisible and FSClearInvisible functions set or clear the
 
954
        kIsInvisible bit in the finderFlags field of the specified file or
 
955
        directory's finder information.
 
956
 
 
957
        ref                                     --> FSRef to a file or directory.
 
958
*/
 
959
 
 
960
/*****************************************************************************/
 
961
 
 
962
#pragma mark FSSetNameLocked
 
963
 
 
964
OSErr
 
965
FSSetNameLocked(
 
966
        const FSRef *ref);
 
967
 
 
968
#pragma mark FSClearNameLocked
 
969
 
 
970
OSErr
 
971
FSClearNameLocked(
 
972
        const FSRef *ref);
 
973
 
 
974
/*
 
975
        The FSSetNameLocked and FSClearNameLocked functions set or clear the
 
976
        kNameLocked bit bit in the finderFlags field of the specified file or
 
977
        directory's finder information.
 
978
 
 
979
        ref                                     --> FSRef to a file or directory.
 
980
*/
 
981
 
 
982
/*****************************************************************************/
 
983
 
 
984
#pragma mark FSSetIsStationery
 
985
 
 
986
OSErr
 
987
FSSetIsStationery(
 
988
        const FSRef *ref);
 
989
 
 
990
#pragma mark FSClearIsStationery
 
991
 
 
992
OSErr
 
993
FSClearIsStationery(
 
994
        const FSRef *ref);
 
995
 
 
996
/*
 
997
        The FSSetIsStationery and FSClearIsStationery functions set or clear the
 
998
        kIsStationery bit bit in the finderFlags field of the specified file or
 
999
        directory's finder information.
 
1000
 
 
1001
        ref                                     --> FSRef to a file or directory.
 
1002
*/
 
1003
 
 
1004
/*****************************************************************************/
 
1005
 
 
1006
#pragma mark FSSetHasCustomIcon
 
1007
 
 
1008
OSErr
 
1009
FSSetHasCustomIcon(
 
1010
        const FSRef *ref);
 
1011
 
 
1012
#pragma mark FSClearHasCustomIcon
 
1013
 
 
1014
OSErr
 
1015
FSClearHasCustomIcon(
 
1016
        const FSRef *ref);
 
1017
 
 
1018
/*
 
1019
        The FSSetHasCustomIcon and FSClearHasCustomIcon functions set or clear the
 
1020
        kHasCustomIcon bit bit in the finderFlags field of the specified file or
 
1021
        directory's finder information.
 
1022
 
 
1023
        ref                                     --> FSRef to a file or directory.
 
1024
*/
 
1025
 
 
1026
/*****************************************************************************/
 
1027
 
 
1028
#pragma mark FSClearHasBeenInited
 
1029
 
 
1030
OSErr
 
1031
FSClearHasBeenInited(
 
1032
        const FSRef *ref);
 
1033
 
 
1034
/*
 
1035
        The FSClearHasBeenInited function clears the kHasBeenInited bit in the
 
1036
        finderFlags field of the specified file or directory's finder information.
 
1037
        
 
1038
        Note:   There is no FSSetHasBeenInited function because ONLY the Finder
 
1039
                        should set the kHasBeenInited bit.
 
1040
 
 
1041
        ref                                     --> FSRef to a file or directory.
 
1042
*/
 
1043
 
 
1044
/*****************************************************************************/
 
1045
 
 
1046
#pragma mark FSCopyFileMgrAttributes
 
1047
 
 
1048
OSErr
 
1049
FSCopyFileMgrAttributes(
 
1050
        const FSRef *sourceRef,
 
1051
        const FSRef *destinationRef,
 
1052
        Boolean copyLockBit);
 
1053
 
 
1054
/*
 
1055
        The CopyFileMgrAttributes function copies all File Manager attributes
 
1056
        from the source file or directory to the destination file or directory.
 
1057
        If copyLockBit is true, then set the locked state of the destination
 
1058
        to match the source.
 
1059
 
 
1060
        sourceRef                       --> FSRef to a file or directory.
 
1061
        destinationRef          --> FSRef to a file or directory.
 
1062
        copyLockBit                     --> If true, set the locked state of the destination
 
1063
                                                        to match the source.
 
1064
*/
 
1065
 
 
1066
/*****************************************************************************/
 
1067
 
 
1068
#pragma mark FSMoveRenameObjectUnicode
 
1069
 
 
1070
OSErr
 
1071
FSMoveRenameObjectUnicode(
 
1072
        const FSRef *ref,
 
1073
        const FSRef *destDirectory,
 
1074
        UniCharCount nameLength,
 
1075
        const UniChar *name,                    /* can be NULL (no rename during move) */
 
1076
        TextEncoding textEncodingHint,
 
1077
        FSRef *newRef);                                 /* if function fails along the way, newRef is final location of file */
 
1078
 
 
1079
/*
 
1080
        The FSMoveRenameObjectUnicode function moves a file or directory and
 
1081
        optionally renames it.  The source and destination locations must be on
 
1082
        the same volume.
 
1083
        
 
1084
        Note:   If the input ref parameter is invalid, this call will fail and
 
1085
                        newRef, like ref, will be invalid.
 
1086
 
 
1087
        ref                                     --> FSRef to a file or directory.
 
1088
        destDirectory           --> FSRef to the destination directory.
 
1089
        nameLength                      --> Number of UniChar in name parameter.
 
1090
        name                            --> An Unicode string with the new name for the
 
1091
                                                        moved object, or NULL if no rename is wanted.
 
1092
        textEncodingHint        --> The text encoding hint used for the rename.
 
1093
                                                        You can pass kTextEncodingUnknown to use the
 
1094
                                                        "default" textEncodingHint.
 
1095
        newRef                          <-- The new FSRef of the object moved. Note that if
 
1096
                                                        this function fails at any step along the way,
 
1097
                                                        newRef is still then final location of the object.
 
1098
*/
 
1099
 
 
1100
/*****************************************************************************/
 
1101
 
 
1102
#pragma mark FSDeleteContainerContents
 
1103
 
 
1104
OSErr
 
1105
FSDeleteContainerContents(
 
1106
        const FSRef *container);
 
1107
 
 
1108
/*
 
1109
        The FSDeleteContainerContents function deletes the contents of a container
 
1110
        directory. All files and subdirectories in the specified container are
 
1111
        deleted. If a locked file or directory is encountered, it is unlocked and
 
1112
        then deleted. If any unexpected errors are encountered,
 
1113
        FSDeleteContainerContents quits and returns to the caller.
 
1114
        
 
1115
        container                       --> FSRef to a directory.
 
1116
        
 
1117
        __________
 
1118
        
 
1119
        Also see:       FSDeleteContainer
 
1120
*/
 
1121
 
 
1122
/*****************************************************************************/
 
1123
 
 
1124
#pragma mark FSDeleteContainer
 
1125
 
 
1126
OSErr
 
1127
FSDeleteContainer(
 
1128
        const FSRef *container);
 
1129
 
 
1130
/*
 
1131
        The FSDeleteContainer function deletes a container directory and its contents.
 
1132
        All files and subdirectories in the specified container are deleted.
 
1133
        If a locked file or directory is encountered, it is unlocked and then
 
1134
        deleted.  After deleting the container's contents, the container is
 
1135
        deleted. If any unexpected errors are encountered, FSDeleteContainer
 
1136
        quits and returns to the caller.
 
1137
        
 
1138
        container                       --> FSRef to a directory.
 
1139
        
 
1140
        __________
 
1141
        
 
1142
        Also see:       FSDeleteContainerContents
 
1143
*/
 
1144
 
 
1145
/*****************************************************************************/
 
1146
 
 
1147
#pragma mark IterateContainerFilterProcPtr
 
1148
 
 
1149
typedef CALLBACK_API( Boolean , IterateContainerFilterProcPtr ) (
 
1150
        Boolean containerChanged,
 
1151
        ItemCount currentLevel,
 
1152
        const FSCatalogInfo *catalogInfo,
 
1153
        const FSRef *ref,
 
1154
        const FSSpec *spec,
 
1155
        const HFSUniStr255 *name,
 
1156
        void *yourDataPtr);
 
1157
 
 
1158
/*
 
1159
        This is the prototype for the IterateContainerFilterProc function which
 
1160
        is called once for each file and directory found by FSIterateContainer.
 
1161
        The IterateContainerFilterProc can use the read-only data it receives for
 
1162
        whatever it wants.
 
1163
 
 
1164
        The result of the IterateContainerFilterProc function indicates if
 
1165
        iteration should be stopped. To stop iteration, return true; to continue
 
1166
        iteration, return false.
 
1167
 
 
1168
        The yourDataPtr parameter can point to whatever data structure you might
 
1169
        want to access from within the IterateContainerFilterProc.
 
1170
 
 
1171
        containerChanged        --> Set to true if the container's contents changed
 
1172
                                                        during iteration.
 
1173
        currentLevel            --> The current recursion level into the container.
 
1174
                                                        1 = the container, 2 = the container's immediate
 
1175
                                                        subdirectories, etc.
 
1176
        catalogInfo                     --> The catalog information for the current object.
 
1177
                                                        Only the fields requested by the whichInfo
 
1178
                                                        parameter passed to FSIterateContainer are valid.
 
1179
        ref                                     --> The FSRef to the current object.
 
1180
        spec                            --> The FSSpec to the current object if the wantFSSpec
 
1181
                                                        parameter passed to FSIterateContainer is true.
 
1182
        name                            --> The name of the current object if the wantName
 
1183
                                                        parameter passed to FSIterateContainer is true.
 
1184
        yourDataPtr                     --> An optional pointer to whatever data structure you
 
1185
                                                        might want to access from within the
 
1186
                                                        IterateFilterProc.
 
1187
        result                          <-- To stop iteration, return true; to continue
 
1188
                                                        iteration, return false.
 
1189
 
 
1190
        __________
 
1191
 
 
1192
        Also see:       FSIterateContainer
 
1193
*/
 
1194
 
 
1195
/*****************************************************************************/
 
1196
 
 
1197
#pragma mark CallIterateContainerFilterProc
 
1198
 
 
1199
#define CallIterateContainerFilterProc(userRoutine, containerChanged, currentLevel, catalogInfo, ref, spec, name, yourDataPtr) \
 
1200
        (*(userRoutine))((containerChanged), (currentLevel), (catalogInfo), (ref), (spec), (name), (yourDataPtr))
 
1201
 
 
1202
/*****************************************************************************/
 
1203
 
 
1204
#pragma mark FSIterateContainer
 
1205
 
 
1206
OSErr
 
1207
FSIterateContainer(
 
1208
        const FSRef *container,
 
1209
        ItemCount maxLevels,
 
1210
        FSCatalogInfoBitmap whichInfo,
 
1211
        Boolean wantFSSpec,
 
1212
        Boolean wantName,
 
1213
        IterateContainerFilterProcPtr iterateFilter,
 
1214
        void *yourDataPtr);
 
1215
 
 
1216
/*
 
1217
        The FSIterateContainer function performs a recursive iteration (scan) of the
 
1218
        specified container directory and calls your IterateContainerFilterProc
 
1219
        function once for each file and directory found.
 
1220
 
 
1221
        The maxLevels parameter lets you control how deep the recursion goes.
 
1222
        If maxLevels is 1, FSIterateContainer only scans the specified directory;
 
1223
        if maxLevels is 2, FSIterateContainer scans the specified directory and
 
1224
        one subdirectory below the specified directory; etc. Set maxLevels to
 
1225
        zero to scan all levels.
 
1226
 
 
1227
        The yourDataPtr parameter can point to whatever data structure you might
 
1228
        want to access from within your IterateContainerFilterProc.
 
1229
 
 
1230
        container                       --> The FSRef to the container directory to iterate.
 
1231
        maxLevels                       --> Maximum number of directory levels to scan or
 
1232
                                                        zero to scan all directory levels.
 
1233
        whichInfo                       --> The fields of the FSCatalogInfo you wish to get.
 
1234
        wantFSSpec                      --> Set to true if you want the FSSpec to each
 
1235
                                                        object passed to your IterateContainerFilterProc.
 
1236
        wantName                        --> Set to true if you want the name of each
 
1237
                                                        object passed to your IterateContainerFilterProc.
 
1238
        iterateFilter           --> A pointer to the IterateContainerFilterProc you
 
1239
                                                        want called once for each file and directory found
 
1240
                                                        by FSIterateContainer.
 
1241
        yourDataPtr                     --> An optional pointer to whatever data structure you
 
1242
                                                        might want to access from within the
 
1243
                                                        IterateFilterProc.
 
1244
*/
 
1245
 
 
1246
/*****************************************************************************/
 
1247
 
 
1248
#pragma mark FSGetDirectoryItems
 
1249
 
 
1250
OSErr
 
1251
FSGetDirectoryItems(
 
1252
        const FSRef *container,
 
1253
        FSRef ***refsHandle,    /* pointer to handle of FSRefs */
 
1254
        ItemCount *numRefs,
 
1255
        Boolean *containerChanged);
 
1256
 
 
1257
/*
 
1258
        The FSGetDirectoryItems function returns the list of items in the specified
 
1259
        container. The array of FSRef records is returned in a Handle, refsHandle,
 
1260
        which is allocated by FSGetDirectoryItems. The caller is responsible for
 
1261
        disposing of refsHandle if the FSGetDirectoryItems returns noErr.
 
1262
                
 
1263
        container                       --> FSRef to a directory.
 
1264
        refsHandle                      <-- Pointer to an FSRef Handle where the array of
 
1265
                                                        FSRefs is to be returned.
 
1266
        numRefs                         <-- The number of FSRefs returned in the array.
 
1267
        containerChanged        <-- Set to true if the container changes while the
 
1268
                                                        list of items is being obtained.
 
1269
*/
 
1270
 
 
1271
/*****************************************************************************/
 
1272
 
 
1273
#pragma mark FSExchangeObjectsCompat
 
1274
 
 
1275
OSErr
 
1276
FSExchangeObjectsCompat(
 
1277
        const FSRef *sourceRef,
 
1278
        const FSRef *destRef,
 
1279
        FSRef *newSourceRef,
 
1280
        FSRef *newDestRef);
 
1281
 
 
1282
/*
 
1283
        The FSExchangeObjectsCompat function exchanges the data between two files.
 
1284
        
 
1285
        The FSExchangeObjectsCompat function is an enhanced version of
 
1286
        FSExchangeObjects function. The two enhancements FSExchangeObjectsCompat
 
1287
        provides are:
 
1288
        
 
1289
        1,      FSExchangeObjectsCompat will work on volumes which do not support
 
1290
                FSExchangeObjects. FSExchangeObjectsCompat does this by emulating
 
1291
                FSExchangeObjects through a series of File Manager operations. If
 
1292
                there is a failure at any step along the way, FSExchangeObjectsCompat
 
1293
                attempts to undo any steps already taken to leave the files in their
 
1294
                original state in their original locations.
 
1295
                
 
1296
        2.      FSExchangeObjectsCompat returns new FSRefs to the source and
 
1297
                destination files. Note that if this function fails at any step along
 
1298
                the way, newSourceRef and newDestRef still give you access to the final
 
1299
                locations of the files being exchanged -- even if they are renamed or
 
1300
                not in their original locations.
 
1301
 
 
1302
        sourceRef                       --> FSRef to the source file.
 
1303
        destRef                         --> FSRef to the destination file.
 
1304
        newSourceRef            <-- The new FSRef to the source file.
 
1305
        newDestRef                      <-- The new FSRef to the destination file.
 
1306
*/
 
1307
 
 
1308
/*****************************************************************************/
 
1309
 
 
1310
#pragma mark ----- Shared Environment Routines -----
 
1311
 
 
1312
/*****************************************************************************/
 
1313
 
 
1314
#pragma mark FSLockRange
 
1315
 
 
1316
OSErr
 
1317
FSLockRange(
 
1318
        SInt16 refNum,
 
1319
        SInt32 rangeLength,
 
1320
        SInt32 rangeStart);
 
1321
 
 
1322
/*
 
1323
        The LockRange function locks (denies access to) a portion of a file
 
1324
        that was opened with shared read/write permission.
 
1325
 
 
1326
        refNum                          --> The file reference number of an open file.
 
1327
        rangeLength                     --> The number of bytes in the range.
 
1328
        rangeStart                      --> The starting byte in the range to lock.
 
1329
 
 
1330
        __________
 
1331
 
 
1332
        Also see:       UnlockRange
 
1333
*/
 
1334
 
 
1335
/*****************************************************************************/
 
1336
 
 
1337
#pragma mark FSUnlockRange
 
1338
 
 
1339
OSErr
 
1340
FSUnlockRange(
 
1341
        SInt16 refNum,
 
1342
        SInt32 rangeLength,
 
1343
        SInt32 rangeStart);
 
1344
 
 
1345
/*
 
1346
        The UnlockRange function unlocks (allows access to) a previously locked
 
1347
        portion of a file that was opened with shared read/write permission.
 
1348
 
 
1349
        refNum                          --> The file reference number of an open file.
 
1350
        rangeLength                     --> The number of bytes in the range.
 
1351
        rangeStart                      --> The starting byte in the range to unlock.
 
1352
 
 
1353
        __________
 
1354
 
 
1355
        Also see:       LockRange
 
1356
*/
 
1357
 
 
1358
/*****************************************************************************/
 
1359
 
 
1360
#pragma mark FSGetDirAccess
 
1361
 
 
1362
OSErr
 
1363
FSGetDirAccess(
 
1364
        const FSRef *ref,
 
1365
        SInt32 *ownerID,                /* can be NULL */
 
1366
        SInt32 *groupID,                /* can be NULL */
 
1367
        SInt32 *accessRights);  /* can be NULL */
 
1368
 
 
1369
/*
 
1370
        The FSGetDirAccess function retrieves the directory access control
 
1371
        information for a directory on a shared volume.
 
1372
 
 
1373
        ref                                     --> An FSRef specifying the directory.
 
1374
        ownerID                         <** An optional pointer to a SInt32.
 
1375
                                                        If not NULL, the directory's owner ID
 
1376
                                                        will be returned in the SInt32.
 
1377
        groupID                         <** An optional pointer to a SInt32.
 
1378
                                                        If not NULL, the directory's group ID, or 0
 
1379
                                                        if no group affiliation, will be returned in
 
1380
                                                        the SInt32.
 
1381
        accessRights            <** An optional pointer to a SInt32.
 
1382
                                                        If not NULL, the directory's access rights
 
1383
                                                        will be returned in the SInt32.
 
1384
 
 
1385
        __________
 
1386
 
 
1387
        Also see:       FSSetDirAccess, FSMapID, FSMapName
 
1388
*/
 
1389
 
 
1390
/*****************************************************************************/
 
1391
 
 
1392
#pragma mark FSSetDirAccess
 
1393
 
 
1394
OSErr
 
1395
FSSetDirAccess(
 
1396
        const FSRef *ref,
 
1397
        SInt32 ownerID,
 
1398
        SInt32 groupID,
 
1399
        SInt32 accessRights);
 
1400
 
 
1401
/*
 
1402
        The FSpSetDirAccess function changes the directory access control
 
1403
        information for a directory on a shared volume. You must be the owner of
 
1404
        a directory to change its access control information.
 
1405
        
 
1406
        ref                                     --> An FSRef specifying the directory.
 
1407
        ownerID                         --> The directory's owner ID.
 
1408
        groupID                         --> The directory's group ID or 0 if no group affiliation.
 
1409
        accessRights            --> The directory's access rights.
 
1410
        
 
1411
        __________
 
1412
        
 
1413
        Also see:       FSGetDirAccess, FSMapID, FSMapName
 
1414
*/
 
1415
 
 
1416
/*****************************************************************************/
 
1417
 
 
1418
#pragma mark FSGetVolMountInfoSize
 
1419
 
 
1420
OSErr
 
1421
FSGetVolMountInfoSize(
 
1422
        FSVolumeRefNum volRefNum,
 
1423
        SInt16 *size);
 
1424
 
 
1425
/*
 
1426
        The FSGetVolMountInfoSize function determines the how much space the
 
1427
        program needs to allocate for a volume mounting information record.
 
1428
 
 
1429
        volRefNum                       --> Volume specification.
 
1430
        size                            <-- The space needed (in bytes) of the volume
 
1431
                                                        mounting information record.
 
1432
 
 
1433
        __________
 
1434
 
 
1435
        Also see:       FSGetVolMountInfo, VolumeMount
 
1436
*/
 
1437
 
 
1438
/*****************************************************************************/
 
1439
 
 
1440
#pragma mark FSGetVolMountInfo
 
1441
 
 
1442
OSErr
 
1443
FSGetVolMountInfo(
 
1444
        FSVolumeRefNum volRefNum,
 
1445
        void *volMountInfo);
 
1446
 
 
1447
/*
 
1448
        The FSGetVolMountInfo function retrieves a volume mounting information
 
1449
        record containing all the information needed to mount the volume,
 
1450
        except for passwords.
 
1451
 
 
1452
        volRefNum                       --> Volume specification.
 
1453
        volMountInfo            <-- The volume mounting information.
 
1454
 
 
1455
        __________
 
1456
 
 
1457
        Also see:       FSGetVolMountInfoSize, VolumeMount
 
1458
*/
 
1459
 
 
1460
/*****************************************************************************/
 
1461
 
 
1462
#pragma mark FSVolumeMount
 
1463
 
 
1464
OSErr
 
1465
FSVolumeMount(
 
1466
        const void *volMountInfo,
 
1467
        FSVolumeRefNum *volRefNum);
 
1468
 
 
1469
/*
 
1470
        The VolumeMount function mounts a volume using a volume mounting
 
1471
        information record.
 
1472
 
 
1473
        volMountInfo            --> A volume mounting information record.
 
1474
        volRefNum                       <-- The volume reference number.
 
1475
 
 
1476
        __________
 
1477
 
 
1478
        Also see:       FSGetVolMountInfoSize, FSGetVolMountInfo
 
1479
*/
 
1480
 
 
1481
/*****************************************************************************/
 
1482
 
 
1483
#pragma mark FSMapID
 
1484
 
 
1485
OSErr
 
1486
FSMapID(
 
1487
        FSVolumeRefNum volRefNum,
 
1488
        SInt32 ugID,
 
1489
        SInt16 objType,
 
1490
        Str31 name);
 
1491
 
 
1492
/*
 
1493
        The FSMapID function determines the name of a user or group if you know
 
1494
        the user or group ID.
 
1495
 
 
1496
        volRefNum                       --> Volume specification.
 
1497
        objType                         --> The mapping function code:
 
1498
                                                        kOwnerID2Name to map a user ID to a user name
 
1499
                                                        kGroupID2Name to map a group ID to a group name
 
1500
        name                            <** An optional pointer to a buffer (minimum Str31).
 
1501
                                                        If not NULL, the user or group name
 
1502
                                                        will be returned in the buffer.
 
1503
 
 
1504
        __________
 
1505
 
 
1506
        Also see:       FSGetDirAccess, FSSetDirAccess, FSMapName
 
1507
*/
 
1508
 
 
1509
/*****************************************************************************/
 
1510
 
 
1511
#pragma mark FSMapName
 
1512
 
 
1513
OSErr
 
1514
FSMapName(
 
1515
        FSVolumeRefNum volRefNum,
 
1516
        ConstStr255Param name,
 
1517
        SInt16 objType,
 
1518
        SInt32 *ugID);
 
1519
 
 
1520
/*
 
1521
        The FSMapName function determines the user or group ID if you know the
 
1522
        user or group name.
 
1523
        
 
1524
        volRefNum                       --> Volume specification.
 
1525
        name                            --> The user or group name.
 
1526
        objType                         --> The mapping function code:
 
1527
                                                        kOwnerName2ID to map a user name to a user ID
 
1528
                                                        kGroupName2ID to map a user name to a group ID
 
1529
        ugID                            <-- The user or group ID.
 
1530
 
 
1531
        __________
 
1532
        
 
1533
        Also see:       FSGetDirAccess, FSSetDirAccess, FSMapID
 
1534
*/
 
1535
 
 
1536
/*****************************************************************************/
 
1537
 
 
1538
#pragma mark FSCopyFile
 
1539
 
 
1540
OSErr
 
1541
FSCopyFile(
 
1542
        const FSRef *srcFileRef,
 
1543
        const FSRef *dstDirectoryRef,
 
1544
        UniCharCount nameLength,
 
1545
        const UniChar *copyName,        /* can be NULL (no rename during copy) */
 
1546
        TextEncoding textEncodingHint,
 
1547
        FSRef *newRef);                         /* can be NULL */
 
1548
 
 
1549
/*
 
1550
        The FSCopyFile function duplicates a file and optionally renames it.
 
1551
        The source and destination volumes must be on the same file server.
 
1552
        This function instructs the server to copy the file.
 
1553
        
 
1554
        srcFileRef                      --> An FSRef specifying the source file.
 
1555
        dstDirectoryRef         --> An FSRef specifying the destination directory.
 
1556
        nameLength                      --> Number of UniChar in copyName parameter (ignored
 
1557
                                                        if copyName is NULL).
 
1558
        copyName                        --> Points to the new file name if the file is to be
 
1559
                                                        renamed, or NULL if the file isn't to be renamed.
 
1560
        textEncodingHint        --> The text encoding hint used for the rename.
 
1561
                                                        You can pass kTextEncodingUnknown to use the
 
1562
                                                        "default" textEncodingHint.
 
1563
        newRef                          <** An optional pointer to a FSRef.
 
1564
                                                        If not NULL, the FSRef of the duplicated file
 
1565
                                                        will be returned in the FSRef.
 
1566
*/
 
1567
 
 
1568
/*****************************************************************************/
 
1569
 
 
1570
#pragma mark FSMoveRename
 
1571
 
 
1572
OSErr
 
1573
FSMoveRename(
 
1574
        const FSRef *srcFileRef,
 
1575
        const FSRef *dstDirectoryRef,
 
1576
        UniCharCount nameLength,
 
1577
        const UniChar *moveName,        /* can be NULL (no rename during move) */
 
1578
        TextEncoding textEncodingHint,
 
1579
        FSRef *newRef);                         /* can be NULL */
 
1580
 
 
1581
/*
 
1582
        The FSMoveRename function moves a file or directory (object), and
 
1583
        optionally renames it. The source and destination locations must be on
 
1584
        the same shared volume.
 
1585
        
 
1586
        srcFileRef                      --> An FSRef specifying the source file.
 
1587
        dstDirectoryRef         --> An FSRef specifying the destination directory.
 
1588
        nameLength                      --> Number of UniChar in moveName parameter (ignored
 
1589
                                                        if copyName is NULL)
 
1590
        moveName                        --> Points to the new object name if the object is to be
 
1591
                                                        renamed, or NULL if the object isn't to be renamed.
 
1592
        textEncodingHint        --> The text encoding hint used for the rename.
 
1593
                                                        You can pass kTextEncodingUnknown to use the
 
1594
                                                        "default" textEncodingHint.
 
1595
        newRef                          <** An optional pointer to a FSRef.
 
1596
                                                        If not NULL, the FSRef of the moved object
 
1597
                                                        will be returned in the FSRef.
 
1598
*/
 
1599
 
 
1600
/*****************************************************************************/
 
1601
 
 
1602
#pragma mark ----- File ID Routines -----
 
1603
 
 
1604
/*****************************************************************************/
 
1605
 
 
1606
#pragma mark FSResolveFileIDRef
 
1607
 
 
1608
OSErr
 
1609
FSResolveFileIDRef(
 
1610
        FSVolumeRefNum volRefNum,
 
1611
        SInt32 fileID,
 
1612
        FSRef *ref);
 
1613
 
 
1614
/*
 
1615
        The FSResolveFileIDRef function returns an FSRef for the file with the
 
1616
        specified file ID reference.
 
1617
 
 
1618
        volRefNum                       --> Volume specification.
 
1619
        fileID                          --> The file ID reference.
 
1620
        ref                                     <-- The FSRef for the file ID reference.
 
1621
 
 
1622
        __________
 
1623
 
 
1624
        Also see:       FSCreateFileIDRef, FSDeleteFileIDRef
 
1625
*/
 
1626
 
 
1627
/*****************************************************************************/
 
1628
 
 
1629
#pragma mark FSCreateFileIDRef
 
1630
 
 
1631
OSErr
 
1632
FSCreateFileIDRef(
 
1633
        const FSRef *ref,
 
1634
        SInt32 *fileID);
 
1635
 
 
1636
/*
 
1637
        The FSCreateFileIDRef function creates a file ID reference for the
 
1638
        specified file, or if a file ID reference already exists, supplies
 
1639
        the file ID reference and returns the result code fidExists or afpIDExists.
 
1640
 
 
1641
        ref                                     --> The FSRef for the file.
 
1642
        fileID                          <-- The file ID reference (if result is noErr,
 
1643
                                                        fidExists, or afpIDExists).
 
1644
 
 
1645
        __________
 
1646
 
 
1647
        Also see:       GetFSRefFromFileIDRef, FSDeleteFileIDRef
 
1648
*/
 
1649
 
 
1650
/*****************************************************************************/
 
1651
 
 
1652
#pragma mark FSDeleteFileIDRef
 
1653
 
 
1654
/*
 
1655
        Why is there no FSDeleteFileIDRef routine? There are two reasons:
 
1656
        
 
1657
        1.      Since Mac OS 8.1, PBDeleteFileIDRef hasn't deleted file ID references.
 
1658
                On HFS volumes, deleting a file ID reference breaks aliases (which
 
1659
                use file ID references to track files as they are moved around on a
 
1660
                volume) and file ID references are automatically deleted when the file
 
1661
                they refer to is deleted. On HFS Plus volumes, file ID references are
 
1662
                always created when a file is created, deleted when the file is deleted,
 
1663
                and cannot be deleted at any other time.
 
1664
                
 
1665
        2.      PBDeleteFileIDRef causes a memory access fault under Mac OS X 10.0
 
1666
                through 10.1.x. While this will be fixed in a future release, the
 
1667
                implementation, like the Mac OS 8/9 implementation, does not delete
 
1668
                file ID references.
 
1669
                
 
1670
        __________
 
1671
 
 
1672
        Also see:       GetFSRefFromFileIDRef, FSCreateFileIDRef
 
1673
*/
 
1674
 
 
1675
/*****************************************************************************/
 
1676
 
 
1677
#pragma mark ----- Utility Routines -----
 
1678
 
 
1679
/*****************************************************************************/
 
1680
 
 
1681
#pragma mark GetTempBuffer
 
1682
 
 
1683
Ptr
 
1684
GetTempBuffer(
 
1685
        ByteCount buffReqSize,
 
1686
        ByteCount *buffActSize);
 
1687
 
 
1688
/*
 
1689
        The GetTempBuffer function allocates a temporary buffer for file system
 
1690
        operations which is at least 4K bytes and a multiple of 4K bytes.
 
1691
        
 
1692
        buffReqSize                     --> Size you'd like the buffer to be.
 
1693
        buffActSize                     <-- The size of the buffer allocated.
 
1694
        function result         <-- Pointer to memory allocated, or NULL if no memory
 
1695
                                                        was available. The caller is responsible for
 
1696
                                                        disposing of this buffer with DisposePtr.
 
1697
*/
 
1698
 
 
1699
/*****************************************************************************/
 
1700
 
 
1701
#pragma mark FileRefNumGetFSRef
 
1702
 
 
1703
OSErr
 
1704
FileRefNumGetFSRef(
 
1705
        short refNum,
 
1706
        FSRef *ref);
 
1707
 
 
1708
/*
 
1709
        The FileRefNumGetFSRef function gets the FSRef of an open file.
 
1710
 
 
1711
        refNum                          --> The file reference number of an open file.
 
1712
        ref                                     <-- The FSRef to the open file.
 
1713
*/
 
1714
 
 
1715
/*****************************************************************************/
 
1716
 
 
1717
#pragma mark FSSetDefault
 
1718
 
 
1719
OSErr
 
1720
FSSetDefault(
 
1721
        const FSRef *newDefault,
 
1722
        FSRef *oldDefault);
 
1723
 
 
1724
/*
 
1725
        The FSSetDefault function sets the current working directory to the
 
1726
        directory specified by newDefault. The previous current working directory
 
1727
        is returned in oldDefault and must be used to restore the current working
 
1728
        directory to its previous state with the FSRestoreDefault function.
 
1729
        These two functions are designed to be used as a wrapper around
 
1730
        Standard I/O routines where the location of the file is implied to be the
 
1731
        current working directory. This is how you should use these functions:
 
1732
        
 
1733
                result = FSSetDefault(&newDefault, &oldDefault);
 
1734
                if ( noErr == result )
 
1735
                {
 
1736
                        // call the Stdio functions like remove, rename,
 
1737
                        // fopen, freopen, etc here!
 
1738
 
 
1739
                        result = FSRestoreDefault(&oldDefault);
 
1740
                }
 
1741
        
 
1742
        newDefault                      --> An FSRef that specifies the new current working
 
1743
                                                        directory.
 
1744
        oldDefault                      <-- The previous current working directory's FSRef.
 
1745
        
 
1746
        __________
 
1747
        
 
1748
        Also see:       FSRestoreDefault
 
1749
*/
 
1750
 
 
1751
/*****************************************************************************/
 
1752
 
 
1753
#pragma mark FSRestoreDefault
 
1754
 
 
1755
OSErr
 
1756
FSRestoreDefault(
 
1757
        const FSRef *oldDefault);
 
1758
 
 
1759
/*
 
1760
        The FSRestoreDefault function restores the current working directory
 
1761
        to the directory specified by oldDefault. The oldDefault parameter was
 
1762
        previously obtained from the FSSetDefault function.
 
1763
        These two functions are designed to be used as a wrapper around
 
1764
        Standard I/O routines where the location of the file is implied to be the
 
1765
        current working directory. This is how you should use these functions:
 
1766
        
 
1767
                result = FSSetDefault(&newDefault, &oldDefault);
 
1768
                if ( noErr == result )
 
1769
                {
 
1770
                        // call the Stdio functions like remove, rename,
 
1771
                        // fopen, freopen, etc here!
 
1772
 
 
1773
                        result = FSRestoreDefault(&oldDefault);
 
1774
                }
 
1775
                
 
1776
        oldDefault                      --> The FSRef of the location to restore.
 
1777
        
 
1778
        __________
 
1779
        
 
1780
        Also see:       FSSetDefault
 
1781
*/
 
1782
 
 
1783
/*****************************************************************************/
 
1784
 
 
1785
#if PRAGMA_STRUCT_ALIGN
 
1786
        #pragma options align=reset
 
1787
#elif PRAGMA_STRUCT_PACKPUSH
 
1788
        #pragma pack(pop)
 
1789
#elif PRAGMA_STRUCT_PACK
 
1790
        #pragma pack()
 
1791
#endif
 
1792
 
 
1793
#ifdef PRAGMA_IMPORT_OFF
 
1794
#pragma import off
 
1795
#elif PRAGMA_IMPORT
 
1796
#pragma import reset
 
1797
#endif
 
1798
 
 
1799
#ifdef __cplusplus
 
1800
}
 
1801
#endif
 
1802
 
 
1803
#endif /* __MOREFILESX__ */
 
1804