[asterisk-commits] russell: trunk r38452 - in /trunk: channels/ include/asterisk/

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Fri Jul 28 15:14:50 MST 2006


Author: russell
Date: Fri Jul 28 17:14:49 2006
New Revision: 38452

URL: http://svn.digium.com/view/asterisk?rev=38452&view=rev
Log:
Add the function attribute "pure" or "const" to various functions that perform
int to string or string to int operations.

"pure" essentially says that this function has no side effects aside from its
result, and the result depends on nothing else other than its arguments and
global variables.  "const" is a more strict form of "pure", where the function
also doesn't access any global variables.

>From the gcc manual: "Such a function can be subject to common subexpression 
elimination and loop optimization just as an arithmetic operator would be."
This also tells the compiler that it is safe to call the function fewer times
than the code says to, given the same arguments, since the result will always
be the same.

Modified:
    trunk/channels/chan_sip.c
    trunk/include/asterisk/channel.h

Modified: trunk/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_sip.c?rev=38452&r1=38451&r2=38452&view=diff
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Fri Jul 28 17:14:49 2006
@@ -1286,8 +1286,8 @@
 /*--- Applications, functions, CLI and manager command helpers */
 static const char *sip_nat_mode(const struct sip_pvt *p);
 static int sip_show_inuse(int fd, int argc, char *argv[]);
-static char *transfermode2str(enum transfermodes mode);
-static char *nat2str(int nat);
+static char *transfermode2str(enum transfermodes mode) __attribute__ ((const));
+static char *nat2str(int nat) __attribute__ ((const));
 static int peer_status(struct sip_peer *peer, char *status, int statuslen);
 static int sip_show_users(int fd, int argc, char *argv[]);
 static int _sip_show_peers(int fd, int *total, struct mansession *s, struct message *m, int argc, char *argv[]);
@@ -1295,8 +1295,8 @@
 static int sip_show_peers(int fd, int argc, char *argv[]);
 static int sip_show_objects(int fd, int argc, char *argv[]);
 static void  print_group(int fd, unsigned int group, int crlf);
-static const char *dtmfmode2str(int mode);
-static const char *insecure2str(int port, int invite);
+static const char *dtmfmode2str(int mode) __attribute__ ((const));
+static const char *insecure2str(int port, int invite) __attribute__ ((const));
 static void cleanup_stale_contexts(char *new, char *old);
 static void print_codec_to_cli(int fd, struct ast_codec_pref *pref);
 static const char *domain_mode_to_text(const enum domain_mode mode);
@@ -1308,7 +1308,7 @@
 static int sip_show_user(int fd, int argc, char *argv[]);
 static int sip_show_registry(int fd, int argc, char *argv[]);
 static int sip_show_settings(int fd, int argc, char *argv[]);
-static const char *subscription_type2str(enum subscriptiontype subtype);
+static const char *subscription_type2str(enum subscriptiontype subtype) __attribute__ ((pure));
 static const struct cfsubscription_types *find_subscription_type(enum subscriptiontype subtype);
 static int __sip_show_channels(int fd, int argc, char *argv[], int subscriptions);
 static int sip_show_channels(int fd, int argc, char *argv[]);
@@ -1384,7 +1384,7 @@
 static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us);
 static void sip_registry_destroy(struct sip_registry *reg);
 static int sip_register(char *value, int lineno);
-static char *regstate2str(enum sipregistrystate regstate);
+static char *regstate2str(enum sipregistrystate regstate) __attribute__ ((const));
 static int sip_reregister(void *data);
 static int __sip_do_register(struct sip_registry *r);
 static int sip_reg_timeout(void *data);
@@ -1401,7 +1401,7 @@
 static unsigned int parse_sip_options(struct sip_pvt *pvt, const char *supported);
 static void parse_request(struct sip_request *req);
 static const char *get_header(const struct sip_request *req, const char *name);
-static char *referstatus2str(enum referstatus rstatus);
+static char *referstatus2str(enum referstatus rstatus) __attribute__ ((pure));
 static int method_match(enum sipmethod id, const char *name);
 static void parse_copy(struct sip_request *dst, const struct sip_request *src);
 static char *get_in_brackets(char *tmp);

Modified: trunk/include/asterisk/channel.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/channel.h?rev=38452&r1=38451&r2=38452&view=diff
==============================================================================
--- trunk/include/asterisk/channel.h (original)
+++ trunk/include/asterisk/channel.h Fri Jul 28 17:14:49 2006
@@ -955,14 +955,14 @@
  * Give a name to a cause code
  * Returns the text form of the binary cause code given
  */
-const char *ast_cause2str(int state);
+const char *ast_cause2str(int state) __attribute__ ((pure));
 
 /*! Convert the string form of a cause code to a number */
 /*! 
  * \param name string form of the cause
  * Returns the cause code
  */
-int ast_str2cause(const char *name);
+int ast_str2cause(const char *name) __attribute__ ((pure));
 
 /*! Gives the string form of a given channel state */
 /*! 
@@ -979,7 +979,7 @@
  * See above
  * Returns the text form of the binary transfer capbility
  */
-char *ast_transfercapability2str(int transfercapability);
+char *ast_transfercapability2str(int transfercapability) __attribute__ ((const));
 
 /* Options: Some low-level drivers may implement "options" allowing fine tuning of the
    low level channel.  See frame.h for options.  Note that many channel drivers may support



More information about the asterisk-commits mailing list