Detabbed
[AROS.git] / rom / dos / getprogramname.c
blob58a2151fecd27fce370c32e0f5741e2ab4462601
1 /*
2 Copyright © 1995-2007, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: Get the name of the current program.
6 Lang: english
7 */
8 #include <aros/debug.h>
10 #include <proto/exec.h>
11 #include <dos/dos.h>
12 #include "dos_intern.h"
13 #include <string.h>
15 /*****************************************************************************
17 NAME */
18 #include <proto/dos.h>
20 AROS_LH2(BOOL, GetProgramName,
22 /* SYNOPSIS */
23 AROS_LHA(STRPTR, buf, D1),
24 AROS_LHA(LONG , len, D2),
26 /* LOCATION */
27 struct DosLibrary *, DOSBase, 96, Dos)
29 /* FUNCTION
30 Copies the name of the current program from the CLI structure
31 into the buffer. If the buffer is too small the name is truncated,
32 and a failure is returned. If the current process doesn't have
33 a CLI structure, a 0 length string is put into the buffer and a
34 failure is returned.
36 INPUTS
37 buf - Buffer for the name.
38 len - Size of the buffer in bytes.
40 RESULT
41 !=0 on success, 0 on failure. IoErr() gives additional information
42 in that case.
44 NOTES
46 EXAMPLE
48 BUGS
50 SEE ALSO
51 SetProgramName()
53 INTERNALS
55 *****************************************************************************/
57 AROS_LIBFUNC_INIT
59 struct Process *me = (struct Process *)FindTask(NULL);
60 struct CommandLineInterface *cli;
61 STRPTR cname;
62 ULONG clen;
63 BOOL ret = DOSTRUE;
65 ASSERT_VALID_PROCESS(me);
67 cli = BADDR(me->pr_CLI);
68 if (cli == NULL)
70 *buf = '\0';
71 me->pr_Result2 = ERROR_OBJECT_WRONG_TYPE;
72 return DOSFALSE;
75 cname = AROS_BSTR_ADDR(cli->cli_CommandName);
76 clen = (ULONG)AROS_BSTR_strlen(cli->cli_CommandName);
77 if (clen >= (len-1))
79 clen = len-1;
80 me->pr_Result2 = ERROR_LINE_TOO_LONG;
81 ret = DOSFALSE;
83 CopyMem(cname, buf, clen);
84 buf[clen] = '\0';
86 return ret;
87 AROS_LIBFUNC_EXIT
88 } /* GetProgramName */