[svn-commits] tilghman: trunk r906 - /trunk/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Jul 6 09:26:18 CDT 2011


Author: tilghman
Date: Wed Jul  6 09:26:11 2011
New Revision: 906

URL: http://svnview.digium.com/svn/menuselect?view=rev&rev=906
Log:
Simplify menuselect internals.

This change modifies depends, uses, and conflicts to be the same structure
internally, so uses may be moved to depends when weak linking is not detected.
There should be no functionality change, other than no longer needing to use
the '<use>' tag attributes (which was not in any release anyway).

Closes ASTERISK-18062

Patches: 20110705__menuselect.diff.txt by tilghman (License #5003)

Tested by: iasgoscouk

Review: https://reviewboard.asterisk.org/r/1311/

Modified:
    trunk/linkedlists.h
    trunk/menuselect.c
    trunk/menuselect.h
    trunk/menuselect_curses.c
    trunk/menuselect_gtk.c
    trunk/menuselect_newt.c

Modified: trunk/linkedlists.h
URL: http://svnview.digium.com/svn/menuselect/trunk/linkedlists.h?view=diff&rev=906&r1=905&r2=906
==============================================================================
--- trunk/linkedlists.h (original)
+++ trunk/linkedlists.h Wed Jul  6 09:26:11 2011
@@ -222,14 +222,16 @@
   the list traversal (and without having to re-traverse the list to modify the
   previous entry, if any).
  */
-#define AST_LIST_REMOVE_CURRENT(head, field)						\
+#define AST_LIST_REMOVE_CURRENT(head, field) do {					\
+	__new_prev->field.next = NULL;							\
 	__new_prev = __list_prev;							\
 	if (__list_prev)								\
 		__list_prev->field.next = __list_next;					\
 	else										\
 		(head)->first = __list_next;						\
 	if (!__list_next)								\
-		(head)->last = __list_prev;
+		(head)->last = __list_prev;						\
+	} while (0)
 
 /*!
   \brief Inserts a list entry before the current entry during a traversal.

Modified: trunk/menuselect.c
URL: http://svnview.digium.com/svn/menuselect/trunk/menuselect.c?view=diff&rev=906&r1=905&r2=906
==============================================================================
--- trunk/menuselect.c (original)
+++ trunk/menuselect.c Wed Jul  6 09:26:11 2011
@@ -191,9 +191,9 @@
 /*! \brief Free a member structure and all of its members */
 static void free_member(struct member *mem)
 {
-	struct depend *dep;
-	struct conflict *cnf;
-	struct use *use;
+	struct reference *dep;
+	struct reference *cnf;
+	struct reference *use;
 
 	while ((dep = AST_LIST_REMOVE_HEAD(&mem->deps, list)))
 		free(dep);
@@ -210,9 +210,9 @@
 	FILE *f;
 	struct tree *tree;
 	struct member *mem;
-	struct depend *dep;
-	struct conflict *cnf;
-	struct use *use;
+	struct reference *dep;
+	struct reference *cnf;
+	struct reference *use;
 	mxml_node_t *cur;
 	mxml_node_t *cur2;
 	mxml_node_t *cur3;
@@ -345,51 +345,24 @@
 			     cur3 && cur3->child;
 			     cur3 = mxmlFindElement(cur3, cur2, "use", NULL, NULL, MXML_NO_DESCEND))
 			{
-#if !defined(HAVE_ATTRIBUTE_weak_import) && !defined(HAVE_ATTRIBUTE_weakref)
-				const char *usetype;
-				if ((usetype = mxmlElementGetAttr(cur3, "type")) && !strcasecmp(usetype, "module")) {
-					/* If the compiler won't support the functionality required for "use", then "use" -> "depend" */
-					if (!(dep = calloc(1, sizeof(*dep)))) {
-						free_member(mem);
-						return -1;
-					}
-					if ((tmp = mxmlElementGetAttr(cur3, "name"))) {
-						if (!strlen_zero(tmp)) {
-							dep->name = tmp;
-						}
-					}
-					if (!strlen_zero(cur3->child->value.opaque)) {
-						dep->displayname = cur3->child->value.opaque;
-						if (!dep->name) {
-							dep->name = dep->displayname;
-						}
-						AST_LIST_INSERT_TAIL(&mem->deps, dep, list);
-					} else {
-						free(dep);
-					}
-				} else { /* use type != module */
-#endif
-					if (!(use = calloc(1, sizeof(*use)))) {
-						free_member(mem);
-						return -1;
-					}
-					if ((tmp = mxmlElementGetAttr(cur3, "name"))) {
-						if (!strlen_zero(tmp)) {
-							use->name = tmp;
-						}
-					}
-					if (!strlen_zero(cur3->child->value.opaque)) {
-						use->displayname = cur3->child->value.opaque;
-						if (!use->name) {
-							use->name = use->displayname;
-						}
-						AST_LIST_INSERT_TAIL(&mem->uses, use, list);
-					} else {
-						free(use);
-					}
-#if !defined(HAVE_ATTRIBUTE_weak_import) && !defined(HAVE_ATTRIBUTE_weakref)
-				}
-#endif
+				if (!(use = calloc(1, sizeof(*use)))) {
+					free_member(mem);
+					return -1;
+				}
+				if ((tmp = mxmlElementGetAttr(cur3, "name"))) {
+					if (!strlen_zero(tmp)) {
+						use->name = tmp;
+					}
+				}
+				if (!strlen_zero(cur3->child->value.opaque)) {
+					use->displayname = cur3->child->value.opaque;
+					if (!use->name) {
+						use->name = use->displayname;
+					}
+					AST_LIST_INSERT_TAIL(&mem->uses, use, list);
+				} else {
+					free(use);
+				}
 			}
 
 			if (add_member(mem, cat))
