Module Name:    othersrc
Committed By:   dholland
Date:           Mon Mar  4 23:52:07 UTC 2013

Modified Files:
        othersrc/usr.bin/dholland-make2: arch.c

Log Message:
Use arrays, not lists.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 othersrc/usr.bin/dholland-make2/arch.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: othersrc/usr.bin/dholland-make2/arch.c
diff -u othersrc/usr.bin/dholland-make2/arch.c:1.3 othersrc/usr.bin/dholland-make2/arch.c:1.4
--- othersrc/usr.bin/dholland-make2/arch.c:1.3	Mon Mar  4 23:03:41 2013
+++ othersrc/usr.bin/dholland-make2/arch.c	Mon Mar  4 23:52:07 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: arch.c,v 1.3 2013/03/04 23:03:41 dholland Exp $	*/
+/*	$NetBSD: arch.c,v 1.4 2013/03/04 23:52:07 dholland Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -137,8 +137,7 @@
 #include    "dir.h"
 #include    "config.h"
 
-MAKE_RCSID("$NetBSD: arch.c,v 1.3 2013/03/04 23:03:41 dholland Exp $");
-
+MAKE_RCSID("$NetBSD: arch.c,v 1.4 2013/03/04 23:52:07 dholland Exp $");
 
 #ifdef TARGET_MACHINE
 #undef MAKE_MACHINE
@@ -149,8 +148,6 @@ MAKE_RCSID("$NetBSD: arch.c,v 1.3 2013/0
 #define MAKE_MACHINE_ARCH TARGET_MACHINE_ARCH
 #endif
 
-static Lst	  archives;   /* Lst of archives we've already examined */
-
 typedef struct Arch {
     char	  *name;      /* Name of archive */
     Hash_Table	  members;    /* All the members of the archive described
@@ -159,10 +156,10 @@ typedef struct Arch {
     size_t	  fnamesize;  /* Size of the string table */
 } Arch;
 
-static int ArchFindArchive(const void *, const void *);
-#ifdef CLEANUP
-static void ArchFree(void *);
-#endif
+DECLARRAY_BYTYPE(archlist, struct Arch, static);
+DEFARRAY_BYTYPE(archlist, struct Arch, MAKE_ATTR_UNUSED static);
+typedef struct archlist ArchList;
+
 static struct ar_hdr *ArchStatMember(char *, char *, Boolean);
 static FILE *ArchFindMember(char *, char *, struct ar_hdr *, const char *);
 #if defined(__svr4__) || defined(__SVR4) || defined(__ELF__)
@@ -170,6 +167,9 @@ static FILE *ArchFindMember(char *, char
 static int ArchSVR4Entry(Arch *, char *, size_t, FILE *);
 #endif
 
+/* Archives we've already examined */
+static ArchList archives;
+
 #ifdef CLEANUP
 /*-
  *-----------------------------------------------------------------------
@@ -185,9 +185,8 @@ static int ArchSVR4Entry(Arch *, char *,
  *-----------------------------------------------------------------------
  */
 static void
-ArchFree(void *ap)
+ArchFree(Arch *a)
 {
-    Arch *a = (Arch *)ap;
     Hash_Search	  search;
     Hash_Entry	  *entry;
 
@@ -206,7 +205,6 @@ ArchFree(void *ap)
 #endif
 
 
-
 /*-
  *-----------------------------------------------------------------------
  * Arch_ParseArchive --
@@ -470,26 +468,34 @@ Arch_ParseArchive(char **linePtr, Lst no
 
 /*-
  *-----------------------------------------------------------------------
- * ArchFindArchive --
- *	See if the given archive is the one we are looking for. Called
- *	From ArchStatMember and ArchFindMember via Lst_Find.
+ * FindArchive --
+ *      Find an archive by name. Called from ArchStatMember.
  *
  * Input:
- *	ar		Current list element
- *	archName	Name we want
+ *	name		Name we want
  *
  * Results:
- *	0 if it is, non-zero if it isn't.
+ *	The archive, or NULL if it doesn't exist.
  *
  * Side Effects:
  *	None.
  *
  *-----------------------------------------------------------------------
  */
-static int
-ArchFindArchive(const void *ar, const void *archName)
+static Arch *
+FindArchive(const char *name)
 {
-    return (strcmp(archName, ((const Arch *)ar)->name));
+	unsigned i, num;
+	Arch *a;
+
+	num = archlist_num(&archives);
+	for (i=0; i<num; i++) {
+		a = archlist_get(&archives, i);
+		if (!strcmp(name, a->name)) {
+			return a;
+		}
+	}
+	return NULL;
 }
 
 /*-
@@ -523,7 +529,6 @@ ArchStatMember(char *archive, char *memb
     int		  size;       /* Size of archive member */
     char	  *cp;	      /* Useful character pointer */
     char	  magic[SARMAG];
-    LstNode	  ln;	      /* Lst member containing archive descriptor */
     Arch	  *ar;	      /* Archive descriptor */
     Hash_Entry	  *he;	      /* Entry containing member's description */
     struct ar_hdr arh;        /* archive-member header for reading archive */
@@ -541,10 +546,8 @@ ArchStatMember(char *archive, char *memb
 	member = cp + 1;
     }
 
-    ln = Lst_Find(archives, archive, ArchFindArchive);
-    if (ln != NULL) {
-	ar = (Arch *)Lst_Datum(ln);
-
+    ar = FindArchive(archive);
+    if (ar != NULL) {
 	he = Hash_FindEntry(&ar->members, member);
 
 	if (he != NULL) {
@@ -688,7 +691,7 @@ ArchStatMember(char *archive, char *memb
 
     fclose(arch);
 
-    (void)Lst_AtEnd(archives, ar);
+    archlist_add(&archives, ar, NULL);
 
     /*
      * Now that the archive has been read and cached, we can look into
@@ -1286,7 +1289,7 @@ Arch_LibOODate(GNode *gn)
 void
 Arch_Init(void)
 {
-    archives = Lst_Init(FALSE);
+    archlist_init(&archives);
 }
 
 
@@ -1308,7 +1311,13 @@ void
 Arch_End(void)
 {
 #ifdef CLEANUP
-    Lst_Destroy(archives, ArchFree);
+    unsigned i;
+
+    for (i=0; i<archlist_num(&archives); i++) {
+	ArchFree(archlist_get(&archives, i));
+    }
+    archlist_setsize(&archives, 0);
+    archlist_cleanup(&archives);
 #endif
 }
 

Reply via email to