Upgrading pwd
Change-Id: I3bab8335ac58f2d0af20c5cee4b772b1175c2ede
This commit is contained in:
parent
5debab0eb0
commit
06f3970b9e
10 changed files with 260 additions and 82 deletions
|
@ -2,6 +2,6 @@
|
||||||
# @(#)Makefile 8.1 (Berkeley) 5/31/93
|
# @(#)Makefile 8.1 (Berkeley) 5/31/93
|
||||||
|
|
||||||
SUBDIR= cat date echo ed expr \
|
SUBDIR= cat date echo ed expr \
|
||||||
mkdir pax rm rmdir test
|
mkdir pax pwd rm rmdir test
|
||||||
|
|
||||||
.include <bsd.subdir.mk>
|
.include <bsd.subdir.mk>
|
||||||
|
|
6
bin/pwd/Makefile
Normal file
6
bin/pwd/Makefile
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# $NetBSD: Makefile,v 1.8 1997/07/20 22:37:41 christos Exp $
|
||||||
|
# @(#)Makefile 8.1 (Berkeley) 5/31/93
|
||||||
|
|
||||||
|
PROG= pwd
|
||||||
|
|
||||||
|
.include <bsd.prog.mk>
|
107
bin/pwd/pwd.1
Normal file
107
bin/pwd/pwd.1
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
.\" $NetBSD: pwd.1,v 1.24 2003/10/30 14:58:23 wiz Exp $
|
||||||
|
.\"
|
||||||
|
.\" Copyright (c) 1990, 1993
|
||||||
|
.\" The Regents of the University of California. All rights reserved.
|
||||||
|
.\"
|
||||||
|
.\" This code is derived from software contributed to Berkeley by
|
||||||
|
.\" the Institute of Electrical and Electronics Engineers, Inc.
|
||||||
|
.\"
|
||||||
|
.\" Redistribution and use in source and binary forms, with or without
|
||||||
|
.\" modification, are permitted provided that the following conditions
|
||||||
|
.\" are met:
|
||||||
|
.\" 1. Redistributions of source code must retain the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer.
|
||||||
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer in the
|
||||||
|
.\" documentation and/or other materials provided with the distribution.
|
||||||
|
.\" 3. Neither the name of the University nor the names of its contributors
|
||||||
|
.\" may be used to endorse or promote products derived from this software
|
||||||
|
.\" without specific prior written permission.
|
||||||
|
.\"
|
||||||
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
.\" SUCH DAMAGE.
|
||||||
|
.\"
|
||||||
|
.\" @(#)pwd.1 8.2 (Berkeley) 4/28/95
|
||||||
|
.\"
|
||||||
|
.Dd October 30, 2003
|
||||||
|
.Dt PWD 1
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm pwd
|
||||||
|
.Nd return working directory name
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.Nm
|
||||||
|
.Op Fl LP
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
.Nm
|
||||||
|
writes the absolute pathname of the current working directory to
|
||||||
|
the standard output.
|
||||||
|
.Pp
|
||||||
|
The following options are available:
|
||||||
|
.Bl -tag -width indent
|
||||||
|
.It Fl L
|
||||||
|
If the
|
||||||
|
.Ev PWD
|
||||||
|
environment variable is an absolute pathname that contains
|
||||||
|
neither "/./" nor "/../" and references the current directory, then
|
||||||
|
.Ev PWD
|
||||||
|
is assumed to be the name of the current directory.
|
||||||
|
.It Fl P
|
||||||
|
Print the physical path to the current working directory, with symbolic
|
||||||
|
links in the path resolved.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
The default for the
|
||||||
|
.Nm
|
||||||
|
command is
|
||||||
|
.Fl P .
|
||||||
|
.Pp
|
||||||
|
.Nm
|
||||||
|
is usually provided as a shell builtin (which may have a different
|
||||||
|
default).
|
||||||
|
.Sh EXIT STATUS
|
||||||
|
The
|
||||||
|
.Nm
|
||||||
|
utility exits 0 on success, and \*[Gt]0 if an error occurs.
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr cd 1 ,
|
||||||
|
.Xr csh 1 ,
|
||||||
|
.Xr ksh 1 ,
|
||||||
|
.Xr sh 1 ,
|
||||||
|
.Xr getcwd 3
|
||||||
|
.Sh STANDARDS
|
||||||
|
The
|
||||||
|
.Nm
|
||||||
|
utility is expected to be conforming to
|
||||||
|
.St -p1003.1 ,
|
||||||
|
except that the default is
|
||||||
|
.Fl P
|
||||||
|
not
|
||||||
|
.Fl L .
|
||||||
|
.Sh BUGS
|
||||||
|
In
|
||||||
|
.Xr csh 1
|
||||||
|
the command
|
||||||
|
.Ic dirs
|
||||||
|
is always faster (although it can give a different answer in the rare case
|
||||||
|
that the current directory or a containing directory was moved after
|
||||||
|
the shell descended into it).
|
||||||
|
.Pp
|
||||||
|
.Nm
|
||||||
|
.Fl L
|
||||||
|
relies on the file system having unique inode numbers.
|
||||||
|
If this is not true (e.g., on FAT file systems) then
|
||||||
|
.Nm
|
||||||
|
.Fl L
|
||||||
|
may fail to detect that
|
||||||
|
.Ev PWD
|
||||||
|
is incorrect.
|
143
bin/pwd/pwd.c
Normal file
143
bin/pwd/pwd.c
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
/* $NetBSD: pwd.c,v 1.22 2011/08/29 14:51:19 joerg Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1991, 1993, 1994
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#ifndef lint
|
||||||
|
__COPYRIGHT("@(#) Copyright (c) 1991, 1993, 1994\
|
||||||
|
The Regents of the University of California. All rights reserved.");
|
||||||
|
#endif /* not lint */
|
||||||
|
|
||||||
|
#ifndef lint
|
||||||
|
#if 0
|
||||||
|
static char sccsid[] = "@(#)pwd.c 8.3 (Berkeley) 4/1/94";
|
||||||
|
#else
|
||||||
|
__RCSID("$NetBSD: pwd.c,v 1.22 2011/08/29 14:51:19 joerg Exp $");
|
||||||
|
#endif
|
||||||
|
#endif /* not lint */
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include <err.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <locale.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
static char *getcwd_logical(void);
|
||||||
|
__dead static void usage(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note that EEE Std 1003.1, 2003 requires that the default be -L.
|
||||||
|
* This is inconsistent with the historic behaviour of everything
|
||||||
|
* except the ksh builtin.
|
||||||
|
* To avoid breaking scripts the default has been kept as -P.
|
||||||
|
* (Some scripts run /bin/pwd in order to get 'pwd -P'.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int ch, lFlag;
|
||||||
|
const char *p;
|
||||||
|
|
||||||
|
setprogname(argv[0]);
|
||||||
|
(void)setlocale(LC_ALL, "");
|
||||||
|
|
||||||
|
lFlag = 0;
|
||||||
|
while ((ch = getopt(argc, argv, "LP")) != -1) {
|
||||||
|
switch (ch) {
|
||||||
|
case 'L':
|
||||||
|
lFlag = 1;
|
||||||
|
break;
|
||||||
|
case 'P':
|
||||||
|
lFlag = 0;
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
|
if (argc != 0)
|
||||||
|
usage();
|
||||||
|
|
||||||
|
if (lFlag)
|
||||||
|
p = getcwd_logical();
|
||||||
|
else
|
||||||
|
p = NULL;
|
||||||
|
if (p == NULL)
|
||||||
|
p = getcwd(NULL, 0);
|
||||||
|
|
||||||
|
if (p == NULL)
|
||||||
|
err(EXIT_FAILURE, NULL);
|
||||||
|
|
||||||
|
(void)printf("%s\n", p);
|
||||||
|
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
/* NOTREACHED */
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
getcwd_logical(void)
|
||||||
|
{
|
||||||
|
char *pwd;
|
||||||
|
struct stat s_pwd, s_dot;
|
||||||
|
|
||||||
|
/* Check $PWD -- if it's right, it's fast. */
|
||||||
|
pwd = getenv("PWD");
|
||||||
|
if (pwd == NULL)
|
||||||
|
return NULL;
|
||||||
|
if (pwd[0] != '/')
|
||||||
|
return NULL;
|
||||||
|
if (strstr(pwd, "/./") != NULL)
|
||||||
|
return NULL;
|
||||||
|
if (strstr(pwd, "/../") != NULL)
|
||||||
|
return NULL;
|
||||||
|
if (stat(pwd, &s_pwd) == -1 || stat(".", &s_dot) == -1)
|
||||||
|
return NULL;
|
||||||
|
if (s_pwd.st_dev != s_dot.st_dev || s_pwd.st_ino != s_dot.st_ino)
|
||||||
|
return NULL;
|
||||||
|
return pwd;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
(void)fprintf(stderr, "usage: %s [-LP]\n", getprogname());
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
/* NOTREACHED */
|
||||||
|
}
|
|
@ -19,7 +19,7 @@ SUBDIR= add_route arp ash at backup banner basename btrace cal \
|
||||||
mount mt netconf nice acknm nohup \
|
mount mt netconf nice acknm nohup \
|
||||||
nonamed od paste patch \
|
nonamed od paste patch \
|
||||||
ping postinstall poweroff pr prep printroot \
|
ping postinstall poweroff pr prep printroot \
|
||||||
profile progressbar pr_routes ps pwd pwdauth \
|
profile progressbar pr_routes ps pwdauth \
|
||||||
ramdisk rarpd rawspeed rcp rdate readclock \
|
ramdisk rarpd rawspeed rcp rdate readclock \
|
||||||
reboot remsync rev rget rlogin \
|
reboot remsync rev rget rlogin \
|
||||||
rotate rsh rshd service setup shar acksize \
|
rotate rsh rshd service setup shar acksize \
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
PROG= pwd
|
|
||||||
BINDIR= /bin
|
|
||||||
MAN=
|
|
||||||
|
|
||||||
.include <bsd.prog.mk>
|
|
|
@ -1,49 +0,0 @@
|
||||||
/* pwd - print working directory Author: Norbert Schlenker */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* pwd - print working directory
|
|
||||||
* Syntax: pwd
|
|
||||||
* Flags: None.
|
|
||||||
* Author: Norbert Schlenker
|
|
||||||
* Copyright: None. Released to the public domain.
|
|
||||||
* Reference: IEEE P1003.2 Section 4.50 (draft 10)
|
|
||||||
* Bugs: No internationalization support; all messages are in English.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Force visible Posix names */
|
|
||||||
#ifndef _POSIX_SOURCE
|
|
||||||
#define _POSIX_SOURCE 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* External interfaces */
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
/* Magic numbers suggested or required by Posix specification */
|
|
||||||
#define SUCCESS 0 /* exit code in case of success */
|
|
||||||
#define FAILURE 1 /* or failure */
|
|
||||||
|
|
||||||
int main(void);
|
|
||||||
|
|
||||||
static char dir[PATH_MAX + 1];
|
|
||||||
static char *errmsg = "pwd: cannot search some directory on the path\n";
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
char *p;
|
|
||||||
size_t n;
|
|
||||||
|
|
||||||
p = getcwd(dir, PATH_MAX);
|
|
||||||
if (p == NULL) {
|
|
||||||
write(STDERR_FILENO, errmsg, strlen(errmsg));
|
|
||||||
exit(FAILURE);
|
|
||||||
}
|
|
||||||
n = strlen(p);
|
|
||||||
p[n] = '\n';
|
|
||||||
if (write(STDOUT_FILENO, p, n + 1) != n + 1) exit(FAILURE);
|
|
||||||
return(SUCCESS);
|
|
||||||
}
|
|
|
@ -13,7 +13,7 @@ MAN= ash.1 at.1 banner.1 basename.1 \
|
||||||
mesg.1 mixer.1 mkfs.mfs.1 \
|
mesg.1 mixer.1 mkfs.mfs.1 \
|
||||||
mkproto.1 mount.1 mt.1 nice.1 nm.1 nohup.1 od.1 \
|
mkproto.1 mount.1 mt.1 nice.1 nm.1 nohup.1 od.1 \
|
||||||
paste.1 ping.1 playwave.1 pr.1 prep.1 \
|
paste.1 ping.1 playwave.1 pr.1 prep.1 \
|
||||||
profile.1 ps.1 pwd.1 rcp.1 recwave.1 \
|
profile.1 ps.1 rcp.1 recwave.1 \
|
||||||
remsync.1 rget.1 rlogin.1 rsh.1 rz.1 \
|
remsync.1 rget.1 rlogin.1 rsh.1 rz.1 \
|
||||||
shar.1 acksize.1 sleep.1 spell.1 \
|
shar.1 acksize.1 sleep.1 spell.1 \
|
||||||
split.1 stty.1 svc.1 svrctl.1 \
|
split.1 stty.1 svc.1 svrctl.1 \
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
.TH PWD 1
|
|
||||||
.SH NAME
|
|
||||||
pwd \- print working directory
|
|
||||||
.SH SYNOPSIS
|
|
||||||
\fBpwd\fR
|
|
||||||
.br
|
|
||||||
.de FL
|
|
||||||
.TP
|
|
||||||
\\fB\\$1\\fR
|
|
||||||
\\$2
|
|
||||||
..
|
|
||||||
.de EX
|
|
||||||
.TP 20
|
|
||||||
\\fB\\$1\\fR
|
|
||||||
# \\$2
|
|
||||||
..
|
|
||||||
.SH EXAMPLES
|
|
||||||
.TP 20
|
|
||||||
.B pwd
|
|
||||||
# Print the name of the working directory
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.PP
|
|
||||||
The full path name of the current working directory is printed.
|
|
||||||
.SH "SEE ALSO"
|
|
||||||
.BR getcwd (3).
|
|
|
@ -15,6 +15,7 @@
|
||||||
2012/10/17 12:00:00,bin/Makefile.inc
|
2012/10/17 12:00:00,bin/Makefile.inc
|
||||||
2008/07/20 00:52:40,bin/mkdir
|
2008/07/20 00:52:40,bin/mkdir
|
||||||
2012/10/17 12:00:00,bin/pax
|
2012/10/17 12:00:00,bin/pax
|
||||||
|
2012/10/17 12:00:00,bin/pwd
|
||||||
2011/08/29 14:48:46,bin/rm
|
2011/08/29 14:48:46,bin/rm
|
||||||
2011/08/29 14:49:38,bin/rmdir
|
2011/08/29 14:49:38,bin/rmdir
|
||||||
2012/10/17 12:00:00,bin/test
|
2012/10/17 12:00:00,bin/test
|
||||||
|
|
Loading…
Reference in a new issue