@@ -410,7 +383,7 @@
 	unsigned int result = 0;
 	struct category *cat;
 	struct member *mem;
-	struct depend *dep;
+	struct reference *dep;
 	struct dep_file *dep_file;
 	unsigned int changed, old_failure;
 
@@ -497,7 +470,7 @@
 	unsigned int result = 0;
 	struct category *cat;
 	struct member *mem;
-	struct conflict *cnf;
+	struct reference *cnf;
 	struct dep_file *dep_file;
 	unsigned int changed, old_failure;
 
@@ -667,10 +640,11 @@
 {
 	struct category *cat, *cat2;
 	struct member *mem, *mem2;
-	struct depend *dep;
-	struct conflict *cnf;
-	struct use *use;
-
+	struct reference *dep;
+	struct reference *cnf;
+	struct reference *use;
+
+	/* Traverse through each module's dependency list and determine whether each is another module */
 	AST_LIST_TRAVERSE(&categories, cat, list) {
 		AST_LIST_TRAVERSE(&cat->members, mem, list) {
 			AST_LIST_TRAVERSE(&mem->deps, dep, list) {
@@ -699,6 +673,7 @@
 		}
 	}
 
+	/* Traverse through each module's use list and determine whether each is another module */
 	AST_LIST_TRAVERSE(&categories, cat, list) {
 		AST_LIST_TRAVERSE(&cat->members, mem, list) {
 			AST_LIST_TRAVERSE(&mem->uses, use, list) {
@@ -727,6 +702,22 @@
 		}
 	}
 
+	/* If weak linking is not supported, move module uses which are other modules to the dependency list */
+#if !defined(HAVE_ATTRIBUTE_weak_import) && !defined(HAVE_ATTRIBUTE_weakref)
+	AST_LIST_TRAVERSE(&categories, cat, list) {
+		AST_LIST_TRAVERSE(&cat->members, mem, list) {
+			AST_LIST_TRAVERSE_SAFE_BEGIN(&mem->uses, use, list) {
+				if (use->member) {
+					AST_LIST_REMOVE_CURRENT(&mem->uses, list);
+					AST_LIST_INSERT_TAIL(&mem->deps, use, list);
+				}
+			}
+			AST_LIST_TRAVERSE_SAFE_END;
+		}
+	}
+#endif
+
+	/* Traverse through each category marked as exclusive and mark every member as conflicting with every other member */
 	AST_LIST_TRAVERSE(&categories, cat, list) {
 		if (!cat->exclusive)
 			continue;
@@ -746,6 +737,7 @@
 		}
 	}
 
+	/* Traverse through each category and determine whether named conflicts for each module are other modules */
 	AST_LIST_TRAVERSE(&categories, cat, list) {
 		AST_LIST_TRAVERSE(&cat->members, mem, list) {
 			AST_LIST_TRAVERSE(&mem->conflicts, cnf, list) {
@@ -831,7 +823,7 @@
 
 unsigned int enable_member(struct member *mem)
 {
-	struct depend *dep;
+	struct reference *dep;
 	unsigned int can_enable = 1;
 
 	AST_LIST_TRAVERSE(&mem->deps, dep, list) {
@@ -1068,8 +1060,8 @@
 	FILE *f;
 	struct category *cat;
 	struct member *mem;
-	struct depend *dep;
-	struct use *use;
+	struct reference *dep;
+	struct reference *use;
 	struct dep_file *dep_file;
 
 	if (!(f = fopen(output_makedeps, "w"))) {
@@ -1154,8 +1146,8 @@
 	FILE *f;
 	struct category *cat;
 	struct member *mem;
-	struct depend *dep;
-	struct use *use;
+	struct reference *dep;
+	struct reference *use;
 
 	if (!(f = fopen(output_makeopts, "w"))) {
 		fprintf(stderr, "Unable to open build configuration file (%s) for writing!\n", output_makeopts);
@@ -1290,8 +1282,8 @@
 #ifdef MENUSELECT_DEBUG
 	struct category *cat;
 	struct member *mem;
-	struct depend *dep;
-	struct conflict *cnf;
+	struct reference *dep;
+	struct reference *cnf;
 
 	AST_LIST_TRAVERSE(&categories, cat, list) {
 		fprintf(stderr, "Category: '%s'\n", cat->name);
@@ -1318,9 +1310,9 @@
 {
 	struct category *cat;
 	struct member *mem;
-	struct depend *dep;
-	struct conflict *cnf;
-	struct use *use;
+	struct reference *dep;
+	struct reference *cnf;
+	struct reference *use;
 
 	while ((cat = AST_LIST_REMOVE_HEAD(&categories, list))) {
 		while ((mem = AST_LIST_REMOVE_HEAD(&cat->members, list))) {
@@ -1410,8 +1402,8 @@
 	unsigned int insane = 0;
 	struct category *cat;
 	struct member *mem;
-	struct depend *dep;
-	struct use *use;
+	struct reference *dep;
+	struct reference *use;
 	struct dep_file *dep_file;
 	unsigned int dep_header_printed;
 	unsigned int group_header_printed;

Modified: trunk/menuselect.h
URL: http://svnview.digium.com/svn/menuselect/trunk/menuselect.h?view=diff&rev=906&r1=905&r2=906
==============================================================================
--- trunk/menuselect.h (original)
+++ trunk/menuselect.h Wed Jul  6 09:26:11 2011
@@ -34,39 +34,17 @@
 
 struct member;
 
-struct depend {
+struct reference {
 	/*! the name of the dependency */
 	const char *name;
 	/*! the display name of the dependency */
 	const char *displayname;
 	/*! if this dependency is a member, not an external object */
 	struct member *member;
+	/*! if this package was found */
+	unsigned char met:1;
 	/*! for linking */
-	AST_LIST_ENTRY(depend) list;
-};
-
-struct conflict {
-	/*! the name of the conflict */
-	const char *name;
-	/*! the display name of the conflict */
-	const char *displayname;
-	/*! if this conflict is a member, not an external object */
-	const struct member *member;
-	/*! for linking */
-	AST_LIST_ENTRY(conflict) list;
-};
-
-struct use {
-	/*! the name of the used package */
-	const char *name;
-	/*! the display name of the used package */
-	const char *displayname;
-	/*! if this used package is a member, not an external object */
-	struct member *member;
-	/*! if this used package was found */
-	unsigned char met;
-	/*! for linking */
-	AST_LIST_ENTRY(use) list;
+	AST_LIST_ENTRY(reference) list;
 };
 
 enum failure_types {
@@ -104,11 +82,11 @@
 	 * when explicitly set. */
 	unsigned int explicitly_enabled_only:1;
 	/*! dependencies of this module */
-	AST_LIST_HEAD_NOLOCK(, depend) deps;
+	AST_LIST_HEAD_NOLOCK(, reference) deps;
 	/*! conflicts of this module */
-	AST_LIST_HEAD_NOLOCK(, conflict) conflicts;
+	AST_LIST_HEAD_NOLOCK(, reference) conflicts;
 	/*! optional packages used by this module */
-	AST_LIST_HEAD_NOLOCK(, use) uses;
+	AST_LIST_HEAD_NOLOCK(, reference) uses;
 	/*! for making a list of modules */
 	AST_LIST_ENTRY(member) list;
 };

Modified: trunk/menuselect_curses.c
URL: http://svnview.digium.com/svn/menuselect/trunk/menuselect_curses.c?view=diff&rev=906&r1=905&r2=906
==============================================================================
--- trunk/menuselect_curses.c (original)
+++ trunk/menuselect_curses.c Wed Jul  6 09:26:11 2011
@@ -182,9 +182,9 @@
 static void display_mem_info(WINDOW *menu, struct member *mem, int start, int end)
 {
 	char buf[64];
-	struct depend *dep;
-	struct conflict *con;
-	struct use *use;
+	struct reference *dep;
+	struct reference *con;
+	struct reference *use;
 
 	wmove(menu, end - start + 2, max_x / 2 - 16);
 	wclrtoeol(menu);

Modified: trunk/menuselect_gtk.c
URL: http://svnview.digium.com/svn/menuselect/trunk/menuselect_gtk.c?view=diff&rev=906&r1=905&r2=906
==============================================================================
--- trunk/menuselect_gtk.c (original)
+++ trunk/menuselect_gtk.c Wed Jul  6 09:26:11 2011
@@ -268,9 +268,9 @@
 			char dep_buf[64] = "";
 			char use_buf[64] = "";
 			char cnf_buf[64] = "";
-			struct depend *dep;
-			struct use *use;
-			struct conflict *cnf;
+			struct reference *dep;
+			struct reference *use;
+			struct reference *cnf;
 
 			AST_LIST_TRAVERSE(&mem->deps, dep, list) {
 				strncat(dep_buf, dep->displayname, sizeof(dep_buf) - strlen(dep_buf) - 1);

Modified: trunk/menuselect_newt.c
URL: http://svnview.digium.com/svn/menuselect/trunk/menuselect_newt.c?view=diff&rev=906&r1=905&r2=906
==============================================================================
--- trunk/menuselect_newt.c (original)
+++ trunk/menuselect_newt.c Wed Jul  6 09:26:11 2011
@@ -90,9 +90,9 @@
 {
 	char buffer[128] = { 0 };
 
-	struct depend *dep;
-	struct conflict *con;
-	struct use *uses;
+	struct reference *dep;
+	struct reference *con;
+	struct reference *uses;
 
 	reset_display();
 
@@ -119,6 +119,7 @@
 		strcpy(buffer, "");
 		AST_LIST_TRAVERSE(&mem->uses, uses, list) {
 			strncat(buffer, uses->displayname, sizeof(buffer) - strlen(buffer) - 1);
+			strncat(buffer, uses->member ? "(M)" : "(E)", sizeof(buffer) - strlen(buffer) - 1);
 			if (AST_LIST_NEXT(uses, list))
 				strncat(buffer, ", ", sizeof(buffer) - strlen(buffer) - 1);
 		}




More information about the svn-commits mailing list