]> Zhao Yanbai Git Server - minix.git/commitdiff
Upgrading pwd 78/278/2
authorLionel Sambuc <lionel@minix3.org>
Wed, 30 Jan 2013 17:57:00 +0000 (18:57 +0100)
committerLionel Sambuc <lionel@minix3.org>
Fri, 1 Feb 2013 10:41:48 +0000 (11:41 +0100)
Change-Id: I3bab8335ac58f2d0af20c5cee4b772b1175c2ede

bin/Makefile
bin/pwd/Makefile [new file with mode: 0644]
bin/pwd/pwd.1 [new file with mode: 0644]
bin/pwd/pwd.c [new file with mode: 0644]
commands/Makefile
commands/pwd/Makefile [deleted file]
commands/pwd/pwd.c [deleted file]
man/man1/Makefile
man/man1/pwd.1 [deleted file]
releasetools/nbsd_ports

index 471e2039c1da010758efb7f05a27a7db08b16d74..e62fd47fef4aa8ddf64c11a9132da6e93d7b3f71 100644 (file)
@@ -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>
diff --git a/bin/pwd/Makefile b/bin/pwd/Makefile
new file mode 100644 (file)
index 0000000..9b1b2b2
--- /dev/null
@@ -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>
diff --git a/bin/pwd/pwd.1 b/bin/pwd/pwd.1
new file mode 100644 (file)
index 0000000..45230f0
--- /dev/null
@@ -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.
diff --git a/bin/pwd/pwd.c b/bin/pwd/pwd.c
new file mode 100644 (file)
index 0000000..27888eb
--- /dev/null
@@ -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 */
+}
index d6e9dd83fb45c5809999564db5fcd623bf6648d6..53bd42dadc3430f12422134330abe8536fcfd977 100644 (file)
@@ -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 \
diff --git a/commands/pwd/Makefile b/commands/pwd/Makefile
deleted file mode 100644 (file)
index bcf0484..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-PROG=  pwd
-BINDIR=        /bin
-MAN=
-
-.include <bsd.prog.mk>
diff --git a/commands/pwd/pwd.c b/commands/pwd/pwd.c
deleted file mode 100644 (file)
index 21609f9..0000000
+++ /dev/null
@@ -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);
-}
index cbb2b675082cd69b3c84e95458cb377f9437c3f9..01cc5b227c6e82905412761ce22833eaea25d1ca 100644 (file)
@@ -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 \
diff --git a/man/man1/pwd.1 b/man/man1/pwd.1
deleted file mode 100644 (file)
index 92a6acf..0000000
+++ /dev/null
@@ -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).
index fd6a3c17d9f1db7959d366fce05f022fe06b35df..b22e92981fb3e49273deb64c79e19510c671adb1 100644 (file)
@@ -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