/*********************************************************************** * * * This software is part of the ast package * * Copyright (c) 1992-2011 AT&T Intellectual Property * * and is licensed under the * * Common Public License, Version 1.0 * * by AT&T Intellectual Property * * * * A copy of the License is available at * * http://www.opensource.org/licenses/cpl1.0.txt * * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * * * * Information and Software Systems Research * * AT&T Research * * Florham Park NJ * * * * Glenn Fowler * * David Korn * * * ***********************************************************************/ #pragma prototyped /* * David Korn * AT&T Research * * logname */ static const char usage[] = "[-?\n@(#)$Id: logname (AT&T Research) 1999-04-30 $\n]" USAGE_LICENSE "[+NAME?logname - return the user's login name]" "[+DESCRIPTION?\blogname\b writes the users's login name to standard " "output. The login name is the string that is returned by the " "\bgetlogin\b(2) function. If \bgetlogin\b(2) does not return " "successfully, the corresponding to the real user id of the calling " "process is used instead.]" "\n" "\n\n" "\n" "[+EXIT STATUS?]{" "[+0?Successful Completion.]" "[+>0?An error occurred.]" "}" "[+SEE ALSO?\bgetlogin\b(2)]" ; #include int b_logname(int argc, char** argv, void* context) { register char* logname; cmdinit(argc, argv, context, ERROR_CATALOG, 0); for (;;) { switch (optget(argv, usage)) { case ':': error(2, "%s", opt_info.arg); continue; case '?': error(ERROR_usage(2), "%s", opt_info.arg); continue; } break; } if (error_info.errors) error(ERROR_usage(2), "%s", optusage(NiL)); if (!(logname = getlogin())) logname = fmtuid(getuid()); sfputr(sfstdout, logname, '\n'); return 0; }