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
|
||||
|
||||
SUBDIR= cat date echo ed expr \
|
||||
mkdir pax rm rmdir test
|
||||
mkdir pax pwd rm rmdir test
|
||||
|
||||
.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 \
|
||||
nonamed od paste patch \
|
||||
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 \
|
||||
reboot remsync rev rget rlogin \
|
||||
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 \
|
||||
mkproto.1 mount.1 mt.1 nice.1 nm.1 nohup.1 od.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 \
|
||||
shar.1 acksize.1 sleep.1 spell.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
|
||||
2008/07/20 00:52:40,bin/mkdir
|
||||
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:49:38,bin/rmdir
|
||||
2012/10/17 12:00:00,bin/test
|
||||
|
|
Loading…
Reference in a new issue