2 Copyright © 1995-2007, 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 *****************************************************************************/
60 struct DosList
*dl
, *newdl
;
62 BOOL result
= DOSTRUE
;
66 newdl
= MakeDosEntry(name
, DLT_NONBINDING
);
76 namelen
= s2
- path
+ 1;
77 pathcopy
= AllocVec(namelen
, MEMF_PUBLIC
| MEMF_CLEAR
);
82 SetIoErr(ERROR_NO_FREE_STORE
);
87 CopyMem(path
, pathcopy
, namelen
);
88 newdl
->dol_misc
.dol_assign
.dol_AssignName
= pathcopy
;
90 dl
= LockDosList(LDF_ALL
| LDF_WRITE
);
91 dl
= FindDosEntry(dl
, name
, LDF_ALL
);
97 else if(dl
->dol_Type
== DLT_VOLUME
|| dl
->dol_Type
== DLT_DEVICE
)
100 FreeVec(newdl
->dol_misc
.dol_assign
.dol_AssignName
);
102 SetIoErr(ERROR_OBJECT_EXISTS
);
114 UnLock(dl
->dol_Lock
);
116 if(dl
->dol_misc
.dol_assign
.dol_List
!= NULL
)
118 struct AssignList
*al
, *oal
;
120 for(al
= dl
->dol_misc
.dol_assign
.dol_List
; al
; )
129 FreeVec(dl
->dol_misc
.dol_assign
.dol_AssignName
);
133 UnLockDosList(LDF_ALL
| LDF_WRITE
);