Project ideas page: UPDATING parser and displayer
Martin Tournoij
carpetsmoker at xs4all.nl
Sat Oct 20 05:22:24 PDT 2007
On Sat 20 Oct 2007 13:10, Beat Gtzi wrote:
> Rong-en Fan wrote:
> >> Known issues:
> >> - pkg_updating needs a colon at the end of the date line. Some entries
> >> don't have this colon. This patch adds the missing colons:
> >> http://tmp.chruetertee.ch/pkg_updating/UPDATING.patch
> >
> > I just committed this. Thanks!
>
> Thanks!
>
> >> pkg_updating is available here:
> >> http://tmp.chruetertee.ch/pkg_updating/
> >
> > One question, do you support PORTSDIR environment variable?
>
> No, pkg_updating doesn't support the PORTSDIR environment variable yet.
> But I think this would be useful therefore I will add it.
>
> Beat
Here's a little patch.
It changes:
- variable tmpfile was renamed to tmp_file, I got a warning that it
shadowed a global declaration
- Add support for PORTSDIR and PKG_DBDIR
- Don't exit if we can't open +CONTENTS file, since pkgdb may be in
/var/db/pkg
- Add Makefile for sourcetree
TODO:
Write a manpage
Note that I'm so hungry that I'm almost falling down (I always forget
to eat...) and than I'm not a particular good C programmer, but I
needed to modify it anyway to get it running...
Regards,
Martin Tournoij
-------------- next part --------------
diff -urN updating/Makefile /usr/src/usr.sbin/pkg_install/updating/Makefile
--- updating/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ /usr/src/usr.sbin/pkg_install/updating/Makefile 2007-10-20 14:08:20.000000000 +0200
@@ -0,0 +1,9 @@
+PROG= pkg_updating
+SRCS= pkg_updating.c
+
+CFLAGS+= -I${.CURDIR}/../lib
+
+WARNS?= 6
+WFORMAT?= 1
+
+.include <bsd.prog.mk>
diff -urN updating/pathnames.h /usr/src/usr.sbin/pkg_install/updating/pathnames.h
--- updating/pathnames.h 2007-10-20 14:09:56.000000000 +0200
+++ /usr/src/usr.sbin/pkg_install/updating/pathnames.h 2007-10-20 13:54:05.000000000 +0200
@@ -7,5 +7,19 @@
* ----------------------------------------------------------------------------
*/
-#define _PATH_UPDATING "/usr/ports/UPDATING"
-#define _PATH_PKGDB "/var/db/pkg"
+/* Copy from ../version/version.h, shouldn't this go in lib/lib.h? */
+/* Where the ports lives by default */
+#define DEF_PORTS_DIR "/usr/ports/UPDATING"
+/* just in case we change the environment variable name */
+#define PORTSDIR "PORTSDIR"
+/* macro to get name of directory where we put logging information */
+#define UPDATING (getenv(PORTSDIR) ? strcat(getenv(PORTSDIR), "/UPDATING") : DEF_PORTS_DIR)
+
+/* Including lib/lib.h gives an error(?!) */
+/* Where we put logging information by default, else ${PKG_DBDIR} if set */
+#define DEF_LOG_DIR "/var/db/pkg"
+/* just in case we change the environment variable name */
+#define PKG_DBDIR "PKG_DBDIR"
+/* macro to get name of directory where we put logging information */
+#define LOG_DIR (getenv(PKG_DBDIR) ? getenv(PKG_DBDIR) : DEF_LOG_DIR)
+
diff -urN updating/pkg_updating.c /usr/src/usr.sbin/pkg_install/updating/pkg_updating.c
--- updating/pkg_updating.c 2007-10-20 14:10:01.000000000 +0200
+++ /usr/src/usr.sbin/pkg_install/updating/pkg_updating.c 2007-10-20 14:18:48.000000000 +0200
@@ -43,14 +43,14 @@
const char *end = "20";
/* Keyword for searching origin portname of installed port */
const char *origin = "@comment ORIGIN:";
- const char *pkgdbpath = _PATH_PKGDB; /* Location of pkgdb */
- const char *updatingfile = _PATH_UPDATING; /* Location of UPDATING */
+ const char *pkgdbpath = LOG_DIR; /* Location of pkgdb */
+ const char *updatingfile = UPDATING; /* Location of UPDATING */
char *date; /* Passed -d argument */
char *dateline; /* Saved date of an entry */
char *portname; /* Passed -p argument */
/* Temporary variable to create path to +CONTENTS for installed ports */
- char tmpfile[MAXPATHLEN];
+ char tmp_file[MAXPATHLEN];
/* Tmp lines for parsing file */
char *tmpline1;
char *tmpline2;
@@ -100,23 +100,23 @@
/* UPDATING will be parsed for all installed ports if -p is not set */
if (pflag == 0) {
/* Opens /var/db/pkg and search for all installed ports */
- if((dir = opendir(_PATH_PKGDB)) != NULL) {
+ if((dir = opendir(pkgdbpath)) != NULL) {
while ((pkgdbdir = readdir(dir)) != NULL) {
if (strcmp(pkgdbdir->d_name, ".") != 0 &&
strcmp(pkgdbdir->d_name, "..") !=0) {
/* Create path to +CONTENTS file for each installed port */
- n = strlcpy(tmpfile, pkgdbpath, strlen(pkgdbpath)+1);
- n = strlcpy(tmpfile + n, "/", sizeof(tmpfile) - n);
- n = strlcat(tmpfile + n, pkgdbdir->d_name, sizeof(tmpfile) - n);
- (void)strlcat(tmpfile + n, "/+CONTENTS", sizeof(tmpfile) - n);
+ 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);
+ (void)strlcat(tmp_file + n, "/+CONTENTS", sizeof(tmp_file) - n);
/* Open +CONTENT file */
- fd = fopen(tmpfile, "r");
+ fd = fopen(tmp_file, "r");
if(fd == NULL) {
- fprintf(stderr, "can't open %s: %s\n",
- tmpfile, strerror(errno));
- exit(EX_UNAVAILABLE);
+ fprintf(stderr, "Warning: can't open %s: %s\n",
+ tmp_file, strerror(errno));
+ continue;
}
/* Parses +CONTENT for ORIGIN line and
More information about the freebsd-ports
mailing list