2 Copyright © 1995-2001, The AROS Development Team. All rights reserved.
5 Desc: Create a non-binding (path) assign.
8 #include <exec/memory.h>
9 #include <proto/exec.h>
11 #include <dos/dosextens.h>
12 #include "dos_intern.h"
14 /*****************************************************************************
17 #include <proto/dos.h>
19 AROS_LH2(BOOL
, AssignPath
,
22 AROS_LHA(CONST_STRPTR
, name
, D1
),
23 AROS_LHA(CONST_STRPTR
, path
, D2
),
26 struct DosLibrary
*, DOSBase
, 104, Dos
)
29 Create an assign for the given name, which will be resolved upon
30 each reference to it. There will be no permanent lock kept on the
31 specified path. This way you can create assigns to unmounted volumes
32 which will only be requested when accessed. Also, using AssignPath()
33 to assign C: to df0:c would make references go to to df0:c even if
37 name -- NULL terminated name of the assign.
38 path -- NULL terminated path to be resolved on each reference.
41 != 0 in case of success, 0 on failure. IoErr() gives additional
42 information in that case.
51 AssignAdd(), AssignLock(), AssignLate(), Open()
55 *****************************************************************************/
58 AROS_LIBBASE_EXT_DECL(struct DosLibrary
*,DOSBase
)
61 struct DosList
*dl
, *newdl
;
63 BOOL result
= DOSTRUE
;
67 newdl
= MakeDosEntry(name
, DLT_NONBINDING
);
77 namelen
= s2
- path
+ 1;
78 pathcopy
= AllocVec(namelen
, MEMF_PUBLIC
| MEMF_CLEAR
);
83 SetIoErr(ERROR_NO_FREE_STORE
);
88 CopyMem(path
, pathcopy
, namelen
);
89 newdl
->dol_misc
.dol_assign
.dol_AssignName
= pathcopy
;
91 dl
= LockDosList(LDF_ALL
| LDF_WRITE
);
92 dl
= FindDosEntry(dl
, name
, LDF_ALL
);
98 else if(dl
->dol_Type
== DLT_VOLUME
|| dl
->dol_Type
== DLT_DEVICE
)
101 FreeVec(newdl
->dol_misc
.dol_assign
.dol_AssignName
);
103 SetIoErr(ERROR_OBJECT_EXISTS
);
115 UnLock(dl
->dol_Lock
);
117 if(dl
->dol_misc
.dol_assign
.dol_List
!= NULL
)
119 struct AssignList
*al
, *oal
;
121 for(al
= dl
->dol_misc
.dol_assign
.dol_List
; al
; )
130 FreeVec(dl
->dol_misc
.dol_assign
.dol_AssignName
);
134 UnLockDosList(LDF_ALL
| LDF_WRITE
);