• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/amule/wxWidgets-2.8.12/src/mac/carbon/morefile/
1/*
2	File:		MoreFiles.c
3
4	Contains:	The long lost high-level and FSSpec File Manager functions.
5
6	Version:	MoreFiles
7
8	Copyright:	� 1992-2001 by Apple Computer, Inc., all rights reserved.
9
10	You may incorporate this sample code into your applications without
11	restriction, though the sample code has been provided "AS IS" and the
12	responsibility for its operation is 100% yours.  However, what you are
13	not permitted to do is to redistribute the source as "DSC Sample Code"
14	after having made changes. If you're going to re-distribute the source,
15	we require that you make it clear in the source that the code was
16	descended from Apple Sample Code, but that you've made changes.
17
18	File Ownership:
19
20		DRI:				Apple Macintosh Developer Technical Support
21
22		Other Contact:		Apple Macintosh Developer Technical Support
23							<http://developer.apple.com/bugreporter/>
24
25		Technology:			DTS Sample Code
26
27	Writers:
28
29		(JL)	Jim Luther
30
31	Change History (most recent first):
32
33		 <2>	  2/7/01	JL		Added standard header. Updated names of includes.
34		<1>		12/06/99	JL		MoreFiles 1.5.
35*/
36
37#include <MacTypes.h>
38#include <MacErrors.h>
39#include <Files.h>
40
41#define	__COMPILINGMOREFILES
42
43#include "MoreFiles.h"
44#include "MoreFilesExtras.h"
45
46/*****************************************************************************/
47
48pascal	OSErr	HGetVolParms(ConstStr255Param volName,
49							 short vRefNum,
50							 GetVolParmsInfoBuffer *volParmsInfo,
51							 long *infoSize)
52{
53	HParamBlockRec pb;
54	OSErr error;
55
56	pb.ioParam.ioNamePtr = (StringPtr)volName;
57	pb.ioParam.ioVRefNum = vRefNum;
58	pb.ioParam.ioBuffer = (Ptr)volParmsInfo;
59	pb.ioParam.ioReqCount = *infoSize;
60	error = PBHGetVolParmsSync(&pb);
61	if ( error == noErr )
62	{
63		*infoSize = pb.ioParam.ioActCount;
64	}
65	return ( error );
66}
67
68/*****************************************************************************/
69
70pascal	OSErr	HCreateMinimum(short vRefNum,
71							   long dirID,
72							   ConstStr255Param fileName)
73{
74	HParamBlockRec pb;
75
76	pb.fileParam.ioNamePtr = (StringPtr)fileName;
77	pb.fileParam.ioVRefNum = vRefNum;
78	pb.ioParam.ioVersNum = 0;
79	pb.fileParam.ioDirID = dirID;
80	return ( PBHCreateSync(&pb) );
81}
82
83/*****************************************************************************/
84
85pascal	OSErr	FSpCreateMinimum(const FSSpec *spec)
86{
87	return ( HCreateMinimum(spec->vRefNum, spec->parID, spec->name) );
88}
89
90/*****************************************************************************/
91
92pascal	OSErr	ExchangeFiles(short vRefNum,
93							  long srcDirID,
94							  ConstStr255Param srcName,
95							  long dstDirID,
96							  ConstStr255Param dstName)
97{
98	HParamBlockRec pb;
99
100	pb.fidParam.ioVRefNum = vRefNum;
101	pb.fidParam.ioSrcDirID = srcDirID;
102	pb.fidParam.ioNamePtr = (StringPtr)srcName;
103	pb.fidParam.ioDestDirID = dstDirID;
104	pb.fidParam.ioDestNamePtr = (StringPtr)dstName;
105	return ( PBExchangeFilesSync(&pb) );
106}
107
108/*****************************************************************************/
109
110pascal	OSErr	ResolveFileIDRef(ConstStr255Param volName,
111								 short vRefNum,
112								 long fileID,
113								 long *parID,
114								 StringPtr fileName)
115{
116	HParamBlockRec pb;
117	OSErr error;
118	Str255 tempStr;
119
120	tempStr[0] = 0;
121	if ( volName != NULL )
122	{
123		BlockMoveData(volName, tempStr, volName[0] + 1);
124	}
125	pb.fidParam.ioNamePtr = (StringPtr)tempStr;
126	pb.fidParam.ioVRefNum = vRefNum;
127	pb.fidParam.ioFileID = fileID;
128	error = PBResolveFileIDRefSync(&pb);
129	if ( error == noErr )
130	{
131		*parID = pb.fidParam.ioSrcDirID;
132		if ( fileName != NULL )
133		{
134			BlockMoveData(tempStr, fileName, tempStr[0] + 1);
135		}
136	}
137	return ( error );
138}
139
140/*****************************************************************************/
141
142pascal	OSErr	FSpResolveFileIDRef(ConstStr255Param volName,
143									short vRefNum,
144									long fileID,
145									FSSpec *spec)
146{
147	OSErr	error;
148
149	error = DetermineVRefNum(volName, vRefNum, &(spec->vRefNum));
150	if ( error == noErr )
151	{
152		error = ResolveFileIDRef(volName, vRefNum, fileID, &(spec->parID), spec->name);
153	}
154	return ( error );
155}
156
157/*****************************************************************************/
158
159pascal	OSErr	CreateFileIDRef(short vRefNum,
160								long parID,
161								ConstStr255Param fileName,
162								long *fileID)
163{
164	HParamBlockRec pb;
165	OSErr error;
166
167	pb.fidParam.ioNamePtr = (StringPtr)fileName;
168	pb.fidParam.ioVRefNum = vRefNum;
169	pb.fidParam.ioSrcDirID = parID;
170	error = PBCreateFileIDRefSync(&pb);
171	if ( (error == noErr) || (error == fidExists) || (error == afpIDExists) )
172	{
173		*fileID = pb.fidParam.ioFileID;
174	}
175	return ( error );
176}
177
178/*****************************************************************************/
179
180pascal	OSErr	FSpCreateFileIDRef(const FSSpec *spec,
181								   long *fileID)
182{
183	return ( CreateFileIDRef(spec->vRefNum, spec->parID, spec->name, fileID) );
184}
185
186/*****************************************************************************/
187
188pascal	OSErr	DeleteFileIDRef(ConstStr255Param volName,
189								short vRefNum,
190								long fileID)
191{
192	HParamBlockRec pb;
193
194	pb.fidParam.ioNamePtr = (StringPtr)volName;
195	pb.fidParam.ioVRefNum = vRefNum;
196	pb.fidParam.ioFileID = fileID;
197	return ( PBDeleteFileIDRefSync(&pb) );
198}
199
200/*****************************************************************************/
201
202pascal	OSErr	FlushFile(short refNum)
203{
204	ParamBlockRec pb;
205
206	pb.ioParam.ioRefNum = refNum;
207	return ( PBFlushFileSync(&pb) );
208}
209
210/*****************************************************************************/
211
212pascal	OSErr	LockRange(short refNum,
213						  long rangeLength,
214						  long rangeStart)
215{
216	ParamBlockRec pb;
217
218	pb.ioParam.ioRefNum = refNum;
219	pb.ioParam.ioReqCount = rangeLength;
220	pb.ioParam.ioPosMode = fsFromStart;
221	pb.ioParam.ioPosOffset = rangeStart;
222	return ( PBLockRangeSync(&pb) );
223}
224
225/*****************************************************************************/
226
227pascal	OSErr	UnlockRange(short refNum,
228							long rangeLength,
229							long rangeStart)
230{
231	ParamBlockRec pb;
232
233	pb.ioParam.ioRefNum = refNum;
234	pb.ioParam.ioReqCount = rangeLength;
235	pb.ioParam.ioPosMode = fsFromStart;
236	pb.ioParam.ioPosOffset = rangeStart;
237	return ( PBUnlockRangeSync(&pb) );
238}
239
240/*****************************************************************************/
241
242pascal	OSErr	GetForeignPrivs(short vRefNum,
243								long dirID,
244								ConstStr255Param name,
245								void *foreignPrivBuffer,
246								long *foreignPrivSize,
247								long *foreignPrivInfo1,
248								long *foreignPrivInfo2,
249								long *foreignPrivInfo3,
250								long *foreignPrivInfo4)
251{
252	HParamBlockRec pb;
253	OSErr error;
254
255	pb.foreignPrivParam.ioNamePtr = (StringPtr)name;
256	pb.foreignPrivParam.ioVRefNum = vRefNum;
257	pb.foreignPrivParam.ioForeignPrivDirID = dirID;
258	pb.foreignPrivParam.ioForeignPrivBuffer = (Ptr)foreignPrivBuffer;
259	pb.foreignPrivParam.ioForeignPrivReqCount = *foreignPrivSize;
260	error = PBGetForeignPrivsSync(&pb);
261	*foreignPrivSize = pb.foreignPrivParam.ioForeignPrivActCount;
262	*foreignPrivInfo1 = pb.foreignPrivParam.ioForeignPrivInfo1;
263	*foreignPrivInfo2 = pb.foreignPrivParam.ioForeignPrivInfo2;
264	*foreignPrivInfo3 = pb.foreignPrivParam.ioForeignPrivInfo3;
265	*foreignPrivInfo4 = pb.foreignPrivParam.ioForeignPrivInfo4;
266	return ( error );
267}
268
269/*****************************************************************************/
270
271pascal	OSErr	FSpGetForeignPrivs(const FSSpec *spec,
272								   void *foreignPrivBuffer,
273								   long *foreignPrivSize,
274								   long *foreignPrivInfo1,
275								   long *foreignPrivInfo2,
276								   long *foreignPrivInfo3,
277								   long *foreignPrivInfo4)
278{
279	return ( GetForeignPrivs(spec->vRefNum, spec->parID, spec->name,
280							 foreignPrivBuffer, foreignPrivSize,
281							 foreignPrivInfo1, foreignPrivInfo2,
282							 foreignPrivInfo3, foreignPrivInfo4) );
283}
284
285/*****************************************************************************/
286
287pascal	OSErr	SetForeignPrivs(short vRefNum,
288								long dirID,
289								ConstStr255Param name,
290								const void *foreignPrivBuffer,
291								long *foreignPrivSize,
292								long foreignPrivInfo1,
293								long foreignPrivInfo2,
294								long foreignPrivInfo3,
295								long foreignPrivInfo4)
296{
297	HParamBlockRec pb;
298	OSErr error;
299
300	pb.foreignPrivParam.ioNamePtr = (StringPtr)name;
301	pb.foreignPrivParam.ioVRefNum = vRefNum;
302	pb.foreignPrivParam.ioForeignPrivDirID = dirID;
303	pb.foreignPrivParam.ioForeignPrivBuffer = (Ptr)foreignPrivBuffer;
304	pb.foreignPrivParam.ioForeignPrivReqCount = *foreignPrivSize;
305	pb.foreignPrivParam.ioForeignPrivInfo1 = foreignPrivInfo1;
306	pb.foreignPrivParam.ioForeignPrivInfo2 = foreignPrivInfo2;
307	pb.foreignPrivParam.ioForeignPrivInfo3 = foreignPrivInfo3;
308	pb.foreignPrivParam.ioForeignPrivInfo4 = foreignPrivInfo4;
309	error = PBSetForeignPrivsSync(&pb);
310	if ( error == noErr )
311	{
312		*foreignPrivSize = pb.foreignPrivParam.ioForeignPrivActCount;
313	}
314	return ( error );
315}
316
317/*****************************************************************************/
318
319pascal	OSErr	FSpSetForeignPrivs(const FSSpec *spec,
320								   const void *foreignPrivBuffer,
321								   long *foreignPrivSize,
322								   long foreignPrivInfo1,
323								   long foreignPrivInfo2,
324								   long foreignPrivInfo3,
325								   long foreignPrivInfo4)
326{
327	return ( SetForeignPrivs(spec->vRefNum, spec->parID, spec->name,
328							 foreignPrivBuffer, foreignPrivSize,
329							 foreignPrivInfo1, foreignPrivInfo2,
330							 foreignPrivInfo3, foreignPrivInfo4) );
331}
332
333/*****************************************************************************/
334
335pascal	OSErr	HGetLogInInfo(ConstStr255Param volName,
336							  short vRefNum,
337							  short *loginMethod,
338							  StringPtr userName)
339{
340	HParamBlockRec pb;
341	OSErr error;
342
343	pb.objParam.ioNamePtr = (StringPtr)volName;
344	pb.objParam.ioVRefNum = vRefNum;
345	pb.objParam.ioObjNamePtr = userName;
346	error = PBHGetLogInInfoSync(&pb);
347	if ( error == noErr )
348	{
349		*loginMethod = pb.objParam.ioObjType;
350	}
351	return ( error );
352}
353
354/*****************************************************************************/
355
356pascal	OSErr	HGetDirAccess(short vRefNum,
357							  long dirID,
358							  ConstStr255Param name,
359							  long *ownerID,
360							  long *groupID,
361							  long *accessRights)
362{
363	HParamBlockRec pb;
364	OSErr error;
365
366	pb.accessParam.ioNamePtr = (StringPtr)name;
367	pb.accessParam.ioVRefNum = vRefNum;
368	pb.fileParam.ioDirID = dirID;
369	error = PBHGetDirAccessSync(&pb);
370	if ( error == noErr )
371	{
372		*ownerID = pb.accessParam.ioACOwnerID;
373		*groupID = pb.accessParam.ioACGroupID;
374		*accessRights = pb.accessParam.ioACAccess;
375	}
376	return ( error );
377}
378
379/*****************************************************************************/
380
381pascal	OSErr	FSpGetDirAccess(const FSSpec *spec,
382								long *ownerID,
383								long *groupID,
384								long *accessRights)
385{
386	return ( HGetDirAccess(spec->vRefNum, spec->parID, spec->name,
387						   ownerID, groupID, accessRights) );
388}
389
390/*****************************************************************************/
391
392pascal	OSErr	HSetDirAccess(short vRefNum,
393							  long dirID,
394							  ConstStr255Param name,
395							  long ownerID,
396							  long groupID,
397							  long accessRights)
398{
399	HParamBlockRec pb;
400
401	pb.accessParam.ioNamePtr = (StringPtr)name;
402	pb.accessParam.ioVRefNum = vRefNum;
403	pb.fileParam.ioDirID = dirID;
404	pb.accessParam.ioACOwnerID = ownerID;
405	pb.accessParam.ioACGroupID = groupID;
406	pb.accessParam.ioACAccess = accessRights;
407	return ( PBHSetDirAccessSync(&pb) );
408}
409
410/*****************************************************************************/
411
412pascal	OSErr	FSpSetDirAccess(const FSSpec *spec,
413								long ownerID,
414								long groupID,
415								long accessRights)
416{
417	return ( HSetDirAccess(spec->vRefNum, spec->parID, spec->name,
418						   ownerID, groupID, accessRights) );
419}
420
421/*****************************************************************************/
422
423pascal	OSErr	HMapID(ConstStr255Param volName,
424					   short vRefNum,
425					   long ugID,
426					   short objType,
427					   StringPtr name)
428{
429	HParamBlockRec pb;
430
431	pb.objParam.ioNamePtr = (StringPtr)volName;
432	pb.objParam.ioVRefNum = vRefNum;
433	pb.objParam.ioObjType = objType;
434	pb.objParam.ioObjNamePtr = name;
435	pb.objParam.ioObjID = ugID;
436	return ( PBHMapIDSync(&pb) );
437}
438
439/*****************************************************************************/
440
441pascal	OSErr	HMapName(ConstStr255Param volName,
442						 short vRefNum,
443						 ConstStr255Param name,
444						 short objType,
445						 long *ugID)
446{
447	HParamBlockRec pb;
448	OSErr error;
449
450	pb.objParam.ioNamePtr = (StringPtr)volName;
451	pb.objParam.ioVRefNum = vRefNum;
452	pb.objParam.ioObjType = objType;
453	pb.objParam.ioObjNamePtr = (StringPtr)name;
454	error = PBHMapNameSync(&pb);
455	if ( error == noErr )
456	{
457		*ugID = pb.objParam.ioObjID;
458	}
459	return ( error );
460}
461
462/*****************************************************************************/
463
464pascal	OSErr	HCopyFile(short srcVRefNum,
465						  long srcDirID,
466						  ConstStr255Param srcName,
467						  short dstVRefNum,
468						  long dstDirID,
469						  ConstStr255Param dstPathname,
470						  ConstStr255Param copyName)
471{
472	HParamBlockRec pb;
473
474	pb.copyParam.ioVRefNum = srcVRefNum;
475	pb.copyParam.ioDirID = srcDirID;
476	pb.copyParam.ioNamePtr = (StringPtr)srcName;
477	pb.copyParam.ioDstVRefNum = dstVRefNum;
478	pb.copyParam.ioNewDirID = dstDirID;
479	pb.copyParam.ioNewName = (StringPtr)dstPathname;
480	pb.copyParam.ioCopyName = (StringPtr)copyName;
481	return ( PBHCopyFileSync(&pb) );
482}
483
484/*****************************************************************************/
485
486pascal	OSErr	FSpCopyFile(const FSSpec *srcSpec,
487							const FSSpec *dstSpec,
488							ConstStr255Param copyName)
489{
490	return ( HCopyFile(srcSpec->vRefNum, srcSpec->parID, srcSpec->name,
491					   dstSpec->vRefNum, dstSpec->parID,
492					   dstSpec->name, copyName) );
493}
494
495/*****************************************************************************/
496
497pascal	OSErr	HMoveRename(short vRefNum,
498							long srcDirID,
499							ConstStr255Param srcName,
500							long dstDirID,
501							ConstStr255Param dstpathName,
502							ConstStr255Param copyName)
503{
504	HParamBlockRec pb;
505
506	pb.copyParam.ioVRefNum = vRefNum;
507	pb.copyParam.ioDirID = srcDirID;
508	pb.copyParam.ioNamePtr = (StringPtr)srcName;
509	pb.copyParam.ioNewDirID = dstDirID;
510	pb.copyParam.ioNewName = (StringPtr)dstpathName;
511	pb.copyParam.ioCopyName = (StringPtr)copyName;
512	return ( PBHMoveRenameSync(&pb) );
513}
514
515/*****************************************************************************/
516
517pascal	OSErr	FSpMoveRename(const FSSpec *srcSpec,
518							  const FSSpec *dstSpec,
519							  ConstStr255Param copyName)
520{
521	OSErr	error;
522
523	/* make sure the FSSpecs refer to the same volume */
524	if ( srcSpec->vRefNum != dstSpec->vRefNum )
525	{
526		error = diffVolErr;
527	}
528	else
529	{
530		error = HMoveRename(srcSpec->vRefNum, srcSpec->parID, srcSpec->name,
531							dstSpec->parID, dstSpec->name, copyName);
532	}
533	return ( error );
534}
535
536/*****************************************************************************/
537
538pascal	OSErr	GetVolMountInfoSize(ConstStr255Param volName,
539									short vRefNum,
540									short *size)
541{
542	ParamBlockRec pb;
543
544	pb.ioParam.ioNamePtr = (StringPtr)volName;
545	pb.ioParam.ioVRefNum = vRefNum;
546	pb.ioParam.ioBuffer = (Ptr)size;
547	return ( PBGetVolMountInfoSize(&pb) );
548}
549
550/*****************************************************************************/
551
552pascal	OSErr	GetVolMountInfo(ConstStr255Param volName,
553								short vRefNum,
554								void *volMountInfo)
555{
556	ParamBlockRec pb;
557
558	pb.ioParam.ioNamePtr = (StringPtr)volName;
559	pb.ioParam.ioVRefNum = vRefNum;
560	pb.ioParam.ioBuffer = (Ptr)volMountInfo;
561	return ( PBGetVolMountInfo(&pb) );
562}
563
564/*****************************************************************************/
565
566pascal	OSErr	VolumeMount(const void *volMountInfo,
567							short *vRefNum)
568{
569	ParamBlockRec pb;
570	OSErr error;
571
572	pb.ioParam.ioBuffer = (Ptr)volMountInfo;
573	error = PBVolumeMount(&pb);
574	if ( error == noErr )
575	{
576		*vRefNum = pb.ioParam.ioVRefNum;
577	}
578	return ( error );
579}
580
581/*****************************************************************************/
582
583pascal	OSErr	Share(short vRefNum,
584					  long dirID,
585					  ConstStr255Param name)
586{
587	HParamBlockRec pb;
588
589	pb.fileParam.ioNamePtr = (StringPtr)name;
590	pb.fileParam.ioVRefNum = vRefNum;
591	pb.fileParam.ioDirID = dirID;
592	return ( PBShareSync(&pb) );
593}
594
595/*****************************************************************************/
596
597pascal	OSErr	FSpShare(const FSSpec *spec)
598{
599	return ( Share(spec->vRefNum, spec->parID, spec->name) );
600}
601
602/*****************************************************************************/
603
604pascal	OSErr	Unshare(short vRefNum,
605						long dirID,
606						ConstStr255Param name)
607{
608	HParamBlockRec pb;
609
610	pb.fileParam.ioNamePtr = (StringPtr)name;
611	pb.fileParam.ioVRefNum = vRefNum;
612	pb.fileParam.ioDirID = dirID;
613	return ( PBUnshareSync(&pb) );
614}
615
616/*****************************************************************************/
617
618pascal	OSErr	FSpUnshare(const FSSpec *spec)
619{
620	return ( Unshare(spec->vRefNum, spec->parID, spec->name) );
621}
622
623/*****************************************************************************/
624
625pascal	OSErr	GetUGEntry(short objType,
626						   StringPtr objName,
627						   long *objID)
628{
629	HParamBlockRec pb;
630	OSErr error;
631
632	pb.objParam.ioObjType = objType;
633	pb.objParam.ioObjNamePtr = objName;
634	pb.objParam.ioObjID = *objID;
635	error = PBGetUGEntrySync(&pb);
636	if ( error == noErr )
637	{
638		*objID = pb.objParam.ioObjID;
639	}
640	return ( error );
641}
642
643/*****************************************************************************/
644