summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pkg_install
diff options
context:
space:
mode:
authorflz <flz@FreeBSD.org>2010-01-22 23:32:10 +0000
committerflz <flz@FreeBSD.org>2010-01-22 23:32:10 +0000
commit648854da4d73ee19e941de36522c00626473f2b5 (patch)
treec3b8090501ae2fde3a2a2e3cecede5db149f6297 /usr.sbin/pkg_install
parent6facf0f8e1566fe01a79dd3d15a500c5aab8cb25 (diff)
downloadFreeBSD-src-648854da4d73ee19e941de36522c00626473f2b5.zip
FreeBSD-src-648854da4d73ee19e941de36522c00626473f2b5.tar.gz
- Add support for UPDATING remote fetching.
- Reorganize EXAMPLES section in pkg_updating(1). - Style fixes. - Bump PKG_INSTALL_VERSION to 20100122. Submitted by: beat MFC after: 1 week
Diffstat (limited to 'usr.sbin/pkg_install')
-rw-r--r--usr.sbin/pkg_install/lib/lib.h2
-rw-r--r--usr.sbin/pkg_install/updating/main.c59
-rw-r--r--usr.sbin/pkg_install/updating/pkg_updating.127
3 files changed, 53 insertions, 35 deletions
diff --git a/usr.sbin/pkg_install/lib/lib.h b/usr.sbin/pkg_install/lib/lib.h
index a3d0413..4a6c625 100644
--- a/usr.sbin/pkg_install/lib/lib.h
+++ b/usr.sbin/pkg_install/lib/lib.h
@@ -105,7 +105,7 @@
* Version of the package tools - increase whenever you make a change
* in the code that is not cosmetic only.
*/
-#define PKG_INSTALL_VERSION 20090902
+#define PKG_INSTALL_VERSION 20100122
#define PKG_WRAPCONF_FNAME "/var/db/pkg_install.conf"
#define main(argc, argv) real_main(argc, argv)
diff --git a/usr.sbin/pkg_install/updating/main.c b/usr.sbin/pkg_install/updating/main.c
index e189c01..0ab2ec0 100644
--- a/usr.sbin/pkg_install/updating/main.c
+++ b/usr.sbin/pkg_install/updating/main.c
@@ -10,7 +10,11 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <stdio.h>
#include <errno.h>
+#include <fetch.h>
#include <limits.h>
#include <sysexits.h>
#include <getopt.h>
@@ -115,10 +119,10 @@ main(int argc, char *argv[])
if (argc != 0) {
pflag = 1;
while (*argv) {
- if((curr = (INSTALLEDPORT *)
+ if ((curr = (INSTALLEDPORT *)
malloc(sizeof(INSTALLEDPORT))) == NULL)
(void)exit(EXIT_FAILURE);
- strlcpy (curr->name, *argv, strlen(*argv) + 1);
+ strlcpy(curr->name, *argv, strlen(*argv) + 1);
curr->next = head;
head = curr;
(void)*argv++;
@@ -131,22 +135,22 @@ main(int argc, char *argv[])
*/
if (pflag == 0) {
/* Open /var/db/pkg and search for all installed ports. */
- if((dir = opendir(pkgdbpath)) != NULL) {
+ if ((dir = opendir(pkgdbpath)) != NULL) {
while ((pkgdbdir = readdir(dir)) != NULL) {
if (strcmp(pkgdbdir->d_name, ".") != 0 &&
- strcmp(pkgdbdir->d_name, "..") !=0) {
+ strcmp(pkgdbdir->d_name, "..") != 0) {
/* Create path to +CONTENTS file for each installed port */
n = strlcpy(tmp_file, pkgdbpath, strlen(pkgdbpath)+1);
n = strlcpy(tmp_file + n, "/", sizeof(tmp_file) - n);
n = strlcat(tmp_file + n, pkgdbdir->d_name,
sizeof(tmp_file) - n);
- if(stat(tmp_file, &attribute) == -1) {
+ if (stat(tmp_file, &attribute) == -1) {
fprintf(stderr, "can't open %s: %s\n",
tmp_file, strerror(errno));
return EXIT_FAILURE;
}
- if(attribute.st_mode & S_IFREG)
+ if (attribute.st_mode & S_IFREG)
continue;
(void)strlcat(tmp_file + n, "/",
sizeof(tmp_file) - n);
@@ -155,7 +159,7 @@ main(int argc, char *argv[])
/* Open +CONTENT file */
fd = fopen(tmp_file, "r");
- if(fd == NULL) {
+ if (fd == NULL) {
fprintf(stderr, "warning: can't open %s: %s\n",
tmp_file, strerror(errno));
continue;
@@ -165,14 +169,14 @@ main(int argc, char *argv[])
* Parses +CONTENT for ORIGIN line and
* put element into linked list.
*/
- while(fgets(originline, maxcharperline, fd) != NULL) {
+ while (fgets(originline, maxcharperline, fd) != NULL) {
tmpline1 = strstr(originline, origin);
- if( tmpline1 != NULL ) {
+ if (tmpline1 != NULL) {
/* Tmp variable to store port name. */
char *pname;
pname = strrchr(originline, (int)':');
pname++;
- if((curr = (INSTALLEDPORT *)
+ if ((curr = (INSTALLEDPORT *)
malloc(sizeof(INSTALLEDPORT))) == NULL)
(void)exit(EXIT_FAILURE);
if (pname[strlen(pname) - 1] == '\n')
@@ -183,7 +187,7 @@ main(int argc, char *argv[])
}
}
- if(ferror(fd)) {
+ if (ferror(fd)) {
fprintf(stderr, "error reading input\n");
exit(EX_IOERR);
}
@@ -195,32 +199,41 @@ main(int argc, char *argv[])
}
}
- /* Open UPDATING file */
- fd = fopen(updatingfile, "r");
- if(fd == NULL) {
+ /* Fetch UPDATING file if needed and open file */
+ if (isURL(updatingfile)) {
+ if ((fd = fetchGetURL(updatingfile, "")) == NULL) {
+ fprintf(stderr, "Error: Unable to get %s: %s\n",
+ updatingfile, fetchLastErrString);
+ exit(EX_UNAVAILABLE);
+ }
+ }
+ else {
+ fd = fopen(updatingfile, "r");
+ }
+ if (fd == NULL) {
fprintf(stderr, "can't open %s: %s\n",
- updatingfile, strerror(errno));
+ updatingfile, strerror(errno));
exit(EX_UNAVAILABLE);
}
/* Parse opened UPDATING file. */
- while(fgets(updatingline, maxcharperline, fd) != NULL) {
+ while (fgets(updatingline, maxcharperline, fd) != NULL) {
/* No entry is found so far */
if (found == 0) {
/* Search for AFFECTS line to parse the portname. */
tmpline1 = strstr(updatingline, affects);
- if( tmpline1 != NULL ) {
+ if (tmpline1 != NULL) {
curr = head;
- while(curr != NULL) {
+ while (curr != NULL) {
tmpline2 = strstr(updatingline, curr->name);
- if( tmpline2 != NULL )
+ if (tmpline2 != NULL)
break;
curr = curr->next;
}
- if( tmpline2 != NULL ) {
+ if (tmpline2 != NULL) {
/* If -d is set, check if entry is newer than the date. */
- if ( (dflag == 1) && (strncmp(dateline, date, 8) < 0))
+ if ((dflag == 1) && (strncmp(dateline, date, 8) < 0))
continue;
printf("%s", dateline);
printf("%s", updatingline);
@@ -231,7 +244,7 @@ main(int argc, char *argv[])
/* Search for the end of an entry, if not found print the line. */
else {
tmpline1 = strstr(updatingline, end);
- if( tmpline1 == NULL )
+ if (tmpline1 == NULL)
printf("%s", updatingline);
else {
linelength = strlen(updatingline);
@@ -245,7 +258,7 @@ main(int argc, char *argv[])
dateline = strdup(updatingline);
}
- if(ferror(fd)) {
+ if (ferror(fd)) {
fprintf(stderr, "error reading input\n");
exit(EX_IOERR);
}
diff --git a/usr.sbin/pkg_install/updating/pkg_updating.1 b/usr.sbin/pkg_install/updating/pkg_updating.1
index e3bcb54..0c35f9a 100644
--- a/usr.sbin/pkg_install/updating/pkg_updating.1
+++ b/usr.sbin/pkg_install/updating/pkg_updating.1
@@ -45,26 +45,31 @@ Print help message.
.El
.Sh EXAMPLES
.Bl -tag -width indent
-.Dl pkg_updating
+Shows all entries of all installed ports:
.Pp
-Shows all entries of all installed ports.
+.Dl % pkg_updating
.Pp
-.Dl pkg_updating -d 20070101
+Shows all entries of all installed ports since 2007-01-01:
.Pp
-Shows all entries of all installed ports since 2007-01-01.
+.Dl % pkg_updating -d 20070101
.Pp
-.Dl pkg_updating apache mysql
+Shows all entries for all apache and mysql ports:
.Pp
-Shows all entries for all apache and mysql ports.
+.Dl % pkg_updating apache mysql
.Pp
-.Dl pkg_updating -d 20060101 apache
+Shows all apache entries since 2006-01-01:
.Pp
-Shows all apache entries since 2006-01-01.
-.Pp
-.Dl pkg_updating -f /tmp/UPDATING
+.Dl % pkg_updating -d 20060101 apache
.Pp
Defines that the UPDATING file is in /tmp and shows all entries of all
-installed ports
+installed ports:
+.Pp
+.Dl % pkg_updating -f /tmp/UPDATING
+.Pp
+Fetch UPDATING file from ftp mirror and show all entries of all
+installed ports:
+.Pp
+.Dl % pkg_updating -f ftp://ftp.freebsd.org/pub/FreeBSD/ports/packages/UPDATING
.Pp
.El
.Sh ENVIRONMENT
OpenPOWER on IntegriCloud