2 Copyright © 1995-2001, The AROS Development Team. All rights reserved.
5 Desc: Create an assign.
8 #include <exec/memory.h>
9 #include <proto/exec.h>
10 #include <dos/filesystem.h>
11 #include "dos_intern.h"
13 /*****************************************************************************
16 #include <proto/dos.h>
18 AROS_LH2(BOOL
, AssignLock
,
21 AROS_LHA(CONST_STRPTR
, name
, D1
),
22 AROS_LHA(BPTR
, lock
, D2
),
25 struct DosLibrary
*, DOSBase
, 102, Dos
)
28 Create an assign from a given name to a lock. Replaces any older
29 assignments from that name, 0 cancels the assign completely. Do not
30 use or free the lock after calling this function - it becomes
31 the assign and will be freed by the system if the assign is removed.
34 name -- NUL terminated name of the assign.
35 lock -- Lock to assigned directory.
38 != 0 success, 0 on failure. IoErr() gives additional information
39 in that case. The lock is not freed on failure.
51 *****************************************************************************/
54 AROS_LIBBASE_EXT_DECL(struct DosLibrary
*,DOSBase
)
56 BOOL success
= DOSTRUE
;
58 struct DosList
*dl
, *newdl
= NULL
;
59 struct FileHandle
*fh
= (struct FileHandle
*)BADDR(lock
);
63 newdl
= MakeDosEntry(name
, DLT_DIRECTORY
);
70 newdl
->dol_Unit
= fh
->fh_Unit
;
71 newdl
->dol_Device
= fh
->fh_Device
;
72 newdl
->dol_Lock
= lock
;
75 dl
= LockDosList(LDF_ALL
| LDF_WRITE
);
76 dl
= FindDosEntry(dl
, name
, LDF_ALL
);
82 else if (dl
->dol_Type
== DLT_DEVICE
|| dl
->dol_Type
== DLT_VOLUME
)
86 SetIoErr(ERROR_OBJECT_EXISTS
);
100 UnLock(dl
->dol_Lock
);
103 if (dl
->dol_misc
.dol_assign
.dol_List
!= NULL
)
105 struct AssignList
*al
, *oal
;
107 for (al
= dl
->dol_misc
.dol_assign
.dol_List
; al
; )
116 FreeVec(dl
->dol_misc
.dol_assign
.dol_AssignName
);
120 UnLockDosList(LDF_ALL
| LDF_WRITE
);