svn commit: r256971 - head/usr.sbin/pkg

Baptiste Daroussin bapt at FreeBSD.org
Wed Oct 23 14:23:48 UTC 2013


Author: bapt
Date: Wed Oct 23 14:23:48 2013
New Revision: 256971
URL: http://svnweb.freebsd.org/changeset/base/256971

Log:
  Allow to bootstrap by doing pkg add ./a/path/to/a/pkg_package.txz
  
  Requested by:	many
  MFC after:	3 days

Modified:
  head/usr.sbin/pkg/pkg.c

Modified: head/usr.sbin/pkg/pkg.c
==============================================================================
--- head/usr.sbin/pkg/pkg.c	Wed Oct 23 14:15:46 2013	(r256970)
+++ head/usr.sbin/pkg/pkg.c	Wed Oct 23 14:23:48 2013	(r256971)
@@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$");
 #include <archive_entry.h>
 #include <err.h>
 #include <errno.h>
+#include <fcntl.h>
 #include <fetch.h>
 #include <paths.h>
 #include <stdbool.h>
@@ -297,7 +298,9 @@ int
 main(__unused int argc, char *argv[])
 {
 	char pkgpath[MAXPATHLEN];
+	char pkgstatic[MAXPATHLEN];
 	bool yes = false;
+	int fd, ret;
 
 	snprintf(pkgpath, MAXPATHLEN, "%s/sbin/pkg",
 	    getenv("LOCALBASE") ? getenv("LOCALBASE") : _LOCALBASE);
@@ -311,6 +314,19 @@ main(__unused int argc, char *argv[])
 		if (argv[1] != NULL && strcmp(argv[1], "-N") == 0)
 			errx(EXIT_FAILURE, "pkg is not installed");
 
+		if (argc > 2 && strcmp(argv[1], "add") == 0 &&
+		    access(argv[2], R_OK) == 0) {
+			fd = open(argv[2], O_RDONLY);
+			if (fd == -1)
+				err(EXIT_FAILURE, "Unable to open %s", argv[2]);
+
+			if ((ret = extract_pkg_static(fd, pkgstatic, MAXPATHLEN)) == 0)
+				ret = install_pkg_static(pkgstatic, argv[2]);
+			close(fd);
+			if (ret != 0)
+				exit(EXIT_FAILURE);
+			exit(EXIT_SUCCESS);
+		}
 		/*
 		 * Do not ask for confirmation if either of stdin or stdout is
 		 * not tty. Check the environment to see if user has answer


More information about the svn-src-head mailing list