[svn-commits] tilghman: trunk r111036 - in /trunk: ./ include/asterisk/ main/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Mar 26 14:19:32 CDT 2008


Author: tilghman
Date: Wed Mar 26 14:19:31 2008
New Revision: 111036

URL: http://svn.digium.com/view/asterisk?view=rev&rev=111036
Log:
Add a linkedlist macro that maintains a sorted list

Modified:
    trunk/CHANGES
    trunk/include/asterisk/linkedlists.h
    trunk/main/config.c

Modified: trunk/CHANGES
URL: http://svn.digium.com/view/asterisk/trunk/CHANGES?view=diff&rev=111036&r1=111035&r2=111036
==============================================================================
--- trunk/CHANGES (original)
+++ trunk/CHANGES Wed Mar 26 14:19:31 2008
@@ -30,6 +30,12 @@
 -----------
  * The ATTENDED_TRANSFER_COMPLETE_SOUND can now be set using setvar to cause a given
    audio file to be played upon completion of an attended transfer.
+
+CLI Changes
+-----------
+  * New CLI command, "config reload <file.conf>" which reloads any module that
+     references that particular configuration file.  Also added "config list"
+     which shows which configuration files are in use.
 
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 1.4.X to Asterisk 1.6.0  -------------
@@ -135,9 +141,6 @@
   * Added a CLI command, "devstate change", which allows you to set custom device
      states from the func_devstate module that provides the DEVICE_STATE() function
      and handling of the "Custom:" devices.
-  * New CLI command, "config reload <file.conf>" which reloads any module that
-     references that particular configuration file.  Also added "config list"
-     which shows which configuration files are in use.
 
 SIP changes
 -----------

Modified: trunk/include/asterisk/linkedlists.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/linkedlists.h?view=diff&rev=111036&r1=111035&r2=111036
==============================================================================
--- trunk/include/asterisk/linkedlists.h (original)
+++ trunk/include/asterisk/linkedlists.h Wed Mar 26 14:19:31 2008
@@ -456,6 +456,7 @@
   \li AST_LIST_INSERT_AFTER()
   \li AST_LIST_INSERT_HEAD()
   \li AST_LIST_INSERT_TAIL()
+  \li AST_LIST_INSERT_SORTALPHA()
 */
 #define AST_LIST_TRAVERSE(head,var,field) 				\
 	for((var) = (head)->first; (var); (var) = (var)->field.next)
@@ -693,6 +694,38 @@
 } while (0)
 
 #define AST_RWLIST_INSERT_TAIL AST_LIST_INSERT_TAIL
+
+/*!
+ * \brief Inserts a list entry into a alphabetically sorted list
+ * \param head Pointer to the list head structure
+ * \param elm Pointer to the entry to be inserted
+ * \param field Name of the list entry field (declared using AST_LIST_ENTRY())
+ * \param sortfield Name of the field on which the list is sorted
+ */
+#define AST_LIST_INSERT_SORTALPHA(head, elm, field, sortfield) do { \
+	if (!(head)->first) {                                           \
+		(head)->first = (elm);                                      \
+		(head)->last = (elm);                                       \
+	} else {                                                        \
+		typeof((head)->first) cur = (head)->first, prev = NULL;     \
+		while (cur && strcmp(cur->sortfield, elm->sortfield) < 0) { \
+			prev = cur;                                             \
+			cur = cur->field.next;                                  \
+		}                                                           \
+		if (!prev) {       /* Same as INSERT_HEAD */                \
+			(elm)->field.next = (head)->first;                      \
+			(head)->first = (elm);                                  \
+		} else if (!cur) { /* Same as INSERT_TAIL */                \
+			(head)->last->field.next = (elm);                       \
+			(head)->last = (elm);                                   \
+		} else {                                                    \
+			(elm)->field.next = cur;                                \
+			(prev)->field.next = (elm);                             \
+		}                                                           \
+	}                                                               \
+} while (0)
+
+#define AST_RWLIST_INSERT_SORTALPHA	AST_LIST_INSERT_SORTALPHA
 
 /*!
   \brief Appends a whole list to the tail of a list.

Modified: trunk/main/config.c
URL: http://svn.digium.com/view/asterisk/trunk/main/config.c?view=diff&rev=111036&r1=111035&r2=111036
==============================================================================
--- trunk/main/config.c (original)
+++ trunk/main/config.c Wed Mar 26 14:19:31 2008
@@ -878,7 +878,7 @@
 		cfmtime->who_asked = cfmtime->filename + strlen(configfile) + 1;
 		strcpy(cfmtime->who_asked, who_asked);
 		/* Note that the file mtime is initialized to 0, i.e. 1970 */
-		AST_LIST_INSERT_TAIL(&cfmtime_head, cfmtime, list);
+		AST_LIST_INSERT_SORTALPHA(&cfmtime_head, cfmtime, list, filename);
 	}
 
 	if (!stat(configfile, &statbuf))
@@ -1211,7 +1211,7 @@
 				cfmtime->who_asked = cfmtime->filename + strlen(fn) + 1;
 				strcpy(cfmtime->who_asked, who_asked);
 				/* Note that the file mtime is initialized to 0, i.e. 1970 */
-				AST_LIST_INSERT_TAIL(&cfmtime_head, cfmtime, list);
+				AST_LIST_INSERT_SORTALPHA(&cfmtime_head, cfmtime, list, filename);
 			}
 		}
 




More information about the svn-commits mailing list