[2906] in BarnOwl Developers

home help back first fref pref prev next nref lref last post

Kill owl_{malloc,realloc,free,strdup,sprintf} wrappers

daemon@ATHENA.MIT.EDU (Anders Kaseorg)
Fri Feb 11 04:12:34 2011

Date: Fri, 11 Feb 2011 04:12:28 -0500 (EST)
From: Anders Kaseorg <andersk@MIT.EDU>
To: barnowl-dev@mit.edu

(Note that the owl_text_tr patch I sent in reply to davidben earlier 
introduces another owl_free that should become a g_free in whichever 
branch is merged later.)

The following changes since commit 9518a859987b60867c3566157ad0a24358cd28fb:

  owl_function_classinstfilt: Do not turn [ '"] into . (2011-02-11 01:22:31 -0500)

are available in the git repository at:
  git://andersk.mit.edu/barnowl.git g_new

Anders Kaseorg (5):
      Replace owl_malloc with g_new and g_new0.
      Replace owl_realloc with g_renew.
      Replace owl_free with g_free.
      Replace owl_strdup with g_strdup.
      Replace owl_sprintf with g_strdup_printf.

 aim.c           |   41 +++++------
 buddy.c         |    6 +-
 buddylist.c     |    6 +-
 cmd.c           |   54 +++++++-------
 commands.c      |   50 +++++++-------
 context.c       |    9 +--
 dict.c          |   14 ++--
 editwin.c       |   30 ++++----
 errqueue.c      |    2 +-
 filter.c        |   22 +++---
 filterelement.c |   16 ++--
 fmtext.c        |   46 ++++++------
 functions.c     |  208 +++++++++++++++++++++++++++---------------------------
 global.c        |   40 +++++-----
 history.c       |    6 +-
 keybinding.c    |   16 ++--
 keymap.c        |   22 +++---
 list.c          |    6 +-
 logging.c       |   58 ++++++++--------
 message.c       |   64 +++++++++---------
 msgwin.c        |    6 +-
 owl.c           |   14 ++--
 perlconfig.c    |   42 ++++++------
 perlglue.xs     |   26 ++++----
 popexec.c       |    8 +-
 popwin.c        |    5 +-
 regex.c         |    8 +-
 select.c        |   16 ++--
 style.c         |    8 +-
 tester.c        |   24 +++---
 text.c          |   34 +++++-----
 util.c          |   95 ++++++++-----------------
 variable.c      |   55 +++++++--------
 view.c          |    4 +-
 viewwin.c       |   14 ++--
 zbuddylist.c    |   12 ++--
 zephyr.c        |  198 ++++++++++++++++++++++++++--------------------------
 zwrite.c        |   82 +++++++++++-----------
 38 files changed, 662 insertions(+), 705 deletions(-)

-- 8< --
From 658d7ae3c220391678997d149b5c87340d3f9c2c Mon Sep 17 00:00:00 2001
From: Anders Kaseorg <andersk@mit.edu>
Date: Thu, 27 Aug 2009 00:51:45 -0400
Subject: [PATCH 1/5] Replace owl_malloc with g_new and g_new0.

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
---
 aim.c        |    7 +++----
 buddylist.c  |    6 +++---
 cmd.c        |    4 ++--
 commands.c   |    2 +-
 context.c    |    3 +--
 dict.c       |    2 +-
 editwin.c    |   16 +++++++---------
 filter.c     |    6 +++---
 fmtext.c     |   18 +++++++++---------
 functions.c  |   12 ++++++------
 global.c     |    2 +-
 keybinding.c |    2 +-
 keymap.c     |    6 +++---
 list.c       |    2 +-
 logging.c    |    2 +-
 message.c    |    2 +-
 perlconfig.c |    2 +-
 perlglue.xs  |    4 ++--
 popexec.c    |    4 ++--
 popwin.c     |    3 +--
 select.c     |    6 +++---
 text.c       |    8 ++++----
 util.c       |   11 +++--------
 variable.c   |   13 ++++++-------
 viewwin.c    |    8 +++-----
 zephyr.c     |   16 ++++++++--------
 zwrite.c     |    2 +-
 27 files changed, 78 insertions(+), 91 deletions(-)

diff --git a/aim.c b/aim.c
index 5e27abc..3ed92fb 100644
--- a/aim.c
+++ b/aim.c
@@ -133,8 +133,7 @@ int owl_aim_login(const char *screenname, const char *password)
   aim_tx_setenqueue(sess, AIM_TX_IMMEDIATE, NULL);
   
   /* this will leak, I know and just don't care right now */
-  priv=owl_malloc(sizeof(struct owlfaim_priv));
-  memset(priv, 0, sizeof(struct owlfaim_priv));
+  priv=g_new0(struct owlfaim_priv, 1);
 
   priv->screenname = owl_strdup(screenname);
   priv->password = owl_strdup(password);
@@ -434,7 +433,7 @@ char *owl_aim_normalize_screenname(const char *in)
   int i, j, k;
 
   j=strlen(in);
-  out=owl_malloc(j+30);
+  out=g_new(char, j+30);
   k=0;
   for (i=0; i<j; i++) {
     if (in[i]!=' ') {
@@ -1045,7 +1044,7 @@ static int faimtest_parse_incoming_im_chan1(aim_session_t *sess, aim_conn_t *con
   stripmsg=owl_text_htmlstrip(realmsg);
   wrapmsg=owl_text_wordwrap(stripmsg, 70);
   nz_screenname=owl_aim_normalize_screenname(userinfo->sn);
-  m=owl_malloc(sizeof(owl_message));
+  m=g_new(owl_message, 1);
   owl_message_create_aim(m,
 			 nz_screenname,
 			 owl_global_get_aim_screenname(&g),
diff --git a/buddylist.c b/buddylist.c
index a327084..3b1f01f 100644
--- a/buddylist.c
+++ b/buddylist.c
@@ -10,7 +10,7 @@ void owl_buddylist_init(owl_buddylist *bl)
 void owl_buddylist_add_aim_buddy(owl_buddylist *bl, const char *screenname)
 {
   owl_buddy *b;
-  b=owl_malloc(sizeof(owl_buddy));
+  b=g_new(owl_buddy, 1);
   
   owl_buddy_create(b, OWL_PROTOCOL_AIM, screenname);
   owl_list_append_element(&(bl->buddies), b);
@@ -51,7 +51,7 @@ void owl_buddylist_oncoming(owl_buddylist *bl, const char *screenname)
     if (owl_global_is_ignore_aimlogin(&g)) return;
 
     /* if not, create the login message */
-    m=owl_malloc(sizeof(owl_message));
+    m=g_new(owl_message, 1);
     owl_message_create_aim(m,
 			   screenname,
 			   owl_global_get_aim_screenname(&g),
@@ -70,7 +70,7 @@ void owl_buddylist_offgoing(owl_buddylist *bl, const char *screenname)
   owl_message *m;
 
   if (owl_buddylist_is_aim_buddy_loggedin(bl, screenname)) {
-    m=owl_malloc(sizeof(owl_message));
+    m=g_new(owl_message, 1);
     owl_message_create_aim(m,
 			   screenname,
 			   owl_global_get_aim_screenname(&g),
diff --git a/cmd.c b/cmd.c
index 25ac8be..7f88acb 100644
--- a/cmd.c
+++ b/cmd.c
@@ -49,7 +49,7 @@ void owl_cmddict_namelist_cleanup(owl_list *l)
 /* creates a new command alias */
 int owl_cmddict_add_alias(owl_cmddict *cd, const char *alias_from, const char *alias_to) {
   owl_cmd *cmd;
-  cmd = owl_malloc(sizeof(owl_cmd));
+  cmd = g_new(owl_cmd, 1);
   owl_cmd_create_alias(cmd, alias_from, alias_to);
   owl_perlconfig_new_command(cmd->name);
   owl_dict_insert_element(cd, cmd->name, cmd, (void (*)(void *))owl_cmd_delete);
@@ -57,7 +57,7 @@ int owl_cmddict_add_alias(owl_cmddict *cd, const char *alias_from, const char *a
 }
 
 int owl_cmddict_add_cmd(owl_cmddict *cd, const owl_cmd * cmd) {
-  owl_cmd * newcmd = owl_malloc(sizeof(owl_cmd));
+  owl_cmd * newcmd = g_new(owl_cmd, 1);
   if(owl_cmd_create_from_template(newcmd, cmd) < 0) {
     owl_free(newcmd);
     return -1;
diff --git a/commands.c b/commands.c
index 3071171..eff38dc 100644
--- a/commands.c
+++ b/commands.c
@@ -1327,7 +1327,7 @@ char *owl_command_smartnarrow(int argc, const char *const *argv, const char *buf
 
   char opt;
   int instance = 0, related = 0, i;
-  const char **tmp_argv = owl_malloc(sizeof(char *) * argc);
+  const char **tmp_argv = g_new(const char *, argc);
 
   static const struct option options[] = {
     {"instance", 0, 0, 'i'},
diff --git a/context.c b/context.c
index a222f64..f179306 100644
--- a/context.c
+++ b/context.c
@@ -10,8 +10,7 @@ owl_context *owl_context_new(int mode, void *data, const char *keymap, owl_windo
   owl_context *c;
   if (!(mode & OWL_CTX_MODE_BITS))
     mode |= OWL_CTX_INTERACTIVE;
-  c = owl_malloc(sizeof *c);
-  memset(c, 0, sizeof(*c));
+  c = g_new0(owl_context, 1);
   c->mode = mode;
   c->data = data;
   c->cursor = cursor ? g_object_ref(cursor) : NULL;
diff --git a/dict.c b/dict.c
index 17dd813..ebb8c85 100644
--- a/dict.c
+++ b/dict.c
@@ -16,7 +16,7 @@
 
 int owl_dict_create(owl_dict *d) {
   d->size=0;
-  d->els=owl_malloc(INITSIZE*sizeof(owl_dict_el));
+  d->els=g_new(owl_dict_el, INITSIZE);
   d->avail=INITSIZE;
   if (d->els==NULL) return(-1);
   return(0);
diff --git a/editwin.c b/editwin.c
index 5bc9d1f..4a98617 100644
--- a/editwin.c
+++ b/editwin.c
@@ -71,9 +71,7 @@ static void oe_window_resized(owl_window *w, owl_editwin *e);
 
 static owl_editwin *owl_editwin_allocate(void)
 {
-  owl_editwin *e;
-  e = owl_malloc(sizeof(owl_editwin));
-  memset(e, 0, sizeof(*e));
+  owl_editwin *e = g_new0(owl_editwin, 1);
   e->refcount = 1;
   return e;
 }
@@ -122,7 +120,7 @@ static void _owl_editwin_init(owl_editwin *e,
                               int style,
                               owl_history *hist)
 {
-  e->buff=owl_malloc(INCR);
+  e->buff=g_new(char, INCR);
   e->buff[0]='\0';
   e->bufflen=0;
   e->hist=hist;
@@ -302,7 +300,7 @@ void owl_editwin_clear(owl_editwin *e)
   char echochar=e->echochar;
 
   if (lock > 0) {
-    locktext = owl_malloc(lock+1);
+    locktext = g_new(char, lock+1);
     strncpy(locktext, e->buff, lock);
     locktext[lock] = 0;
   }
@@ -381,7 +379,7 @@ static void oe_restore_mark_only(owl_editwin *e, oe_excursion *x)
 /* External interface to oe_save_excursion */
 owl_editwin_excursion *owl_editwin_begin_excursion(owl_editwin *e)
 {
-  owl_editwin_excursion *x = owl_malloc(sizeof *x);
+  owl_editwin_excursion *x = g_new(owl_editwin_excursion, 1);
   oe_save_excursion(e, x);
   return x;
 }
@@ -746,7 +744,7 @@ void owl_editwin_transpose_chars(owl_editwin *e)
   if (start == NULL)
     return;
 
-  tmp = owl_malloc((end - start) + 1);
+  tmp = g_new(char, (end - start) + 1);
   tmp[(end - start)] = 0;
   memcpy(tmp, middle, end - middle);
   memcpy(tmp + (end - middle), start, middle - start);
@@ -1071,7 +1069,7 @@ static const char *oe_copy_buf(owl_editwin *e, const char *buf, int len)
   char *p;
   char *killbuf = owl_global_get_kill_buffer(&g);
 
-  p = owl_malloc(len + 1);
+  p = g_new(char, len + 1);
 
   if (p != NULL) {
     owl_free(killbuf);
@@ -1407,7 +1405,7 @@ static char *oe_chunk(owl_editwin *e, int start, int end)
 {
   char *p;
   
-  p = owl_malloc(end - start + 1);
+  p = g_new(char, end - start + 1);
   memcpy(p, e->buff + start, end - start);
   p[end - start] = 0;
 
diff --git a/filter.c b/filter.c
index 326bbc5..94e1394 100644
--- a/filter.c
+++ b/filter.c
@@ -18,7 +18,7 @@ owl_filter *owl_filter_new(const char *name, int argc, const char *const *argv)
 {
   owl_filter *f;
 
-  f = owl_malloc(sizeof(owl_filter));
+  f = g_new(owl_filter, 1);
 
   f->name=owl_strdup(name);
   f->fgcolor=OWL_COLOR_DEFAULT;
@@ -69,7 +69,7 @@ static owl_filterelement * owl_filter_parse_primitive_expression(int argc, const
 
   if(!argc) return NULL;
 
-  fe = owl_malloc(sizeof(owl_filterelement));
+  fe = g_new(owl_filterelement, 1);
   owl_filterelement_create(fe);
 
   if(!strcasecmp(argv[i], "(")) {
@@ -132,7 +132,7 @@ owl_filterelement * owl_filter_parse_expression(int argc, const char *const *arg
        strcasecmp(argv[i], "or")) break;
     op2 = owl_filter_parse_primitive_expression(argc-i-1, argv+i+1, &skip);
     if(!op2) goto err;
-    tmp = owl_malloc(sizeof(owl_filterelement));
+    tmp = g_new(owl_filterelement, 1);
     if(!strcasecmp(argv[i], "and")) {
       owl_filterelement_create_and(tmp, op1, op2);
     } else {
diff --git a/fmtext.c b/fmtext.c
index 70da2a8..9933dec 100644
--- a/fmtext.c
+++ b/fmtext.c
@@ -639,7 +639,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
       return;
     } else if (ptr[0]=='@') {
       /* add the text up to this point then deal with the stack */
-      buff=owl_malloc(ptr-txtptr+20);
+      buff=g_new(char, ptr-txtptr+20);
       strncpy(buff, txtptr, ptr-txtptr);
       buff[ptr-txtptr]='\0';
       owl_fmtext_append_attr(f, buff, curattrs, curcolor, OWL_COLOR_DEFAULT);
@@ -674,7 +674,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
 
       /* check what command we've got, push it on the stack, start
          using it, and continue ... unless it's a color command */
-      buff=owl_malloc(tmpptr-ptr+20);
+      buff=g_new(char, tmpptr-ptr+20);
       strncpy(buff, ptr, tmpptr-ptr);
       buff[tmpptr-ptr]='\0';
       if (!strcasecmp(buff, "@bold")) {
@@ -737,7 +737,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
              (txtptr[-1]=='{' && tmpptr[0]=='}'))) {
 
           /* grab the color name */
-          buff=owl_malloc(tmpptr-txtptr+20);
+          buff=g_new(char, tmpptr-txtptr+20);
           strncpy(buff, txtptr, tmpptr-txtptr);
           buff[tmpptr-txtptr]='\0';
 
@@ -764,7 +764,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
 
     } else if (ptr[0]=='}' || ptr[0]==']' || ptr[0]==')' || ptr[0]=='>') {
       /* add the text up to this point first */
-      buff=owl_malloc(ptr-txtptr+20);
+      buff=g_new(char, ptr-txtptr+20);
       strncpy(buff, txtptr, ptr-txtptr);
       buff[ptr-txtptr]='\0';
       owl_fmtext_append_attr(f, buff, curattrs, curcolor, OWL_COLOR_DEFAULT);
@@ -775,7 +775,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
 
       /* first, if the stack is empty we must bail (just print and go) */
       if (stacksize==0) {
-        buff=owl_malloc(5);
+        buff=g_new(char, 5);
         buff[0]=ptr[0];
         buff[1]='\0';
         owl_fmtext_append_attr(f, buff, curattrs, curcolor, OWL_COLOR_DEFAULT);
@@ -801,7 +801,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
         continue;
       } else {
         /* otherwise print and continue */
-        buff=owl_malloc(5);
+        buff=g_new(char, 5);
         buff[0]=ptr[0];
         buff[1]='\0';
         owl_fmtext_append_attr(f, buff, curattrs, curcolor, OWL_COLOR_DEFAULT);
@@ -811,7 +811,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
       }
     } else {
       /* we've found an unattached opener, print everything and move on */
-      buff=owl_malloc(ptr-txtptr+20);
+      buff=g_new(char, ptr-txtptr+20);
       strncpy(buff, txtptr, ptr-txtptr+1);
       buff[ptr-txtptr+1]='\0';
       owl_fmtext_append_attr(f, buff, curattrs, curcolor, OWL_COLOR_DEFAULT);
@@ -863,9 +863,9 @@ void owl_fmtext_init_colorpair_mgr(owl_colorpair_mgr *cpmgr)
   /* This could be a bitarray if we wanted to save memory. */
   short i;
   /* The test is <= because we allocate COLORS+1 entries. */
-  cpmgr->pairs = owl_malloc((COLORS+1) * sizeof(short*));
+  cpmgr->pairs = g_new(short *, COLORS + 1);
   for(i = 0; i <= COLORS; i++) {
-    cpmgr->pairs[i] = owl_malloc((COLORS+1) * sizeof(short));
+    cpmgr->pairs[i] = g_new(short, COLORS + 1);
   }
   owl_fmtext_reset_colorpairs(cpmgr);
 }
diff --git a/functions.c b/functions.c
index fbc2bff..2e15e31 100644
--- a/functions.c
+++ b/functions.c
@@ -233,7 +233,7 @@ void owl_function_adminmsg(const char *header, const char *body)
 {
   owl_message *m;
 
-  m=owl_malloc(sizeof(owl_message));
+  m=g_new(owl_message, 1);
   owl_message_create_admin(m, header, body);
   
   /* add it to the global list and current view */
@@ -256,7 +256,7 @@ owl_message *owl_function_make_outgoing_zephyr(const owl_zwrite *z)
   owl_message *m;
 
   /* create the message */
-  m=owl_malloc(sizeof(owl_message));
+  m=g_new(owl_message, 1);
   owl_message_create_from_zwrite(m, z, owl_zwrite_get_message(z));
 
   return(m);
@@ -274,7 +274,7 @@ owl_message *owl_function_make_outgoing_aim(const char *body, const char *to)
   /* error if we're not logged into aim */
   if (!owl_global_is_aimloggedin(&g)) return(NULL);
   
-  m=owl_malloc(sizeof(owl_message));
+  m=g_new(owl_message, 1);
   owl_message_create_aim(m,
 			 owl_global_get_aim_screenname(&g),
 			 to,
@@ -293,7 +293,7 @@ owl_message *owl_function_make_outgoing_loopback(const char *body)
   owl_message *m;
 
   /* create the message */
-  m=owl_malloc(sizeof(owl_message));
+  m=g_new(owl_message, 1);
   owl_message_create_loopback(m, body);
   owl_message_set_direction_out(m);
 
@@ -552,7 +552,7 @@ void owl_function_loopwrite(const char *msg)
 
   /* create a message and put it on the message queue.  This simulates
    * an incoming message */
-  min=owl_malloc(sizeof(owl_message));
+  min=g_new(owl_message, 1);
   mout=owl_function_make_outgoing_loopback(msg);
 
   if (owl_global_is_displayoutgoing(&g)) {
@@ -3456,7 +3456,7 @@ void owl_function_zephyr_buddy_check(int notify)
   j = owl_list_get_size(&anyone);
   for (i = 0; i < j; i++) {
     user = owl_list_get_element(&anyone, i);
-    zald = owl_malloc(sizeof(ZAsyncLocateData_t));
+    zald = g_new(ZAsyncLocateData_t, 1);
     if (ZRequestLocations(zstr(user), zald, UNACKED, ZAUTH) == ZERR_NONE) {
       *zaldlist = g_list_append(*zaldlist, zald);
     } else {
diff --git a/global.c b/global.c
index 649d6e5..f4f4bf6 100644
--- a/global.c
+++ b/global.c
@@ -567,7 +567,7 @@ static void owl_global_delete_filter_ent(void *data)
 }
 
 void owl_global_add_filter(owl_global *g, owl_filter *f) {
-  owl_global_filter_ent *e = owl_malloc(sizeof *e);
+  owl_global_filter_ent *e = g_new(owl_global_filter_ent, 1);
   e->g = g;
   e->f = f;
 
diff --git a/keybinding.c b/keybinding.c
index 4a05252..d7ea059 100644
--- a/keybinding.c
+++ b/keybinding.c
@@ -44,7 +44,7 @@ int owl_keybinding_make_keys(owl_keybinding *kb, const char *keyseq)
     g_strfreev(ktokens);
     return(-1);
   }
-  kb->keys = owl_malloc(nktokens*sizeof(int));
+  kb->keys = g_new(int, nktokens);
   for (i=0; i<nktokens; i++) {
     kb->keys[i] = owl_keypress_fromstring(ktokens[i]);
     if (kb->keys[i] == ERR) {
diff --git a/keymap.c b/keymap.c
index da2e5ec..beaeba0 100644
--- a/keymap.c
+++ b/keymap.c
@@ -37,7 +37,7 @@ int owl_keymap_create_binding(owl_keymap *km, const char *keyseq, const char *co
   owl_keybinding *kb, *curkb;
   int i;
 
-  if ((kb = owl_malloc(sizeof(owl_keybinding))) == NULL) return(-1);
+  if ((kb = g_new(owl_keybinding, 1)) == NULL) return(-1);
   if (0 != owl_keybinding_init(kb, keyseq, command, function_fn, desc)) {
     owl_free(kb);
     return(-1);
@@ -62,7 +62,7 @@ int owl_keymap_remove_binding(owl_keymap *km, const char *keyseq)
   owl_keybinding *kb, *curkb;
   int i;
 
-  if ((kb = owl_malloc(sizeof(owl_keybinding))) == NULL) return(-1);
+  if ((kb = g_new(owl_keybinding, 1)) == NULL) return(-1);
   if (0 != owl_keybinding_make_keys(kb, keyseq)) {
     owl_free(kb);
     return(-1);
@@ -196,7 +196,7 @@ void owl_keyhandler_add_keymap(owl_keyhandler *kh, owl_keymap *km)
 owl_keymap *owl_keyhandler_create_and_add_keymap(owl_keyhandler *kh, const char *name, const char *desc, void (*default_fn)(owl_input), void (*prealways_fn)(owl_input), void (*postalways_fn)(owl_input))
 {
   owl_keymap *km;
-  km = owl_malloc(sizeof(owl_keymap));
+  km = g_new(owl_keymap, 1);
   if (!km) return NULL;
   owl_keymap_init(km, name, desc, default_fn, prealways_fn, postalways_fn);
   owl_keyhandler_add_keymap(kh, km);
diff --git a/list.c b/list.c
index ee23b14..5c624ba 100644
--- a/list.c
+++ b/list.c
@@ -7,7 +7,7 @@
 int owl_list_create(owl_list *l)
 {
   l->size=0;
-  l->list=owl_malloc(INITSIZE*sizeof(void *));
+  l->list=g_new(void *, INITSIZE);
   l->avail=INITSIZE;
   if (l->list==NULL) return(-1);
   return(0);
diff --git a/logging.c b/logging.c
index 90a0453..9455ea0 100644
--- a/logging.c
+++ b/logging.c
@@ -181,7 +181,7 @@ void owl_log_outgoing_zephyr_error(const owl_zwrite *zw, const char *text)
   /* create a present message so we can pass it to
    * owl_log_shouldlog_message(void)
    */
-  m = owl_malloc(sizeof(owl_message));
+  m = g_new(owl_message, 1);
   owl_message_create_from_zwrite(m, zw, text);
   if (!owl_log_shouldlog_message(m)) {
     owl_message_delete(m);
diff --git a/message.c b/message.c
index f217a77..1345153 100644
--- a/message.c
+++ b/message.c
@@ -74,7 +74,7 @@ void owl_message_set_attribute(owl_message *m, const char *attrname, const char
   }
 
   if(pair ==  NULL) {
-    pair = owl_malloc(sizeof(owl_pair));
+    pair = g_new(owl_pair, 1);
     owl_pair_create(pair, attrname, NULL);
     owl_list_append_element(&(m->attributes), pair);
   }
diff --git a/perlconfig.c b/perlconfig.c
index cb2a851..1f0845d 100644
--- a/perlconfig.c
+++ b/perlconfig.c
@@ -192,7 +192,7 @@ owl_message * owl_perlconfig_hashref2message(SV *msg)
 
   hash = (HV*)SvRV(msg);
 
-  m = owl_malloc(sizeof(owl_message));
+  m = g_new(owl_message, 1);
   owl_message_init(m);
 
   hv_iterinit(hash);
diff --git a/perlglue.xs b/perlglue.xs
index 60e9eb8..573c565 100644
--- a/perlglue.xs
+++ b/perlglue.xs
@@ -42,7 +42,7 @@ command(cmd, ...)
 		if (items == 1) {
 			rv = owl_function_command(cmd);
 		} else {
-			argv = owl_malloc((items + 1) * sizeof *argv);
+			argv = g_new(const char *, items);
 			argv[0] = cmd;
 			for(i = 1; i < items; i++) {
 				argv[i] = SvPV_nolen(ST(i));
@@ -286,7 +286,7 @@ create_style(name, object)
 		owl_style *s;
      CODE:
 	{
-		s = owl_malloc(sizeof(owl_style));
+		s = g_new(owl_style, 1);
 		owl_style_create_perl(s, name, newSVsv(object));
 		owl_global_add_style(&g, s);
 	}
diff --git a/popexec.c b/popexec.c
index 2a5344e..8eef408 100644
--- a/popexec.c
+++ b/popexec.c
@@ -21,7 +21,7 @@ owl_popexec *owl_popexec_new(const char *command)
     return NULL;
   }
 
-  pe = owl_malloc(sizeof(owl_popexec));
+  pe = g_new(owl_popexec, 1);
   if (!pe) return NULL;
   pe->winactive=0;
   pe->pid=0;
@@ -125,7 +125,7 @@ void owl_popexec_inputhandler(const owl_io_dispatch *d, void *data)
 
   if (navail<=0) return;
   if (navail>1024) { navail = 1024; }
-  buf = owl_malloc(navail+1);
+  buf = g_new(char, navail+1);
   owl_function_debugmsg("about to read %d", navail);
   bread = read(d->fd, buf, navail);
   if (bread<0) {
diff --git a/popwin.c b/popwin.c
index 218aae6..fbb9be9 100644
--- a/popwin.c
+++ b/popwin.c
@@ -2,8 +2,7 @@
 
 owl_popwin *owl_popwin_new(void)
 {
-  owl_popwin *pw = owl_malloc(sizeof(owl_popwin));
-  memset(pw, 0, sizeof(*pw));
+  owl_popwin *pw = g_new0(owl_popwin, 1);
 
   pw->border = owl_window_new(NULL);
   pw->content = owl_window_new(pw->border);
diff --git a/select.c b/select.c
index 2a3ff0b..c76cf16 100644
--- a/select.c
+++ b/select.c
@@ -14,7 +14,7 @@ int _owl_select_timer_eq(const owl_timer *t1, const owl_timer *t2) {
 
 owl_timer *owl_select_add_timer(const char* name, int after, int interval, void (*cb)(owl_timer *, void *), void (*destroy)(owl_timer*), void *data)
 {
-  owl_timer *t = owl_malloc(sizeof(owl_timer));
+  owl_timer *t = g_new(owl_timer, 1);
   GList **timers = owl_global_get_timerlist(&g);
 
   t->time = time(NULL) + after;
@@ -158,7 +158,7 @@ void owl_select_io_dispatch_gc(void)
  */
 const owl_io_dispatch *owl_select_add_io_dispatch(int fd, int mode, void (*cb)(const owl_io_dispatch *, void *), void (*destroy)(const owl_io_dispatch *), void *data)
 {
-  owl_io_dispatch *d = owl_malloc(sizeof(owl_io_dispatch));
+  owl_io_dispatch *d = g_new(owl_io_dispatch, 1);
   owl_list *dl = owl_global_get_io_dispatch_list(&g);
 
   d->fd = fd;
@@ -298,7 +298,7 @@ void owl_select_handle_intr(sigset_t *restore)
 
 owl_ps_action *owl_select_add_pre_select_action(int (*cb)(owl_ps_action *, void *), void (*destroy)(owl_ps_action *), void *data)
 {
-  owl_ps_action *a = owl_malloc(sizeof(owl_ps_action));
+  owl_ps_action *a = g_new(owl_ps_action, 1);
   owl_list *psa_list = owl_global_get_psa_list(&g);
   a->needs_gc = 0;
   a->callback = cb;
diff --git a/text.c b/text.c
index c6693bb..9f4441f 100644
--- a/text.c
+++ b/text.c
@@ -52,7 +52,7 @@ char *owl_text_htmlstrip(const char *in)
   const char *ptr1, *end, *ptr2, *ptr3;
   char *out, *out2;
 
-  out=owl_malloc(strlen(in)+30);
+  out=g_new(char, strlen(in)+30);
   strcpy(out, "");
 
   ptr1=in;
@@ -155,7 +155,7 @@ char *owl_text_expand_tabs(const char *in)
     p = q;
   }
 
-  ret = owl_malloc(len + 1);
+  ret = g_new(char, len + 1);
 
   p = in;
   out = ret;
@@ -280,7 +280,7 @@ char *owl_text_substitute(const char *in, const char *from, const char *to)
   outlen = strlen(in)+1;
   tolen  = strlen(to);
   fromlen  = strlen(from);
-  out = owl_malloc(outlen);
+  out = g_new(char, outlen);
 
   while (in[inpos]) {
     if (!strncmp(in+inpos, from, fromlen)) {
@@ -334,7 +334,7 @@ char *owl_text_quote(const char *in, const char *toquote, const char *quotestr)
     if(strchr(toquote, in[i]) != NULL)
       escape++;
   }
-  out = owl_malloc(in_len + quotestr_len*escape+1);
+  out = g_new(char, in_len + quotestr_len*escape+1);
   for (i=0; i<in_len; i++) {
 
     /* check if it's a character that needs quoting */
diff --git a/util.c b/util.c
index 1d8f8b9..40de71c 100644
--- a/util.c
+++ b/util.c
@@ -40,7 +40,7 @@ char *owl_util_makepath(const char *in)
   char *out, user[MAXPATHLEN];
   struct passwd *pw;
 
-  out=owl_malloc(MAXPATHLEN+1);
+  out=g_new(char, MAXPATHLEN+1);
   out[0]='\0';
   j=strlen(in);
   x=0;
@@ -293,11 +293,6 @@ char *owl_util_minutes_to_timestr(int in)
 
 /* hooks for doing memory allocation et. al. in owl */
 
-void *owl_malloc(size_t size)
-{
-  return(g_malloc(size));
-}
-
 void owl_free(void *ptr)
 {
   g_free(ptr);
@@ -592,7 +587,7 @@ char * owl_strip_format_chars(const char *in)
   char *r;
   if (g_utf8_validate(in, -1, NULL)) {
     const char *s, *p;
-    r = owl_malloc(strlen(in)+1);
+    r = g_new(char, strlen(in)+1);
     r[0] = '\0';
     s = in;
     p = strchr(s, OWL_FMTEXT_UC_STARTBYTE_UTF8);
@@ -717,7 +712,7 @@ static int owl_getline_internal(char **s, FILE *fp, int newline)
 
 /* Read a line from fp, allocating memory to hold it, returning the number of
  * byte read.  *s should either be NULL or a pointer to memory allocated with
- * owl_malloc; it will be owl_realloc'd as appropriate.  The caller must
+ * g_malloc; it will be owl_realloc'd as appropriate.  The caller must
  * eventually free it.  (This is roughly the interface of getline in the gnu
  * libc).
  *
diff --git a/variable.c b/variable.c
index b549851..d24e0e5 100644
--- a/variable.c
+++ b/variable.c
@@ -478,7 +478,7 @@ int owl_variable_dict_setup(owl_vardict *vd) {
   owl_variable *var, *cur;
   if (owl_dict_create(vd)) return(-1);
   for (var = variables_to_init; var->name != NULL; var++) {
-    cur = owl_malloc(sizeof(owl_variable));
+    cur = g_new(owl_variable, 1);
     *cur = *var;
     /* strdup all the strings so we can delete them consistently. */
     cur->name = owl_strdup(var->name);
@@ -516,7 +516,7 @@ int owl_variable_dict_setup(owl_vardict *vd) {
 	cur->get_tostring_fn = owl_variable_bool_get_tostring_default;      
       if (!cur->delete_fn)
 	cur->delete_fn = owl_variable_delete_default;
-      cur->val = owl_malloc(sizeof(int));
+      cur->val = g_new(int, 1);
       cur->set_fn(cur, &cur->ival_default);
       break;
     case OWL_VARIABLE_INT:
@@ -532,7 +532,7 @@ int owl_variable_dict_setup(owl_vardict *vd) {
 	cur->get_tostring_fn = owl_variable_int_get_tostring_default;      
       if (!cur->delete_fn)
 	cur->delete_fn = owl_variable_delete_default;
-      cur->val = owl_malloc(sizeof(int));
+      cur->val = g_new(int, 1);
       cur->set_fn(cur, &cur->ival_default);
       break;
     default:
@@ -550,8 +550,7 @@ void owl_variable_dict_add_variable(owl_vardict * vardict,
 }
 
 owl_variable * owl_variable_newvar(const char *name, const char *summary, const char * description) {
-  owl_variable * var = owl_malloc(sizeof(owl_variable));
-  memset(var, 0, sizeof(owl_variable));
+  owl_variable * var = g_new0(owl_variable, 1);
   var->name = owl_strdup(name);
   var->summary = owl_strdup(summary);
   var->description = owl_strdup(description);
@@ -600,7 +599,7 @@ void owl_variable_dict_newvar_int(owl_vardict * vd, const char *name, const char
     var->get_fn = owl_variable_get_default;
     var->get_tostring_fn = owl_variable_int_get_tostring_default;
     var->delete_fn = owl_variable_delete_default;
-    var->val = owl_malloc(sizeof(int));
+    var->val = g_new(int, 1);
     var->set_fn(var, &initval);
     owl_variable_dict_add_variable(vd, var);
   }
@@ -621,7 +620,7 @@ void owl_variable_dict_newvar_bool(owl_vardict * vd, const char *name, const cha
     var->get_fn = owl_variable_get_default;
     var->get_tostring_fn = owl_variable_bool_get_tostring_default;
     var->delete_fn = owl_variable_delete_default;
-    var->val = owl_malloc(sizeof(int));
+    var->val = g_new(int, 1);
     var->set_fn(var, &initval);
     owl_variable_dict_add_variable(vd, var);
   }
diff --git a/viewwin.c b/viewwin.c
index a2b2b7e..76b606a 100644
--- a/viewwin.c
+++ b/viewwin.c
@@ -13,8 +13,7 @@ static void owl_viewwin_set_window(owl_viewwin *v, owl_window *w);
  */
 owl_viewwin *owl_viewwin_new_text(owl_window *win, const char *text)
 {
-  owl_viewwin *v = owl_malloc(sizeof(owl_viewwin));
-  memset(v, 0, sizeof(*v));
+    owl_viewwin *v = g_new0(owl_viewwin, 1);
   owl_fmtext_init_null(&(v->fmtext));
   if (text) {
     owl_fmtext_append_normal(&(v->fmtext), text);
@@ -37,8 +36,7 @@ owl_viewwin *owl_viewwin_new_text(owl_window *win, const char *text)
 owl_viewwin *owl_viewwin_new_fmtext(owl_window *win, const owl_fmtext *fmtext)
 {
   char *text;
-  owl_viewwin *v = owl_malloc(sizeof(owl_viewwin));
-  memset(v, 0, sizeof(*v));
+  owl_viewwin *v = g_new0(owl_viewwin, 1);
 
   owl_fmtext_copy(&(v->fmtext), fmtext);
   text = owl_fmtext_print_plain(fmtext);
@@ -196,7 +194,7 @@ char *owl_viewwin_command_start_search(owl_viewwin *v, int argc, const char *con
   owl_editwin_set_locktext(tw, (direction == OWL_DIRECTION_DOWNWARDS) ? "/" : "?");
   owl_editwin_insert_string(tw, buffstart);
 
-  data = owl_malloc(sizeof(owl_viewwin_search_data));
+  data = g_new(owl_viewwin_search_data, 1);
   data->v = v;
   data->direction = direction;
 
diff --git a/zephyr.c b/zephyr.c
index e22a02a..236ee0d 100644
--- a/zephyr.c
+++ b/zephyr.c
@@ -228,7 +228,7 @@ int owl_zephyr_loadsubs_helper(ZSubscription_t subs[], int count)
 
     owl_free(subs);
   } else {
-    owl_sub_list *s = owl_malloc(sizeof(owl_sub_list));
+    owl_sub_list *s = g_new(owl_sub_list, 1);
     s->subs = subs;
     s->nsubs = count;
     deferred_subs = g_list_append(deferred_subs, s);
@@ -258,7 +258,7 @@ int owl_zephyr_loadsubs(const char *filename, int error_on_nofile)
   int count;
   struct stat statbuff;
 
-  subs = owl_malloc(sizeof(ZSubscription_t) * subSize);
+  subs = g_new(ZSubscription_t, subSize);
   subsfile = owl_zephyr_dotfile(".zephyr.subs", filename);
 
   if (stat(subsfile, &statbuff) != 0) {
@@ -332,7 +332,7 @@ int owl_zephyr_loadbarnowldefaultsubs(void)
   int subSize = 10; /* Max Barnowl default subs we allow */
   int count, ret;
 
-  subs = owl_malloc(sizeof(ZSubscription_t) * subSize);
+  subs = g_new(ZSubscription_t, subSize);
   ZResetAuthentication();
   count=0;
 
@@ -376,7 +376,7 @@ int owl_zephyr_loadloginsubs(const char *filename)
   int count;
   struct stat statbuff;
 
-  subs = owl_malloc(numSubs * sizeof(ZSubscription_t));
+  subs = g_new(ZSubscription_t, numSubs);
   subsfile = owl_zephyr_dotfile(".anyone", filename);
 
   if (stat(subsfile, &statbuff) == -1) {
@@ -693,7 +693,7 @@ int send_zephyr(const char *opcode, const char *zsig, const char *class, const c
   if (opcode) notice.z_opcode=zstr(opcode);
 
   notice.z_message_len=strlen(zsig)+1+strlen(message);
-  notice.z_message=owl_malloc(notice.z_message_len+10);
+  notice.z_message=g_new(char, notice.z_message_len+10);
   strcpy(notice.z_message, zsig);
   memcpy(notice.z_message+strlen(zsig)+1, message, strlen(message));
 
@@ -1332,7 +1332,7 @@ void owl_zephyr_process_pseudologin(ZNotice_t *n)
           ret = ZGetLocations(&location, &numlocs);
           if (ret == ZERR_NONE) {
             /* Send a PSEUDO LOGIN! */
-            m = owl_malloc(sizeof(owl_message));
+            m = g_new(owl_message, 1);
             owl_message_create_pseudo_zlogin(m, 0, zald->user,
                                              location.host,
                                              location.time,
@@ -1345,7 +1345,7 @@ void owl_zephyr_process_pseudologin(ZNotice_t *n)
       } else if (numlocs == 0 && owl_zbuddylist_contains_user(zbl, zald->user)) {
         /* Send a PSEUDO LOGOUT! */
         if (notify) {
-          m = owl_malloc(sizeof(owl_message));
+          m = g_new(owl_message, 1);
           owl_message_create_pseudo_zlogin(m, 1, zald->user, "", "", "");
           owl_global_messagequeue_addmsg(&g, m);
         }
@@ -1420,7 +1420,7 @@ static int _owl_zephyr_process_events(void)
       }
 
       /* create the new message */
-      m=owl_malloc(sizeof(owl_message));
+      m=g_new(owl_message, 1);
       owl_message_create_from_znotice(m, &notice);
 
       owl_global_messagequeue_addmsg(&g, m);
diff --git a/zwrite.c b/zwrite.c
index fdd57d0..29a2b80 100644
--- a/zwrite.c
+++ b/zwrite.c
@@ -6,7 +6,7 @@
 
 owl_zwrite *owl_zwrite_new(const char *line)
 {
-  owl_zwrite *z = owl_malloc(sizeof *z);
+  owl_zwrite *z = g_new(owl_zwrite, 1);
   if (owl_zwrite_create_from_line(z, line) < 0) {
     owl_zwrite_delete(z);
     return NULL;
-- 
1.7.4


From 52262a716c1231bbe9054d4249e7f5534980ed8b Mon Sep 17 00:00:00 2001
From: Anders Kaseorg <andersk@mit.edu>
Date: Thu, 27 Aug 2009 00:52:03 -0400
Subject: [PATCH 2/5] Replace owl_realloc with g_renew.

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
---
 dict.c    |    2 +-
 editwin.c |    2 +-
 list.c    |    2 +-
 text.c    |    2 +-
 util.c    |   11 +++--------
 zephyr.c  |    4 ++--
 6 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/dict.c b/dict.c
index ebb8c85..2c2fe17 100644
--- a/dict.c
+++ b/dict.c
@@ -95,7 +95,7 @@ int owl_dict_insert_element(owl_dict *d, const char *k, void *v, void (*delete_o
   } else {
     if (d->size + 1 > d->avail) {
       int avail = MAX(d->avail * GROWBY, d->size + 1);
-      d->els = owl_realloc(d->els, avail * sizeof(owl_dict_el));
+      d->els = g_renew(owl_dict_el, d->els, avail);
       d->avail = avail;
       if (d->els==NULL) return(-1);
     }
diff --git a/editwin.c b/editwin.c
index 4a98617..f06977b 100644
--- a/editwin.c
+++ b/editwin.c
@@ -653,7 +653,7 @@ static int owl_editwin_replace_internal(owl_editwin *e, int replace, const char
   need = strlen(s) - free;
   if (need > 0) {
     size = e->allocated + need + INCR - (need % INCR);
-    e->buff = owl_realloc(e->buff, size);
+    e->buff = g_renew(char, e->buff, size);
     e->allocated = size;
   }
 
diff --git a/list.c b/list.c
index 5c624ba..d2deb42 100644
--- a/list.c
+++ b/list.c
@@ -25,7 +25,7 @@ static void owl_list_grow(owl_list *l, int n)
 
   if ((l->size+n) > l->avail) {
     int avail = MAX(l->avail * GROWBY, l->size + n);
-    ptr = owl_realloc(l->list, avail * sizeof(void *));
+    ptr = g_renew(void *, l->list, avail);
     if (ptr==NULL) abort();
     l->list=ptr;
     l->avail = avail;
diff --git a/text.c b/text.c
index 9f4441f..1723a04 100644
--- a/text.c
+++ b/text.c
@@ -285,7 +285,7 @@ char *owl_text_substitute(const char *in, const char *from, const char *to)
   while (in[inpos]) {
     if (!strncmp(in+inpos, from, fromlen)) {
       outlen += tolen;
-      out = owl_realloc(out, outlen);
+      out = g_renew(char, out, outlen);
       strcpy(out+outpos, to);
       inpos += fromlen;
       outpos += tolen;
diff --git a/util.c b/util.c
index 40de71c..dfab6b1 100644
--- a/util.c
+++ b/util.c
@@ -303,11 +303,6 @@ char *owl_strdup(const char *s1)
   return(g_strdup(s1));
 }
 
-void *owl_realloc(void *ptr, size_t size)
-{
-  return(g_realloc(ptr, size));
-}
-
 /* allocates memory and returns the string or null.
  * caller must free the string. 
  */
@@ -695,7 +690,7 @@ static int owl_getline_internal(char **s, FILE *fp, int newline)
     c = getc(fp);
     if ((target + 1) > size) {
       size += BUFSIZ;
-      *s = owl_realloc(*s, size);
+      *s = g_renew(char, *s, size);
     }
     if (c == EOF)
       break;
@@ -712,7 +707,7 @@ static int owl_getline_internal(char **s, FILE *fp, int newline)
 
 /* Read a line from fp, allocating memory to hold it, returning the number of
  * byte read.  *s should either be NULL or a pointer to memory allocated with
- * g_malloc; it will be owl_realloc'd as appropriate.  The caller must
+ * g_malloc; it will be g_renew'd as appropriate.  The caller must
  * eventually free it.  (This is roughly the interface of getline in the gnu
  * libc).
  *
@@ -738,7 +733,7 @@ char *owl_slurp(FILE *fp)
   int count;
 
   while (1) {
-    buf = owl_realloc(buf, size + BUFSIZ);
+    buf = g_renew(char, buf, size + BUFSIZ);
     p = &buf[size];
     size += BUFSIZ;
 
diff --git a/zephyr.c b/zephyr.c
index 236ee0d..d3fcc26 100644
--- a/zephyr.c
+++ b/zephyr.c
@@ -285,7 +285,7 @@ int owl_zephyr_loadsubs(const char *filename, int error_on_nofile)
 
     if (count >= subSize) {
       subSize *= 2;
-      subs = owl_realloc(subs, sizeof(ZSubscription_t) * subSize);
+      subs = g_renew(ZSubscription_t, subs, subSize);
     }
     
     /* add it to the list of subs */
@@ -396,7 +396,7 @@ int owl_zephyr_loadloginsubs(const char *filename)
 
       if (count == numSubs) {
         numSubs *= 2;
-        subs = owl_realloc(subs, numSubs * sizeof(ZSubscription_t));
+        subs = g_renew(ZSubscription_t, subs, numSubs);
       }
 
       subs[count].zsub_class = owl_strdup("login");
-- 
1.7.4


From 244dd172d7a74a085e63ea382e9c356bdc52a839 Mon Sep 17 00:00:00 2001
From: Anders Kaseorg <andersk@mit.edu>
Date: Thu, 27 Aug 2009 00:52:41 -0400
Subject: [PATCH 3/5] Replace owl_free with g_free.

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
---
 aim.c           |   18 ++++----
 buddy.c         |    4 +-
 cmd.c           |   28 ++++++------
 commands.c      |   34 +++++++-------
 context.c       |    4 +-
 dict.c          |    6 +-
 editwin.c       |   12 +++---
 filter.c        |   14 +++---
 filterelement.c |   10 ++--
 fmtext.c        |   28 ++++++------
 functions.c     |  134 +++++++++++++++++++++++++++---------------------------
 global.c        |   20 ++++----
 history.c       |    4 +-
 keybinding.c    |   10 ++--
 keymap.c        |   10 ++--
 list.c          |    2 +-
 logging.c       |   38 ++++++++--------
 message.c       |   46 +++++++++---------
 msgwin.c        |    4 +-
 owl.c           |    6 +-
 perlconfig.c    |   16 +++---
 perlglue.xs     |   22 +++++-----
 popexec.c       |    4 +-
 popwin.c        |    2 +-
 regex.c         |    6 +-
 select.c        |    8 ++--
 style.c         |    6 +-
 tester.c        |   24 +++++-----
 text.c          |   20 ++++----
 util.c          |   27 +++++-------
 variable.c      |   20 ++++----
 view.c          |    2 +-
 viewwin.c       |    6 +-
 zbuddylist.c    |   12 +++---
 zephyr.c        |   88 ++++++++++++++++++------------------
 zwrite.c        |   48 ++++++++++----------
 36 files changed, 369 insertions(+), 374 deletions(-)

diff --git a/aim.c b/aim.c
index 3ed92fb..55b066a 100644
--- a/aim.c
+++ b/aim.c
@@ -202,7 +202,7 @@ void owl_aim_successful_login(const char *screenname)
   owl_function_makemsg("%s logged in", screenname);
   buff=owl_sprintf("Logged in to AIM as %s", screenname);
   owl_function_adminmsg("", buff);
-  owl_free(buff);
+  g_free(buff);
 
   owl_function_debugmsg("Successful AIM login for %s", screenname);
 
@@ -291,7 +291,7 @@ static int owl_aim_do_send(const char *to, const char *msg, int flags)
 
   ret=aim_im_sendch1_ext(owl_global_get_aimsess(&g), &args);
 
-  owl_free(encoded);
+  g_free(encoded);
 
   return(ret);
 }
@@ -355,7 +355,7 @@ int owl_aim_set_awaymsg(const char *msg)
   aim_locate_setprofile(owl_global_get_aimsess(&g),
 			NULL, NULL, 0,
 			"us-ascii", foo, len);
-  owl_free(foo);
+  g_free(foo);
 
   /*
   aim_bos_setprofile(owl_global_get_aimsess(&g),
@@ -1053,9 +1053,9 @@ static int faimtest_parse_incoming_im_chan1(aim_session_t *sess, aim_conn_t *con
 			 0);
   if (args->icbmflags & AIM_IMFLAGS_AWAY) owl_message_set_attribute(m, "isauto", "");
   owl_global_messagequeue_addmsg(&g, m);
-  owl_free(stripmsg);
-  owl_free(wrapmsg);
-  owl_free(nz_screenname);
+  g_free(stripmsg);
+  g_free(wrapmsg);
+  g_free(nz_screenname);
 
   return(1);
 
@@ -1081,7 +1081,7 @@ static int faimtest_parse_incoming_im_chan1(aim_session_t *sess, aim_conn_t *con
     owl_function_debugmsg("faimtest_parse_incoming_im_chan1: icbm: their icon: iconstamp = %ld, iconlen = 0x%08x, iconsum = 0x%04x\n", args->iconstamp, args->iconlen, args->iconsum);
   }
 
-  owl_free(realmsg);
+  g_free(realmsg);
 
   return(1);
 }
@@ -1194,7 +1194,7 @@ static int faimtest_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...)
   
   owl_function_debugmsg("parse_oncoming sn: %s idle: %i", userinfo->sn, userinfo->idletime);
     
-  owl_free(nz_screenname);
+  g_free(nz_screenname);
   
   /*
     printf("%ld  %s is now online (flags: %04x = %s%s%s%s%s%s%s%s) (caps = %s = 0x%08lx)\n",
@@ -1226,7 +1226,7 @@ static int faimtest_parse_offgoing(aim_session_t *sess, aim_frame_t *fr, ...)
 
   nz_screenname=owl_aim_normalize_screenname(userinfo->sn);
   owl_buddylist_offgoing(owl_global_get_buddylist(&g), nz_screenname);
-  owl_free(nz_screenname);
+  g_free(nz_screenname);
 
   if (userinfo->present & AIM_USERINFO_PRESENT_IDLE) {
     owl_function_debugmsg("parse_offgoing sn: %s idle time %i", userinfo->sn, userinfo->idletime);
diff --git a/buddy.c b/buddy.c
index dd50eb4..25e4f70 100644
--- a/buddy.c
+++ b/buddy.c
@@ -65,11 +65,11 @@ int owl_buddy_get_idle_time(const owl_buddy *b)
 
 void owl_buddy_cleanup(owl_buddy *b)
 {
-  if (b->name) owl_free(b->name);
+  if (b->name) g_free(b->name);
 }
 
 void owl_buddy_delete(owl_buddy *b)
 {
   owl_buddy_cleanup(b);
-  owl_free(b);
+  g_free(b);
 }
diff --git a/cmd.c b/cmd.c
index 7f88acb..11ef248 100644
--- a/cmd.c
+++ b/cmd.c
@@ -43,7 +43,7 @@ const owl_cmd *owl_cmddict_find(const owl_cmddict *d, const char *name) {
 
 void owl_cmddict_namelist_cleanup(owl_list *l)
 {
-  owl_list_cleanup(l, owl_free);
+  owl_list_cleanup(l, g_free);
 }
 
 /* creates a new command alias */
@@ -59,7 +59,7 @@ int owl_cmddict_add_alias(owl_cmddict *cd, const char *alias_from, const char *a
 int owl_cmddict_add_cmd(owl_cmddict *cd, const owl_cmd * cmd) {
   owl_cmd * newcmd = g_new(owl_cmd, 1);
   if(owl_cmd_create_from_template(newcmd, cmd) < 0) {
-    owl_free(newcmd);
+    g_free(newcmd);
     return -1;
   }
   owl_perlconfig_new_command(cmd->name);
@@ -90,21 +90,21 @@ char *owl_cmddict_execute(const owl_cmddict *cd, const owl_context *ctx, const c
   tmpbuff=owl_strdup(cmdbuff);
   argv=owl_parseline(tmpbuff, &argc);
   if (argc < 0) {
-    owl_free(tmpbuff);
+    g_free(tmpbuff);
     owl_function_makemsg("Unbalanced quotes");
     return NULL;
   } 
   
   if (argc < 1) {
     owl_parse_delete(argv, argc);
-    owl_free(tmpbuff);
+    g_free(tmpbuff);
     return NULL;
   }
 
   retval = _owl_cmddict_execute(cd, ctx, strs(argv), argc, cmdbuff);
 
   owl_parse_delete(argv, argc);
-  owl_free(tmpbuff);
+  g_free(tmpbuff);
   return retval;
 }
 
@@ -152,18 +152,18 @@ int owl_cmd_create_alias(owl_cmd *cmd, const char *name, const char *aliased_to)
 
 void owl_cmd_cleanup(owl_cmd *cmd)
 {
-  if (cmd->name) owl_free(cmd->name);
-  if (cmd->summary) owl_free(cmd->summary);
-  if (cmd->usage) owl_free(cmd->usage);
-  if (cmd->description) owl_free(cmd->description);
-  if (cmd->cmd_aliased_to) owl_free(cmd->cmd_aliased_to);
+  if (cmd->name) g_free(cmd->name);
+  if (cmd->summary) g_free(cmd->summary);
+  if (cmd->usage) g_free(cmd->usage);
+  if (cmd->description) g_free(cmd->description);
+  if (cmd->cmd_aliased_to) g_free(cmd->cmd_aliased_to);
   if (cmd->cmd_perl) owl_perlconfig_cmd_cleanup(cmd);
 }
 
 void owl_cmd_delete(owl_cmd *cmd)
 {
   owl_cmd_cleanup(cmd);
-  owl_free(cmd);
+  g_free(cmd);
 }
 
 int owl_cmd_is_context_valid(const owl_cmd *cmd, const owl_context *ctx) { 
@@ -187,7 +187,7 @@ char *owl_cmd_execute(const owl_cmd *cmd, const owl_cmddict *cd, const owl_conte
       cmdbuffargs = skiptokens(cmdbuff, 1);
       newcmd = owl_sprintf("%s %s", cmd->cmd_aliased_to, cmdbuffargs);
       rv = owl_function_command(newcmd);
-      owl_free(newcmd);
+      g_free(newcmd);
     } 
     alias_recurse_depth--;
     return rv;
@@ -279,7 +279,7 @@ void owl_cmd_get_help(const owl_cmddict *d, const char *name, owl_fmtext *fm) {
     owl_fmtext_append_bold(fm, "\nSYNOPSIS\n");
     owl_fmtext_append_normal(fm, indent);
     owl_fmtext_append_normal(fm, "\n");
-    owl_free(indent);
+    g_free(indent);
   } else {
     owl_fmtext_append_bold(fm, "\nSYNOPSIS\n");
     owl_fmtext_append_normal(fm, OWL_TABSTR);
@@ -293,7 +293,7 @@ void owl_cmd_get_help(const owl_cmddict *d, const char *name, owl_fmtext *fm) {
     owl_fmtext_append_bold(fm, "\nDESCRIPTION\n");
     owl_fmtext_append_normal(fm, indent);
     owl_fmtext_append_normal(fm, "\n");
-    owl_free(indent);
+    g_free(indent);
   }
 
   owl_fmtext_append_normal(fm, "\n\n");  
diff --git a/commands.c b/commands.c
index eff38dc..48add27 100644
--- a/commands.c
+++ b/commands.c
@@ -1246,7 +1246,7 @@ char *owl_command_dump(int argc, const char *const *argv, const char *buff)
   }
   filename=owl_util_makepath(argv[1]);
   owl_function_dump(filename);
-  owl_free(filename);
+  g_free(filename);
   return(NULL);
 }
 
@@ -1287,7 +1287,7 @@ char *owl_command_next(int argc, const char *const *argv, const char *buff)
     }
   }
   owl_function_nextmsg_full(filter, skip_deleted, last_if_none);
-  if (filter) owl_free(filter);
+  if (filter) g_free(filter);
   return(NULL);
 }
 
@@ -1317,7 +1317,7 @@ char *owl_command_prev(int argc, const char *const *argv, const char *buff)
     }
   }
   owl_function_prevmsg_full(filter, skip_deleted, first_if_none);
-  if (filter) owl_free(filter);
+  if (filter) g_free(filter);
   return(NULL);
 }
 
@@ -1356,11 +1356,11 @@ char *owl_command_smartnarrow(int argc, const char *const *argv, const char *buf
 
   if (filtname) {
     owl_function_change_currentview_filter(filtname);
-    owl_free(filtname);
+    g_free(filtname);
   }
 
 done:
-  owl_free(tmp_argv);
+  g_free(tmp_argv);
 
   return NULL;
 }
@@ -1682,7 +1682,7 @@ char *owl_command_multi(int argc, const char *const *argv, const char *buff)
 	break;
       } else if (newbuff[i] != ' ') {
 	owl_function_makemsg("Invalid arguments to 'multi' command.");    
-	owl_free(newbuff);
+	g_free(newbuff);
 	return NULL;
       }
     }
@@ -1690,11 +1690,11 @@ char *owl_command_multi(int argc, const char *const *argv, const char *buff)
   commands = g_strsplit_set(newbuff, ";", 0);
   for (i = 0; commands[i] != NULL; i++) {
     if (lastrv) {
-      owl_free(lastrv);
+      g_free(lastrv);
     }
     lastrv = owl_function_command(commands[i]);
   }
-  owl_free(newbuff);
+  g_free(newbuff);
   g_strfreev(commands);
   return lastrv;
 }
@@ -2016,7 +2016,7 @@ char *owl_command_aimwrite(int argc, const char *const *argv, const char *buff)
     owl_function_aimwrite_setup(recip->str);
  err:
   g_string_free(recip, true);
-  owl_free(message);
+  g_free(message);
   return NULL;
 }
 
@@ -2103,7 +2103,7 @@ char *owl_command_view(int argc, const char *const *argv, const char *buff)
       char *foo;
       foo=owl_function_create_negative_filter(owl_view_get_filtname(owl_global_get_current_view(&g)));
       owl_function_change_currentview_filter(foo);
-      owl_free(foo);
+      g_free(foo);
       return(NULL);
     }
   }
@@ -2128,7 +2128,7 @@ char *owl_command_view(int argc, const char *const *argv, const char *buff)
     }
     owl_function_create_filter(argc, myargv);
     owl_function_change_currentview_filter("owl-dynamic");
-    owl_free(myargv);
+    g_free(myargv);
     return NULL;
   }
 
@@ -2263,7 +2263,7 @@ char *owl_command_viewclass(int argc, const char *const *argv, const char *buff)
   filtname = owl_function_classinstfilt(argv[1], NULL, owl_global_is_narrow_related(&g));
   if (filtname) {
     owl_function_change_currentview_filter(filtname);
-    owl_free(filtname);
+    g_free(filtname);
   }
   return NULL;
 }
@@ -2278,10 +2278,10 @@ char *owl_command_viewuser(int argc, const char *const *argv, const char *buff)
   }
   longuser = long_zuser(argv[1]);
   filtname = owl_function_zuserfilt(longuser);
-  owl_free(longuser);
+  g_free(longuser);
   if (filtname) {
     owl_function_change_currentview_filter(filtname);
-    owl_free(filtname);
+    g_free(filtname);
   }
   return NULL;
 }
@@ -2382,7 +2382,7 @@ char *owl_command_colorclass(int argc, const char *const *argv, const char *buff
   filtname=owl_function_classinstfilt(argv[1], NULL, owl_global_is_narrow_related(&g));
   if (filtname) {
     (void) owl_function_color_filter(filtname, argv[2], (argc == 4 ? argv[3] : NULL));
-    owl_free(filtname);
+    g_free(filtname);
   }
   return NULL;
 }
@@ -2485,7 +2485,7 @@ void owl_command_punt_unpunt(int argc, const char *const * argv, const char *buf
     }
     text = owl_string_build_quoted("filter %q", argv[1]);
     owl_function_punt(text, unpunt);
-    owl_free(text);
+    g_free(text);
   } else {
     owl_function_punt(skiptokens(buff, 1), unpunt);
   }
@@ -2575,7 +2575,7 @@ char *owl_command_aimlogin(int argc, const char *const *argv, const char *buff)
   /* if we get two arguments, ask for the password */
   if (argc==2) {
     owl_editwin *e = owl_function_start_password("AIM Password: ");
-    owl_editwin_set_cbdata(e, owl_strdup(argv[1]), owl_free);
+    owl_editwin_set_cbdata(e, owl_strdup(argv[1]), g_free);
     owl_editwin_set_callback(e, owl_callback_aimlogin);
     return(NULL);
   } else {
diff --git a/context.c b/context.c
index f179306..4aa4524 100644
--- a/context.c
+++ b/context.c
@@ -68,8 +68,8 @@ void owl_context_delete(owl_context *ctx)
 {
   if (ctx->cursor)
     g_object_unref(ctx->cursor);
-  owl_free(ctx->keymap);
+  g_free(ctx->keymap);
   if (ctx->delete_cb)
     ctx->delete_cb(ctx);
-  owl_free(ctx);
+  g_free(ctx);
 }
diff --git a/dict.c b/dict.c
index 2c2fe17..a90a37b 100644
--- a/dict.c
+++ b/dict.c
@@ -120,7 +120,7 @@ void *owl_dict_remove_element(owl_dict *d, const char *k) {
   void *v;
   found = _owl_dict_find_pos(d, k, &pos);
   if (!found) return(NULL);
-  owl_free(d->els[pos].k);
+  g_free(d->els[pos].k);
   v = d->els[pos].v;
   for (i=pos; i<d->size-1; i++) {
     d->els[i]=d->els[i+1];
@@ -135,9 +135,9 @@ void owl_dict_cleanup(owl_dict *d, void (*elefree)(void *))
   int i;
 
   for (i=0; i<d->size; i++) {
-    owl_free(d->els[i].k);
+    g_free(d->els[i].k);
     if (elefree) (elefree)(d->els[i].v);
   }
-  if (d->els) owl_free(d->els);
+  if (d->els) g_free(d->els);
 }
 
diff --git a/editwin.c b/editwin.c
index f06977b..9af78e8 100644
--- a/editwin.c
+++ b/editwin.c
@@ -83,14 +83,14 @@ static void _owl_editwin_delete(owl_editwin *e)
     g_signal_handler_disconnect(e->win, e->resized_id);
     g_object_unref(e->win);
   }
-  owl_free(e->buff);
+  g_free(e->buff);
   /* just in case someone forgot to clean up */
   while (e->excursions) {
     oe_release_excursion(e, e->excursions);
   }
   oe_destroy_cbdata(e);
 
-  owl_free(e);
+  g_free(e);
 }
 
 static inline void oe_set_index(owl_editwin *e, int index)
@@ -305,7 +305,7 @@ void owl_editwin_clear(owl_editwin *e)
     locktext[lock] = 0;
   }
 
-  owl_free(e->buff);
+  g_free(e->buff);
   _owl_editwin_init(e, e->winlines, e->wincols, e->style, e->hist);
 
   if (lock > 0) {
@@ -319,7 +319,7 @@ void owl_editwin_clear(owl_editwin *e)
   }
 
   if (locktext)
-    owl_free(locktext);
+    g_free(locktext);
 
   oe_set_index(e, lock);
 }
@@ -387,7 +387,7 @@ owl_editwin_excursion *owl_editwin_begin_excursion(owl_editwin *e)
 void owl_editwin_end_excursion(owl_editwin *e, owl_editwin_excursion *x)
 {
   oe_restore_excursion(e, x);
-  owl_free(x);
+  g_free(x);
 }
 
 static inline const char *oe_next_point(owl_editwin *e, const char *p)
@@ -1072,7 +1072,7 @@ static const char *oe_copy_buf(owl_editwin *e, const char *buf, int len)
   p = g_new(char, len + 1);
 
   if (p != NULL) {
-    owl_free(killbuf);
+    g_free(killbuf);
     memcpy(p, buf, len);
     p[len] = 0;
     owl_global_set_kill_buffer(&g,p);
diff --git a/filter.c b/filter.c
index 94e1394..deb7ecb 100644
--- a/filter.c
+++ b/filter.c
@@ -114,7 +114,7 @@ static owl_filterelement * owl_filter_parse_primitive_expression(int argc, const
   return fe;
 err:
   owl_filterelement_cleanup(fe);
-  owl_free(fe);
+  g_free(fe);
   return NULL;
 }
 
@@ -152,7 +152,7 @@ owl_filterelement * owl_filter_parse_expression(int argc, const char *const *arg
 err:
   if(op1) {
     owl_filterelement_cleanup(op1);
-    owl_free(op1);
+    g_free(op1);
   }
   return NULL;
 }
@@ -244,8 +244,8 @@ int owl_filter_equiv(const owl_filter *a, const owl_filter *b)
   ret = ret && !strcmp(owl_filter_get_name(a),
                        owl_filter_get_name(b));
 
-  owl_free(buffa);
-  owl_free(buffb);
+  g_free(buffa);
+  g_free(buffb);
 
   return ret;
 }
@@ -262,9 +262,9 @@ void owl_filter_delete(owl_filter *f)
     return;
   if (f->root) {
     owl_filterelement_cleanup(f->root);
-    owl_free(f->root);
+    g_free(f->root);
   }
   if (f->name)
-    owl_free(f->name);
-  owl_free(f);
+    g_free(f->name);
+  g_free(f);
 }
diff --git a/filterelement.c b/filterelement.c
index 79e1585..1035612 100644
--- a/filterelement.c
+++ b/filterelement.c
@@ -93,7 +93,7 @@ static int owl_filterelement_match_perl(const owl_filterelement *fe, const owl_m
     if (0 == strcmp(perlrv, "1")) {
       tf=1;
     }
-    owl_free(perlrv);
+    g_free(perlrv);
   }
   return tf;
 }
@@ -215,7 +215,7 @@ int owl_filterelement_create_re(owl_filterelement *fe, const char *field, const
   owl_filterelement_create(fe);
   fe->field=owl_strdup(field);
   if(owl_regex_create(&(fe->re), re)) {
-    owl_free(fe->field);
+    g_free(fe->field);
     fe->field = NULL;
     return (-1);
   }
@@ -324,14 +324,14 @@ int _owl_filterelement_is_toodeep(const owl_filterelement *fe, owl_dict *seen)
 
 void owl_filterelement_cleanup(owl_filterelement *fe)
 {
-  if (fe->field) owl_free(fe->field);
+  if (fe->field) g_free(fe->field);
   if (fe->left) {
     owl_filterelement_cleanup(fe->left);
-    owl_free(fe->left);
+    g_free(fe->left);
   }
   if (fe->right) {
     owl_filterelement_cleanup(fe->right);
-    owl_free(fe->right);
+    g_free(fe->right);
   }
   owl_regex_cleanup(&(fe->re));
 }
diff --git a/fmtext.c b/fmtext.c
index 9933dec..a763ff9 100644
--- a/fmtext.c
+++ b/fmtext.c
@@ -72,7 +72,7 @@ void owl_fmtext_appendf_normal(owl_fmtext *f, const char *fmt, ...)
   if (!buff)
     return;
   owl_fmtext_append_attr(f, buff, OWL_FMTEXT_ATTR_NONE, OWL_COLOR_DEFAULT, OWL_COLOR_DEFAULT);
-  owl_free(buff);
+  g_free(buff);
 }
 
 /* Append normal text 'text' to 'f' with color 'color' */
@@ -643,7 +643,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
       strncpy(buff, txtptr, ptr-txtptr);
       buff[ptr-txtptr]='\0';
       owl_fmtext_append_attr(f, buff, curattrs, curcolor, OWL_COLOR_DEFAULT);
-      owl_free(buff);
+      g_free(buff);
 
       /* update pointer to point at the @ */
       txtptr=ptr;
@@ -684,7 +684,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
         stacksize++;
         curattrs|=OWL_FMTEXT_ATTR_BOLD;
         txtptr+=6;
-        owl_free(buff);
+        g_free(buff);
         continue;
       } else if (!strcasecmp(buff, "@b")) {
         attrstack[stacksize]=OWL_FMTEXT_ATTR_BOLD;
@@ -693,7 +693,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
         stacksize++;
         curattrs|=OWL_FMTEXT_ATTR_BOLD;
         txtptr+=3;
-        owl_free(buff);
+        g_free(buff);
         continue;
       } else if (!strcasecmp(buff, "@i")) {
         attrstack[stacksize]=OWL_FMTEXT_ATTR_UNDERLINE;
@@ -702,7 +702,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
         stacksize++;
         curattrs|=OWL_FMTEXT_ATTR_UNDERLINE;
         txtptr+=3;
-        owl_free(buff);
+        g_free(buff);
         continue;
       } else if (!strcasecmp(buff, "@italic")) {
         attrstack[stacksize]=OWL_FMTEXT_ATTR_UNDERLINE;
@@ -711,7 +711,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
         stacksize++;
         curattrs|=OWL_FMTEXT_ATTR_UNDERLINE;
         txtptr+=8;
-        owl_free(buff);
+        g_free(buff);
         continue;
       } else if (!strcasecmp(buff, "@")) {
 	attrstack[stacksize]=OWL_FMTEXT_ATTR_NONE;
@@ -719,7 +719,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
 	colorstack[stacksize]=curcolor;
         stacksize++;
         txtptr+=2;
-        owl_free(buff);
+        g_free(buff);
         continue;
 
         /* if it's a color read the color, set the current color and
@@ -727,7 +727,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
       } else if (!strcasecmp(buff, "@color") 
                  && owl_global_get_hascolors(&g)
                  && owl_global_is_colorztext(&g)) {
-        owl_free(buff);
+        g_free(buff);
         txtptr+=7;
         tmpptr=strpbrk(txtptr, "@{[<()>]}");
         if (tmpptr &&
@@ -745,7 +745,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
           curcolor=owl_util_string_to_color(buff);
           if (curcolor == OWL_COLOR_INVALID)
 	      curcolor = OWL_COLOR_DEFAULT;
-          owl_free(buff);
+          g_free(buff);
           txtptr=tmpptr+1;
           continue;
 
@@ -768,7 +768,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
       strncpy(buff, txtptr, ptr-txtptr);
       buff[ptr-txtptr]='\0';
       owl_fmtext_append_attr(f, buff, curattrs, curcolor, OWL_COLOR_DEFAULT);
-      owl_free(buff);
+      g_free(buff);
 
       /* now deal with the closer */
       txtptr=ptr;
@@ -779,7 +779,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
         buff[0]=ptr[0];
         buff[1]='\0';
         owl_fmtext_append_attr(f, buff, curattrs, curcolor, OWL_COLOR_DEFAULT);
-        owl_free(buff);
+        g_free(buff);
         txtptr++;
         continue;
       }
@@ -805,7 +805,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
         buff[0]=ptr[0];
         buff[1]='\0';
         owl_fmtext_append_attr(f, buff, curattrs, curcolor, OWL_COLOR_DEFAULT);
-        owl_free(buff);
+        g_free(buff);
         txtptr++;
         continue;
       }
@@ -815,7 +815,7 @@ void owl_fmtext_append_ztext(owl_fmtext *f, const char *text)
       strncpy(buff, txtptr, ptr-txtptr+1);
       buff[ptr-txtptr+1]='\0';
       owl_fmtext_append_attr(f, buff, curattrs, curcolor, OWL_COLOR_DEFAULT);
-      owl_free(buff);
+      g_free(buff);
       txtptr=ptr+1;
       continue;
     }
@@ -839,7 +839,7 @@ void owl_fmtext_append_list(owl_fmtext *f, const owl_list *l, const char *join_w
       text = format_fn(elem);
       if (text) {
         owl_fmtext_append_normal(f, text);
-        owl_free(text);
+        g_free(text);
       }
     } else if (elem) {
       owl_fmtext_append_normal(f, elem);
diff --git a/functions.c b/functions.c
index 2e15e31..d04c721 100644
--- a/functions.c
+++ b/functions.c
@@ -31,7 +31,7 @@ void owl_function_command_norv(const char *cmdbuff)
 {
   char *rv;
   rv=owl_function_command(cmdbuff);
-  if (rv) owl_free(rv);
+  if (rv) g_free(rv);
 }
 
 void owl_function_command_alias(const char *alias_from, const char *alias_to)
@@ -88,7 +88,7 @@ void owl_function_show_styles(void) {
   owl_fmtext_append_list(&fm, &l, "\n", owl_function_style_describe);
   owl_fmtext_append_normal(&fm, "\n");
   owl_function_popless_fmtext(&fm);
-  owl_list_cleanup(&l, owl_free);
+  owl_list_cleanup(&l, g_free);
   owl_fmtext_cleanup(&fm);
 }
 
@@ -99,11 +99,11 @@ static void _owl_function_timer_append_fmtext(gpointer data, gpointer user_data)
                           timer->name ? timer->name : "(unnamed)",
                           (int)(timer->time - time(NULL)));
   owl_fmtext_append_normal(fm, str);
-  owl_free(str);
+  g_free(str);
   if (timer->interval) {
     str = owl_sprintf(", repeat every %d seconds", timer->interval);
     owl_fmtext_append_normal(fm, str);
-    owl_free(str);
+    g_free(str);
   }
   owl_fmtext_append_normal(fm, "\n");
 }
@@ -217,8 +217,8 @@ void owl_function_show_quickstart(void)
         if (perlquickstart) {
             char *result = owl_sprintf("%s%s", message, perlquickstart);
             owl_function_adminmsg("BarnOwl Quickstart", result);
-            owl_free(result);
-            owl_free(perlquickstart);
+            g_free(result);
+            g_free(perlquickstart);
             return;
         }
     }
@@ -312,7 +312,7 @@ void owl_function_start_edit_win(const char *line, void (*callback)(owl_editwin
   owl_editwin_set_dotsend(e);
   s = owl_sprintf("----> %s\n", line);
   owl_editwin_set_locktext(e, s);
-  owl_free(s);
+  g_free(s);
 
   owl_editwin_set_cbdata(e, data, cleanup);
   owl_editwin_set_callback(e, callback);
@@ -358,8 +358,8 @@ void owl_function_aimwrite_setup(const char *to)
   owl_function_start_edit_win(line,
                               &owl_callback_aimwrite,
                               owl_strdup(to),
-                              owl_free);
-  owl_free(line);
+                              g_free);
+  g_free(line);
 }
 
 void owl_function_loopwrite_setup(void)
@@ -446,11 +446,11 @@ void owl_function_zcrypt(owl_zwrite *z, const char *msg)
 
   rv = call_filter(zcrypt, argv, owl_zwrite_get_message(z), &cryptmsg, &status);
 
-  owl_free(zcrypt);
+  g_free(zcrypt);
 
   if (rv || status) {
-    if(cryptmsg) owl_free(cryptmsg);
-    owl_free(old_msg);
+    if(cryptmsg) g_free(cryptmsg);
+    g_free(old_msg);
     owl_function_error("Error in zcrypt, possibly no key found.  Message not sent.");
     owl_function_beep();
     return;
@@ -475,7 +475,7 @@ void owl_function_zcrypt(owl_zwrite *z, const char *msg)
   }
 
   /* free the zwrite */
-  owl_free(cryptmsg);
+  g_free(cryptmsg);
 }
 
 void owl_callback_aimwrite(owl_editwin *e) {
@@ -511,7 +511,7 @@ void owl_function_aimwrite(const char *to, const char *msg, bool unwrap)
     owl_function_error("Could not create outgoing AIM message");
   }
 
-  owl_free(format_msg);
+  g_free(format_msg);
 }
 
 void owl_function_send_aimawymsg(const char *to, const char *msg)
@@ -539,7 +539,7 @@ void owl_function_send_aimawymsg(const char *to, const char *msg)
   } else {
     owl_function_error("Could not create AIM message");
   }
-  owl_free(format_msg);
+  g_free(format_msg);
 }
 
 void owl_callback_loopwrite(owl_editwin *e) {
@@ -870,7 +870,7 @@ void owl_function_loadsubs(const char *file)
   } else {
     path = owl_util_makepath(file);
     ret=owl_zephyr_loadsubs(path, 1);
-    owl_free(path);
+    g_free(path);
   }
 
   /* for backwards compatibility for now */
@@ -992,7 +992,7 @@ void owl_function_quit(void)
 
   /* execute the commands in shutdown */
   ret = owl_perlconfig_execute("BarnOwl::Hooks::_shutdown();");
-  if (ret) owl_free(ret);
+  if (ret) g_free(ret);
 
   /* signal our child process, if any */
   if (owl_global_get_newmsgproc_pid(&g)) {
@@ -1326,7 +1326,7 @@ void owl_function_popless_file(const char *filename)
   owl_fmtext_init_null(&fm);
   while (owl_getline(&s, file))
     owl_fmtext_append_normal(&fm, s);
-  owl_free(s);
+  g_free(s);
 
   owl_function_popless_fmtext(&fm);
   owl_fmtext_cleanup(&fm);
@@ -1465,7 +1465,7 @@ void owl_function_info(void)
 	    tmpbuff[30]='\0';
 	    strcat(tmpbuff, "...");
 	  }
-	  owl_free(ptr);
+	  g_free(ptr);
 
 	  for (j=0; j<strlen(tmpbuff); j++) {
 	    if (tmpbuff[j]=='\n') tmpbuff[j]='~';
@@ -1609,7 +1609,7 @@ void owl_function_getsubs(void)
     owl_function_popless_text("Error getting subscriptions");
   }
 	   
-  owl_free(buff);
+  g_free(buff);
 }
 
 void owl_function_printallvars(void)
@@ -1882,7 +1882,7 @@ void owl_function_reply(int type, int enter)
     } else {
       owl_function_start_command(buff);
     }
-    owl_free(buff);
+    g_free(buff);
   }
 }
 
@@ -1899,8 +1899,8 @@ void owl_function_zlocate(int argc, const char *const *argv, int auth)
     ptr = long_zuser(argv[i]);
     result = owl_zephyr_zlocate(ptr, auth);
     owl_fmtext_append_normal(&fm, result);
-    owl_free(result);
-    owl_free(ptr);
+    g_free(result);
+    g_free(ptr);
   }
 
   owl_function_popless_fmtext(&fm);
@@ -1915,7 +1915,7 @@ void owl_callback_command(owl_editwin *e)
   rv = owl_function_command(line);
    if (rv) {
     owl_function_makemsg("%s", rv);
-    owl_free(rv);
+    g_free(rv);
   }
 }
 
@@ -2000,14 +2000,14 @@ char *owl_function_exec(int argc, const char *const *argv, const char *buff, int
     pclose(p);
     
     if (type == OWL_OUTPUT_RETURN) {
-      owl_free(newbuff);
+      g_free(newbuff);
       return out;
     } else if (type == OWL_OUTPUT_ADMINMSG) {
       owl_function_adminmsg(buff, out);
     }
-    owl_free(out);
+    g_free(out);
   }
-  owl_free(newbuff);
+  g_free(newbuff);
   return NULL;
 }
 
@@ -2037,7 +2037,7 @@ char *owl_function_perl(int argc, const char *const *argv, const char *buff, int
     } else if (type == OWL_OUTPUT_RETURN) {
       return perlout;
     }
-    owl_free(perlout);
+    g_free(perlout);
   }
   return NULL;
 }
@@ -2246,8 +2246,8 @@ void owl_function_show_filter(const char *name)
   tmp = owl_filter_print(f);
   buff = owl_sprintf("%s: %s", owl_filter_get_name(f), tmp);
   owl_function_popless_text(buff);
-  owl_free(buff);
-  owl_free(tmp);
+  g_free(buff);
+  g_free(tmp);
 }
 
 void owl_function_show_zpunts(void)
@@ -2271,7 +2271,7 @@ void owl_function_show_zpunts(void)
     owl_fmtext_append_normal(&fm, buff);
     tmp = owl_filter_print(f);
     owl_fmtext_append_normal(&fm, tmp);
-    owl_free(tmp);
+    g_free(tmp);
   }
   owl_function_popless_fmtext(&fm);
   owl_fmtext_cleanup(&fm);
@@ -2312,7 +2312,7 @@ char *owl_function_classinstfilt(const char *c, const char *i, int related)
   {
     char *temp = g_utf8_strdown(filtname, -1);
     if (temp) {
-      owl_free(filtname);
+      g_free(filtname);
       filtname = temp;
     }
   }
@@ -2340,15 +2340,15 @@ char *owl_function_classinstfilt(const char *c, const char *i, int related)
                               " and instance ^%q$",
                               tmpinstance);
   }
-  owl_free(tmpclass);
-  owl_free(tmpinstance);
+  g_free(tmpclass);
+  g_free(tmpinstance);
 
   f = owl_filter_new_fromstring(filtname, buf->str);
   g_string_free(buf, true);
   if (f == NULL) {
     /* Couldn't make a filter for some reason. Return NULL. */
     owl_function_error("Error creating filter '%s'", filtname);
-    owl_free(filtname);
+    g_free(filtname);
     filtname = NULL;
     goto done;
   }
@@ -2357,9 +2357,9 @@ char *owl_function_classinstfilt(const char *c, const char *i, int related)
   owl_global_add_filter(&g, f);
 
 done:
-  owl_free(class);
+  g_free(class);
   if (instance) {
-    owl_free(instance);
+    g_free(instance);
   }
   return(filtname);
 }
@@ -2379,7 +2379,7 @@ char *owl_function_zuserfilt(const char *longuser)
   /* name for the filter */
   shortuser = short_zuser(longuser);
   filtname = owl_sprintf("user-%s", shortuser);
-  owl_free(shortuser);
+  g_free(shortuser);
 
   /* if it already exists then go with it.  This lets users override */
   if (owl_global_get_filter(&g, filtname)) {
@@ -2393,15 +2393,15 @@ char *owl_function_zuserfilt(const char *longuser)
       "( ( direction ^in$ and sender ^%q$ ) or ( direction ^out$ and "
       "recipient ^%q$ ) ) ) or ( ( class ^login$ ) and ( sender ^%q$ ) )",
       esclonguser, esclonguser, esclonguser);
-  owl_free(esclonguser);
+  g_free(esclonguser);
 
   f = owl_filter_new_fromstring(filtname, argbuff);
-  owl_free(argbuff);
+  g_free(argbuff);
 
   if (f == NULL) {
     /* Couldn't make a filter for some reason. Return NULL. */
     owl_function_error("Error creating filter '%s'", filtname);
-    owl_free(filtname);
+    g_free(filtname);
     return NULL;
   }
 
@@ -2438,14 +2438,14 @@ char *owl_function_aimuserfilt(const char *user)
       "( type ^aim$ and ( ( sender ^%1$s$ and recipient ^%2$s$ ) or "
       "( sender ^%2$s$ and recipient ^%1$s$ ) ) )",
       escuser, owl_global_get_aim_screenname_for_filters(&g));
-  owl_free(escuser);
+  g_free(escuser);
 
   f = owl_filter_new_fromstring(filtname, argbuff);
-  owl_free(argbuff);
+  g_free(argbuff);
 
   if (f == NULL) {
     owl_function_error("Error creating filter '%s'", filtname);
-    owl_free(filtname);
+    g_free(filtname);
     return NULL;
   }
 
@@ -2472,14 +2472,14 @@ char *owl_function_typefilt(const char *type)
   esctype = owl_text_quote(type, OWL_REGEX_QUOTECHARS, OWL_REGEX_QUOTEWITH);
 
   argbuff = owl_string_build_quoted("type ^%q$", esctype);
-  owl_free(esctype);
+  g_free(esctype);
 
   f = owl_filter_new_fromstring(filtname, argbuff);
-  owl_free(argbuff);
+  g_free(argbuff);
 
   if (f == NULL) {
     owl_function_error("Error creating filter '%s'", filtname);
-    owl_free(filtname);
+    g_free(filtname);
     return NULL;
   }
 
@@ -2532,14 +2532,14 @@ static char *owl_function_smartfilter_cc(const owl_message *m) {
   ccs_quoted = owl_text_quote(ccs, OWL_REGEX_QUOTECHARS, OWL_REGEX_QUOTEWITH);
   owl_string_append_quoted_arg(buf, ccs_quoted);
   g_string_append_c(buf, '$');
-  owl_free(ccs_quoted);
+  g_free(ccs_quoted);
 
   f = owl_filter_new_fromstring(filtname, buf->str);
   g_string_free(buf, true);
 
   if (f == NULL) {
     owl_function_error("Error creating filter '%s'", filtname);
-    owl_free(filtname);
+    g_free(filtname);
     return NULL;
   }
 
@@ -2766,8 +2766,8 @@ void owl_function_show_colors(void)
     char* str2 = owl_sprintf("%i\n",i);
     owl_fmtext_append_normal(&fm,str1);
     owl_fmtext_append_normal_color(&fm, str2, i, OWL_COLOR_DEFAULT);
-    owl_free(str1);
-     owl_free(str2);
+    g_free(str1);
+     g_free(str2);
   }
   
   owl_function_popless_fmtext(&fm);
@@ -2789,14 +2789,14 @@ void owl_function_zpunt(const char *class, const char *inst, const char *recip,
   } else {
     quoted=owl_text_quote(class, OWL_REGEX_QUOTECHARS, OWL_REGEX_QUOTEWITH);
     owl_string_appendf_quoted(buf, "class ^(un)*%q(\\.d)*$", quoted);
-    owl_free(quoted);
+    g_free(quoted);
   }
   if (!strcmp(inst, "*")) {
     g_string_append(buf, " and instance .*");
   } else {
     quoted=owl_text_quote(inst, OWL_REGEX_QUOTECHARS, OWL_REGEX_QUOTEWITH);
     owl_string_appendf_quoted(buf, " and instance ^(un)*%q(\\.d)*$", quoted);
-    owl_free(quoted);
+    g_free(quoted);
   }
   if (!strcmp(recip, "*")) {
     /* g_string_append(buf, ""); */
@@ -2806,7 +2806,7 @@ void owl_function_zpunt(const char *class, const char *inst, const char *recip,
     }
     quoted=owl_text_quote(recip, OWL_REGEX_QUOTECHARS, OWL_REGEX_QUOTEWITH);
     owl_string_appendf_quoted(buf, " and recipient ^%q$", quoted);
-    owl_free(quoted);
+    g_free(quoted);
   }
 
   owl_function_punt(buf->str, direction);
@@ -3053,7 +3053,7 @@ void owl_function_buddylist(int aim, int zephyr, const char *filename)
 	timestr=owl_strdup("");
       }
       owl_fmtext_appendf_normal(&fm, "  %-20.20s %-12.12s\n", owl_buddy_get_name(b), timestr);
-      owl_free(timestr);
+      g_free(timestr);
     }
   }
 
@@ -3106,7 +3106,7 @@ void owl_function_buddylist(int aim, int zephyr, const char *filename)
                                         location[x].host,
                                         location[x].tty,
                                         location[x].time);
-              owl_free(tmp);
+              g_free(tmp);
             }
             if (numlocs>=200) {
               owl_fmtext_append_normal(&fm, "  Too many locations found for this user, truncating.\n");
@@ -3114,7 +3114,7 @@ void owl_function_buddylist(int aim, int zephyr, const char *filename)
           }
         }
       }
-      owl_list_cleanup(&anyone, owl_free);
+      owl_list_cleanup(&anyone, g_free);
     }
   }
 #endif
@@ -3124,7 +3124,7 @@ void owl_function_buddylist(int aim, int zephyr, const char *filename)
       char * perlblist = owl_perlconfig_execute("BarnOwl::Hooks::_get_blist()");
       if (perlblist) {
         owl_fmtext_append_ztext(&fm, perlblist);
-        owl_free(perlblist);
+        g_free(perlblist);
       }
     }
   }
@@ -3167,7 +3167,7 @@ void owl_function_dump(const char *filename)
     plaintext = owl_strip_format_chars(owl_message_get_text(m));
     if (plaintext) {
       fputs(plaintext, file);
-      owl_free(plaintext);
+      g_free(plaintext);
     }
   }
   fclose(file);
@@ -3290,7 +3290,7 @@ void owl_function_source(const char *filename)
     path = owl_util_makepath(filename);
   }
   file = fopen(path, "r");
-  owl_free(path);
+  g_free(path);
   if (!file) {
     if (!fail_silent) {
       owl_function_error("Error opening file: %s", filename);
@@ -3303,7 +3303,7 @@ void owl_function_source(const char *filename)
     owl_function_command(s);
   }
 
-  owl_free(s);
+  g_free(s);
   fclose(file);
 }
 
@@ -3376,7 +3376,7 @@ void owl_function_error(const char *fmt, ...)
     owl_function_makemsg("[Error] %s", buff);
   }
 
-  owl_free(buff);
+  g_free(buff);
 
   in_error--;
 }
@@ -3395,8 +3395,8 @@ void owl_function_log_err(const char *string)
 
   owl_errqueue_append_err(owl_global_get_errqueue(&g), buff);
 
-  owl_free(buff);
-  owl_free(date);
+  g_free(buff);
+  g_free(date);
 }
 
 void owl_function_showerrs(void)
@@ -3445,7 +3445,7 @@ void owl_function_zephyr_buddy_check(int notify)
   zaldptr = g_list_first(*zaldlist);
   while (zaldptr) {
     ZFreeALD(zaldptr->data);
-    owl_free(zaldptr->data);
+    g_free(zaldptr->data);
     zaldptr = g_list_next(zaldptr);
   }
   g_list_free(*zaldlist);
@@ -3460,11 +3460,11 @@ void owl_function_zephyr_buddy_check(int notify)
     if (ZRequestLocations(zstr(user), zald, UNACKED, ZAUTH) == ZERR_NONE) {
       *zaldlist = g_list_append(*zaldlist, zald);
     } else {
-      owl_free(zald);
+      g_free(zald);
     }
   }
 
-  owl_list_cleanup(&anyone, owl_free);
+  owl_list_cleanup(&anyone, g_free);
 #endif
 }
 
diff --git a/global.c b/global.c
index f4f4bf6..a4f5097 100644
--- a/global.c
+++ b/global.c
@@ -95,7 +95,7 @@ void owl_global_init(owl_global *g) {
   g->startupfile = NULL;
   cd = owl_sprintf("%s/%s", g->homedir, OWL_CONFIG_DIR);
   owl_global_set_confdir(g, cd);
-  owl_free(cd);
+  g_free(cd);
 
   owl_messagelist_create(&(g->msglist));
 
@@ -378,9 +378,9 @@ const char *owl_global_get_confdir(const owl_global *g) {
  * Setting this also sets startupfile to confdir/startup
  */
 void owl_global_set_confdir(owl_global *g, const char *cd) {
-  owl_free(g->confdir);
+  g_free(g->confdir);
   g->confdir = owl_strdup(cd);
-  owl_free(g->startupfile);
+  g_free(g->startupfile);
   g->startupfile = owl_sprintf("%s/startup", cd);
 }
 
@@ -527,7 +527,7 @@ void owl_global_set_curmsg_vert_offset(owl_global *g, int i) {
 /* startup args */
 
 void owl_global_set_startupargs(owl_global *g, int argc, char **argv) {
-  if (g->startupargs) owl_free(g->startupargs);
+  if (g->startupargs) g_free(g->startupargs);
   g->startupargs = g_strjoinv(" ", argv);
 }
 
@@ -563,7 +563,7 @@ static void owl_global_delete_filter_ent(void *data)
   owl_global_filter_ent *e = data;
   e->g->filterlist = g_list_remove(e->g->filterlist, e->f);
   owl_filter_delete(e->f);
-  owl_free(e);
+  g_free(e);
 }
 
 void owl_global_add_filter(owl_global *g, owl_filter *f) {
@@ -698,12 +698,12 @@ void owl_global_set_aimloggedin(owl_global *g, const char *screenname)
 {
   char *sn_escaped;
   g->aim_loggedin=1;
-  if (g->aim_screenname) owl_free(g->aim_screenname);
-  if (g->aim_screenname_for_filters) owl_free(g->aim_screenname_for_filters);
+  if (g->aim_screenname) g_free(g->aim_screenname);
+  if (g->aim_screenname_for_filters) g_free(g->aim_screenname_for_filters);
   g->aim_screenname=owl_strdup(screenname);
   sn_escaped = owl_text_quote(screenname, OWL_REGEX_QUOTECHARS, OWL_REGEX_QUOTEWITH);
   g->aim_screenname_for_filters = owl_arg_quote(sn_escaped);
-  owl_free(sn_escaped);
+  g_free(sn_escaped);
 }
 
 void owl_global_set_aimnologgedin(owl_global *g)
@@ -966,12 +966,12 @@ FILE *owl_global_get_debug_file_handle(owl_global *g) {
 
     path = owl_sprintf("%s.%d", filename, getpid());
     fd = open(path, O_CREAT|O_WRONLY|O_EXCL, 0600);
-    owl_free(path);
+    g_free(path);
 
     if (fd >= 0)
       g->debug_file = fdopen(fd, "a");
 
-    owl_free(open_file);
+    g_free(open_file);
     open_file = owl_strdup(filename);
   }
   return g->debug_file;
diff --git a/history.c b/history.c
index 9d45e01..d3c6695 100644
--- a/history.c
+++ b/history.c
@@ -52,7 +52,7 @@ void owl_history_store(owl_history *h, const char *line)
 
   /* if partial is set, remove the first entry first */
   if (h->partial) {
-    owl_free(owl_list_get_element(&(h->hist), 0));
+    g_free(owl_list_get_element(&(h->hist), 0));
     owl_list_remove_element(&(h->hist), 0);
   }
 
@@ -63,7 +63,7 @@ void owl_history_store(owl_history *h, const char *line)
 
   /* if we've reached the max history size, pop off the last element */
   if (size>OWL_HISTORYSIZE) {
-    owl_free(owl_list_get_element(&(h->hist), size-1));
+    g_free(owl_list_get_element(&(h->hist), size-1));
     owl_list_remove_element(&(h->hist), size-1);
   }
 
diff --git a/keybinding.c b/keybinding.c
index d7ea059..20da44f 100644
--- a/keybinding.c
+++ b/keybinding.c
@@ -49,7 +49,7 @@ int owl_keybinding_make_keys(owl_keybinding *kb, const char *keyseq)
     kb->keys[i] = owl_keypress_fromstring(ktokens[i]);
     if (kb->keys[i] == ERR) {
       g_strfreev(ktokens);
-      owl_free(kb->keys);
+      g_free(kb->keys);
       return(-1);
     }
   }
@@ -61,16 +61,16 @@ int owl_keybinding_make_keys(owl_keybinding *kb, const char *keyseq)
 /* Releases data associated with a keybinding */
 void owl_keybinding_cleanup(owl_keybinding *kb)
 {
-  if (kb->keys) owl_free(kb->keys);
-  if (kb->desc) owl_free(kb->desc);
-  if (kb->command) owl_free(kb->command);
+  if (kb->keys) g_free(kb->keys);
+  if (kb->desc) g_free(kb->desc);
+  if (kb->command) g_free(kb->command);
 }
 
 /* Releases data associated with a keybinding, and the kb itself */
 void owl_keybinding_delete(owl_keybinding *kb)
 {
   owl_keybinding_cleanup(kb);
-  owl_free(kb);
+  g_free(kb);
 }
 
 /* executes a keybinding */
diff --git a/keymap.c b/keymap.c
index beaeba0..7dfb3a5 100644
--- a/keymap.c
+++ b/keymap.c
@@ -21,8 +21,8 @@ int owl_keymap_init(owl_keymap *km, const char *name, const char *desc, void (*d
 /* note that this will free the memory for the bindings! */
 void owl_keymap_cleanup(owl_keymap *km)
 {
-  owl_free(km->name);
-  owl_free(km->desc);
+  g_free(km->name);
+  g_free(km->desc);
   owl_list_cleanup(&km->bindings, (void (*)(void *))owl_keybinding_delete);
 }
 
@@ -39,7 +39,7 @@ int owl_keymap_create_binding(owl_keymap *km, const char *keyseq, const char *co
 
   if ((kb = g_new(owl_keybinding, 1)) == NULL) return(-1);
   if (0 != owl_keybinding_init(kb, keyseq, command, function_fn, desc)) {
-    owl_free(kb);
+    g_free(kb);
     return(-1);
   }
   /* see if another matching binding, and if so remove it.
@@ -64,7 +64,7 @@ int owl_keymap_remove_binding(owl_keymap *km, const char *keyseq)
 
   if ((kb = g_new(owl_keybinding, 1)) == NULL) return(-1);
   if (0 != owl_keybinding_make_keys(kb, keyseq)) {
-    owl_free(kb);
+    g_free(kb);
     return(-1);
   }
 
@@ -224,7 +224,7 @@ void owl_keyhandler_get_keymap_names(const owl_keyhandler *kh, owl_list *l)
 
 void owl_keyhandler_keymap_namelist_cleanup(owl_list *l)
 {
-  owl_list_cleanup(l, owl_free);
+  owl_list_cleanup(l, g_free);
 }
 
 
diff --git a/list.c b/list.c
index d2deb42..649c519 100644
--- a/list.c
+++ b/list.c
@@ -85,5 +85,5 @@ void owl_list_cleanup(owl_list *l, void (*elefree)(void *))
       (elefree)(l->list[i]);
     }
   }
-  owl_free(l->list);
+  g_free(l->list);
 }
diff --git a/logging.c b/logging.c
index 9455ea0..e68c24f 100644
--- a/logging.c
+++ b/logging.c
@@ -78,7 +78,7 @@ void owl_log_zephyr(const owl_message *m, FILE *file) {
     fprintf(file, "Time: %s Host: %s\n", owl_message_get_timestr(m), owl_message_get_hostname(m));
     fprintf(file, "From: %s <%s>\n\n", owl_message_get_zsig(m), tmp);
     fprintf(file, "%s\n\n", owl_message_get_body(m));
-    owl_free(tmp);
+    g_free(tmp);
 }
 
 void owl_log_aim(const owl_message *m, FILE *file) {
@@ -141,8 +141,8 @@ void owl_log_outgoing(const owl_message *m)
       snprintf(filename, MAXPATHLEN, "%s/%s", logpath, temp);
       owl_log_append(m, filename);
 
-      owl_free(temp);
-      owl_free(cc->data);
+      g_free(temp);
+      g_free(cc->data);
       cc = g_list_delete_link(cc, cc);
     }
 
@@ -155,19 +155,19 @@ void owl_log_outgoing(const owl_message *m)
     temp = owl_aim_normalize_screenname(owl_message_get_recipient(m));
     temp2 = g_utf8_strdown(temp,-1);
     to = owl_sprintf("aim:%s", temp2);
-    owl_free(temp2);
-    owl_free(temp);
+    g_free(temp2);
+    g_free(temp);
   } else {
     to = owl_strdup("loopback");
   }
 
   snprintf(filename, MAXPATHLEN, "%s/%s", logpath, to);
   owl_log_append(m, filename);
-  owl_free(to);
+  g_free(to);
 
   snprintf(filename, MAXPATHLEN, "%s/all", logpath);
   owl_log_append(m, filename);
-  owl_free(logpath);
+  g_free(logpath);
 }
 
 
@@ -199,8 +199,8 @@ void owl_log_outgoing_zephyr_error(const owl_zwrite *zw, const char *text)
   file=fopen(filename, "a");
   if (!file) {
     owl_function_error("Unable to open file for outgoing logging");
-    owl_free(logpath);
-    owl_free(tobuff);
+    g_free(logpath);
+    g_free(tobuff);
     return;
   }
   fprintf(file, "ERROR (owl): %s\n%s\n", tobuff, text);
@@ -210,11 +210,11 @@ void owl_log_outgoing_zephyr_error(const owl_zwrite *zw, const char *text)
   fclose(file);
 
   snprintf(filename, MAXPATHLEN, "%s/all", logpath);
-  owl_free(logpath);
+  g_free(logpath);
   file=fopen(filename, "a");
   if (!file) {
     owl_function_error("Unable to open file for outgoing logging");
-    owl_free(tobuff);
+    g_free(tobuff);
     return;
   }
   fprintf(file, "ERROR (owl): %s\n%s\n", tobuff, text);
@@ -223,7 +223,7 @@ void owl_log_outgoing_zephyr_error(const owl_zwrite *zw, const char *text)
   }
   fclose(file);
 
-  owl_free(tobuff);
+  g_free(tobuff);
 }
 
 void owl_log_incoming(const owl_message *m)
@@ -269,8 +269,8 @@ void owl_log_incoming(const owl_message *m)
     temp = owl_aim_normalize_screenname(owl_message_get_sender(m));
     normalto = g_utf8_strdown(temp, -1);
     from=frombuff=owl_sprintf("aim:%s", normalto);
-    owl_free(normalto);
-    owl_free(temp);
+    g_free(normalto);
+    g_free(temp);
   } else if (owl_message_is_type_loopback(m)) {
     from=frombuff=owl_strdup("loopback");
   } else if (owl_message_is_type_jabber(m)) {
@@ -301,7 +301,7 @@ void owl_log_incoming(const owl_message *m)
     if (strcmp(from, "weird")) {
       char* temp = g_utf8_strdown(frombuff, -1);
       if (temp) {
-	owl_free(frombuff);
+	g_free(frombuff);
 	from = frombuff = temp;
       }
     }
@@ -335,12 +335,12 @@ void owl_log_incoming(const owl_message *m)
         owl_log_append(m, filename);
       }
 
-      owl_free(temp);
-      owl_free(cc->data);
+      g_free(temp);
+      g_free(cc->data);
       cc = g_list_delete_link(cc, cc);
     }
   }
 
-  owl_free(frombuff);
-  owl_free(logpath);
+  g_free(frombuff);
+  g_free(logpath);
 }
diff --git a/message.c b/message.c
index 1345153..964e19e 100644
--- a/message.c
+++ b/message.c
@@ -67,7 +67,7 @@ void owl_message_set_attribute(owl_message *m, const char *attrname, const char
   for (i=0; i<j; i++) {
     p=owl_list_get_element(&(m->attributes), i);
     if (owl_pair_get_key(p) == attrname) {
-      owl_free(owl_pair_get_value(p));
+      g_free(owl_pair_get_value(p));
       pair = p;
       break;
     }
@@ -133,7 +133,7 @@ void owl_message_attributes_tofmtext(const owl_message *m, owl_fmtext *fm) {
         buff=owl_strdup("   <error>\n");
     }
     owl_fmtext_append_normal(fm, buff);
-    owl_free(buff);
+    g_free(buff);
   }
 }
 
@@ -610,12 +610,12 @@ GList *owl_message_get_cc_without_recipient(const owl_message *m)
     if (strcasecmp(shortuser, recip) != 0) {
       out = g_list_prepend(out, owl_strdup(user));
     }
-    owl_free(shortuser);
+    g_free(shortuser);
     user = strtok(NULL, " ");
   }
 
-  owl_free(recip);
-  owl_free(cc);
+  g_free(recip);
+  g_free(cc);
 
   return(out);
 }
@@ -748,15 +748,15 @@ void owl_message_save_ccs(owl_message *m) {
     while(cc != NULL) {
       /* Collapse any identical entries */
       while (cc->next && strcasecmp(cc->data, cc->next->data) == 0) {
-        owl_free(cc->data);
+        g_free(cc->data);
         cc = g_list_delete_link(cc, cc);
       }
 
       tmp = short_zuser(cc->data);
       g_string_append(recips, tmp);
 
-      owl_free(tmp);
-      owl_free(cc->data);
+      g_free(tmp);
+      g_free(cc->data);
       cc = g_list_delete_link(cc, cc);
 
       if (cc)
@@ -792,7 +792,7 @@ void owl_message_create_from_znotice(owl_message *m, const ZNotice_t *n)
   owl_zephyr_hackaway_cr(&(m->notice));
   
   /* save the time, we need to nuke the string saved by message_init */
-  if (m->timestr) owl_free(m->timestr);
+  if (m->timestr) g_free(m->timestr);
   m->time=n->z_time.tv_sec;
   m->timestr=owl_strdup(ctime(&(m->time)));
   m->timestr[strlen(m->timestr)-1]='\0';
@@ -820,11 +820,11 @@ void owl_message_create_from_znotice(owl_message *m, const ZNotice_t *n)
     if (!strcasecmp(n->z_opcode, "user_login") || !strcasecmp(n->z_opcode, "user_logout")) {
       tmp=owl_zephyr_get_field(n, 1);
       owl_message_set_attribute(m, "loginhost", tmp);
-      owl_free(tmp);
+      g_free(tmp);
 
       tmp=owl_zephyr_get_field(n, 3);
       owl_message_set_attribute(m, "logintty", tmp);
-      owl_free(tmp);
+      g_free(tmp);
     }
 
     if (!strcasecmp(n->z_opcode, "user_login")) {
@@ -867,11 +867,11 @@ void owl_message_create_from_znotice(owl_message *m, const ZNotice_t *n)
   if (owl_global_is_newlinestrip(&g)) {
     tmp2=owl_util_stripnewlines(tmp);
     owl_message_set_body(m, tmp2);
-    owl_free(tmp2);
+    g_free(tmp2);
   } else {
     owl_message_set_body(m, tmp);
   }
-  owl_free(tmp);
+  g_free(tmp);
 
   /* if zcrypt is enabled try to decrypt the message */
   if (owl_global_is_zcrypt(&g) && !strcasecmp(n->z_opcode, "crypt")) {
@@ -890,7 +890,7 @@ void owl_message_create_from_znotice(owl_message *m, const ZNotice_t *n)
     zcrypt = owl_sprintf("%s/zcrypt", owl_get_bindir());
 
     rv = call_filter(zcrypt, argv, owl_message_get_body(m), &out, &status);
-    owl_free(zcrypt);
+    g_free(zcrypt);
 
     if(!rv && !status) {
       int len = strlen(out);
@@ -898,9 +898,9 @@ void owl_message_create_from_znotice(owl_message *m, const ZNotice_t *n)
         out[len - 8] = 0;
       }
       owl_message_set_body(m, out);
-      owl_free(out);
+      g_free(out);
     } else if(out) {
-      owl_free(out);
+      g_free(out);
     }
   }
 
@@ -956,7 +956,7 @@ void owl_message_create_pseudo_zlogin(owl_message *m, int direction, const char
   /* save the hostname */
   owl_function_debugmsg("create_pseudo_login: host is %s", host ? host : "");
   owl_message_set_hostname(m, host ? host : "");
-  owl_free(longuser);
+  g_free(longuser);
 }
 
 void owl_message_create_from_zwrite(owl_message *m, const owl_zwrite *z, const char *body)
@@ -977,7 +977,7 @@ void owl_message_create_from_zwrite(owl_message *m, const owl_zwrite *z, const c
     char *longzuser = long_zuser(owl_zwrite_get_recip_n(z, 0));
     owl_message_set_recipient(m,
 			      longzuser); /* only gets the first user, must fix */
-    owl_free(longzuser);
+    g_free(longzuser);
   }
   owl_message_set_opcode(m, owl_zwrite_get_opcode(z));
   owl_message_set_realm(m, owl_zwrite_get_realm(z)); /* also a hack, but not here */
@@ -986,7 +986,7 @@ void owl_message_create_from_zwrite(owl_message *m, const owl_zwrite *z, const c
    * of it probably has a bug. */
   replyline = owl_zwrite_get_replyline(z);
   owl_message_set_zwriteline(m, replyline);
-  owl_free(replyline);
+  g_free(replyline);
 
   owl_message_set_body(m, body);
   owl_message_set_zsig(m, owl_zwrite_get_zsig(z));
@@ -1017,14 +1017,14 @@ void owl_message_cleanup(owl_message *m)
     ZFreeNotice(&(m->notice));
   }
 #endif
-  if (m->timestr) owl_free(m->timestr);
+  if (m->timestr) g_free(m->timestr);
 
   /* free all the attributes */
   j=owl_list_get_size(&(m->attributes));
   for (i=0; i<j; i++) {
     p=owl_list_get_element(&(m->attributes), i);
-    owl_free(owl_pair_get_value(p));
-    owl_free(p);
+    g_free(owl_pair_get_value(p));
+    g_free(p);
   }
 
   owl_list_cleanup(&(m->attributes), NULL);
@@ -1035,5 +1035,5 @@ void owl_message_cleanup(owl_message *m)
 void owl_message_delete(owl_message *m)
 {
   owl_message_cleanup(m);
-  owl_free(m);
+  g_free(m);
 }
diff --git a/msgwin.c b/msgwin.c
index 109a7da..ecc3454 100644
--- a/msgwin.c
+++ b/msgwin.c
@@ -28,14 +28,14 @@ void owl_msgwin_set_text(owl_msgwin *msgwin, const char *msg)
 
 void owl_msgwin_set_text_nocopy(owl_msgwin *msgwin, char *msg)
 {
-  owl_free(msgwin->msg);
+  g_free(msgwin->msg);
   msgwin->msg = msg;
   owl_window_dirty(msgwin->window);
 }
 
 void owl_msgwin_cleanup(owl_msgwin *msgwin)
 {
-  owl_free(msgwin->msg);
+  g_free(msgwin->msg);
   msgwin->msg = NULL;
   if (msgwin->window) {
     g_signal_handler_disconnect(msgwin->window, msgwin->redraw_id);
diff --git a/owl.c b/owl.c
index 1d195d2..e217eb2 100644
--- a/owl.c
+++ b/owl.c
@@ -436,7 +436,7 @@ void stderr_redirect_handler(const owl_io_dispatch *d, void *data)
   err = owl_sprintf("[stderr]\n%s", buf);
 
   owl_function_log_err(err);
-  owl_free(err);
+  g_free(err);
 }
 
 #endif /* OWL_STDERR_REDIR */
@@ -521,7 +521,7 @@ int main(int argc, char **argv, char **env)
   } else {
     char *tty = owl_util_get_default_tty();
     owl_global_set_tty(&g, tty);
-    owl_free(tty);
+    g_free(tty);
   }
 
   /* Initialize perl */
@@ -557,7 +557,7 @@ int main(int argc, char **argv, char **env)
   /* execute the startup function in the configfile */
   owl_function_debugmsg("startup: executing perl startup, if applicable");
   perlout = owl_perlconfig_execute("BarnOwl::Hooks::_startup();");
-  if (perlout) owl_free(perlout);
+  if (perlout) g_free(perlout);
 
   /* welcome message */
   owl_function_debugmsg("startup: creating splash message");
diff --git a/perlconfig.c b/perlconfig.c
index 1f0845d..8969ee5 100644
--- a/perlconfig.c
+++ b/perlconfig.c
@@ -30,7 +30,7 @@ SV *owl_new_sv(const char * str)
   } else {
     char *escape = owl_escape_highbit(str);
     owl_function_error("Internal error! Non-UTF-8 string encountered:\n%s", escape);
-    owl_free(escape);
+    g_free(escape);
   }
   return ret;
 }
@@ -68,7 +68,7 @@ HV *owl_new_hv(const owl_dict *d, SV *(*to_sv)(const void *))
     element = owl_dict_find_element(d, key);
     (void)hv_store(ret, key, strlen(key), to_sv(element), 0);
   }
-  owl_list_cleanup(&l, owl_free);
+  owl_list_cleanup(&l, g_free);
 
   return ret;
 }
@@ -105,7 +105,7 @@ SV *owl_perlconfig_message2hashref(const owl_message *m)
     for (i=0; i<j; i++) {
       ptr=owl_zephyr_get_field_as_utf8(owl_message_get_notice(m), i+1);
       av_push(av_zfields, owl_new_sv(ptr));
-      owl_free(ptr);
+      g_free(ptr);
     }
     (void)hv_store(h, "fields", strlen("fields"), newRV_noinc((SV*)av_zfields), 0);
 
@@ -158,8 +158,8 @@ SV *owl_perlconfig_message2hashref(const owl_message *m)
     stash = gv_stashpv("BarnOwl::Message", 1);
   }
   hr = sv_bless(hr,stash);
-  owl_free(utype);
-  owl_free(blessas);
+  g_free(utype);
+  g_free(blessas);
   return hr;
 }
 
@@ -406,7 +406,7 @@ char *owl_perlconfig_initperl(const char * file, int *Pargc, char ***Pargv, char
   path = owl_sprintf("%s/lib", owl_get_datadir());
   av_unshift(inc, 1);
   av_store(inc, 0, owl_new_sv(path));
-  owl_free(path);
+  g_free(path);
 
   eval_pv("use BarnOwl;", FALSE);
 
@@ -463,7 +463,7 @@ void owl_perlconfig_getmsg(const owl_message *m, const char *subname)
     ptr = owl_perlconfig_call_with_message(subname?subname
                                            :"BarnOwl::_receive_msg_legacy_wrap", m);
   }
-  if (ptr) owl_free(ptr);
+  if (ptr) g_free(ptr);
 }
 
 /* Called on all new messages; receivemsg is only called on incoming ones */
@@ -474,7 +474,7 @@ void owl_perlconfig_newmsg(const owl_message *m, const char *subname)
     ptr = owl_perlconfig_call_with_message(subname?subname
                                            :"BarnOwl::Hooks::_new_msg", m);
   }
-  if (ptr) owl_free(ptr);
+  if (ptr) g_free(ptr);
 }
 
 void owl_perlconfig_new_command(const char *name)
diff --git a/perlglue.xs b/perlglue.xs
index 573c565..e8208c4 100644
--- a/perlglue.xs
+++ b/perlglue.xs
@@ -48,14 +48,14 @@ command(cmd, ...)
 				argv[i] = SvPV_nolen(ST(i));
 			}
 			rv = owl_function_command_argv(argv, items);
-			owl_free(argv);
+			g_free(argv);
 		}
 		RETVAL = rv;
 	}
 	OUTPUT:
 		RETVAL
 	CLEANUP:
-		if (rv) owl_free(rv);
+		if (rv) g_free(rv);
 
 SV *
 getcurmsg()
@@ -112,7 +112,7 @@ ztext_stylestrip(ztext)
 	OUTPUT:
 		RETVAL
 	CLEANUP:
-		if (rv) owl_free(rv);
+		if (rv) g_free(rv);
 
 const utf8 *
 zephyr_smartstrip_user(in)
@@ -127,7 +127,7 @@ zephyr_smartstrip_user(in)
 	OUTPUT:
 		RETVAL
 	CLEANUP:
-		owl_free(rv);
+		g_free(rv);
 
 const utf8 *
 zephyr_getsubs()
@@ -139,7 +139,7 @@ zephyr_getsubs()
     OUTPUT:
 		RETVAL
     CLEANUP:
-		if (rv) owl_free(rv);
+		if (rv) g_free(rv);
 
 void
 queue_message(msg)
@@ -323,7 +323,7 @@ wordwrap(in, cols)
 		RETVAL
 	CLEANUP:
 		if (rv)
-			owl_free(rv);
+			g_free(rv);
 
 void
 remove_io_dispatch(fd)
@@ -341,7 +341,7 @@ all_filters()
 		owl_dict_get_keys(&g.filters, &fl);
 		RETVAL = owl_new_av(&fl, (SV*(*)(const void*))owl_new_sv);
 		sv_2mortal((SV*)RETVAL);
-		owl_list_cleanup(&fl, owl_free);
+		owl_list_cleanup(&fl, g_free);
 	}
 	OUTPUT:
 		RETVAL
@@ -360,7 +360,7 @@ all_styles()
 	OUTPUT:
 		RETVAL
 	CLEANUP:
-		owl_list_cleanup(&l, owl_free);
+		owl_list_cleanup(&l, g_free);
 
 
 AV*
@@ -377,7 +377,7 @@ all_variables()
 	OUTPUT:
 		RETVAL
 	CLEANUP:
-		owl_list_cleanup(&l, owl_free);
+		owl_list_cleanup(&l, g_free);
 
 
 AV*
@@ -395,7 +395,7 @@ all_keymaps()
 	OUTPUT:
 		RETVAL
 	CLEANUP:
-		owl_list_cleanup(&l, owl_free);
+		owl_list_cleanup(&l, g_free);
 
 void
 redisplay()
@@ -609,7 +609,7 @@ get_region()
 	OUTPUT:
 		RETVAL
 	CLEANUP:
-		owl_free(region);
+		g_free(region);
 
 SV *
 save_excursion(sub)
diff --git a/popexec.c b/popexec.c
index 8eef408..fe230ee 100644
--- a/popexec.c
+++ b/popexec.c
@@ -139,7 +139,7 @@ void owl_popexec_inputhandler(const owl_io_dispatch *d, void *data)
   if (pe->winactive) {
     owl_viewwin_append_text(pe->vwin, buf);
   }
-  owl_free(buf);
+  g_free(buf);
   
 }
 
@@ -178,6 +178,6 @@ void owl_popexec_unref(owl_popexec *pe)
   pe->refcount--;
   if (pe->refcount<=0) {
     owl_function_debugmsg("doing free of %p", pe);
-    owl_free(pe);
+    g_free(pe);
   }
 }
diff --git a/popwin.c b/popwin.c
index fbb9be9..1c0b363 100644
--- a/popwin.c
+++ b/popwin.c
@@ -91,7 +91,7 @@ void owl_popwin_delete(owl_popwin *pw)
   g_object_unref(pw->border);
   g_object_unref(pw->content);
 
-  owl_free(pw);
+  g_free(pw);
 }
 
 int owl_popwin_is_active(const owl_popwin *pw)
diff --git a/regex.c b/regex.c
index db0e22e..280642d 100644
--- a/regex.c
+++ b/regex.c
@@ -27,7 +27,7 @@ int owl_regex_create(owl_regex *re, const char *string)
   if (ret) {
     regerror(ret, NULL, buff1, LINE);
     owl_function_makemsg("Error in regular expression: %s", buff1);
-    owl_free(re->string);
+    g_free(re->string);
     re->string=NULL;
     return(-1);
   }
@@ -41,7 +41,7 @@ int owl_regex_create_quoted(owl_regex *re, const char *string)
   
   quoted=owl_text_quote(string, OWL_REGEX_QUOTECHARS, OWL_REGEX_QUOTEWITH);
   owl_regex_create(re, quoted);
-  owl_free(quoted);
+  g_free(quoted);
   return(0);
 }
 
@@ -86,7 +86,7 @@ void owl_regex_copy(const owl_regex *a, owl_regex *b)
 void owl_regex_cleanup(owl_regex *re)
 {
     if (re->string) {
-        owl_free(re->string);
+        g_free(re->string);
         regfree(&(re->re));
     }
 }
diff --git a/select.c b/select.c
index c76cf16..ef0f921 100644
--- a/select.c
+++ b/select.c
@@ -37,8 +37,8 @@ void owl_select_remove_timer(owl_timer *t)
     if(t->destroy) {
       t->destroy(t);
     }
-    owl_free(t->name);
-    owl_free(t);
+    g_free(t->name);
+    g_free(t);
   }
 }
 
@@ -127,7 +127,7 @@ void owl_select_remove_io_dispatch(const owl_io_dispatch *in)
         owl_list_remove_element(dl, elt);
         if (d->destroy)
           d->destroy(d);
-        owl_free(d);
+        g_free(d);
       }
     }
   }
@@ -322,7 +322,7 @@ void owl_select_psa_gc(void)
       if (a->destroy) {
         a->destroy(a);
       }
-      owl_free(a);
+      g_free(a);
     }
   }
 }
diff --git a/style.c b/style.c
index ffc04c9..1e47466 100644
--- a/style.c
+++ b/style.c
@@ -79,7 +79,7 @@ void owl_style_get_formattext(const owl_style *s, owl_fmtext *fm, const owl_mess
   owl_fmtext_expand_tabs(&with_tabs, fm, OWL_TAB_WIDTH - OWL_TAB);
   owl_fmtext_cleanup(&with_tabs);
 
-  owl_free(indent);
+  g_free(indent);
   if(sv)
     SvREFCNT_dec(sv);
 }
@@ -93,12 +93,12 @@ int owl_style_validate(const owl_style *s) {
 
 void owl_style_cleanup(owl_style *s)
 {
-  if (s->name) owl_free(s->name);
+  if (s->name) g_free(s->name);
   SvREFCNT_dec(s->perlobj);
 }
 
 void owl_style_delete(owl_style *s)
 {
   owl_style_cleanup(s);
-  owl_free(s);
+  g_free(s);
 }
diff --git a/tester.c b/tester.c
index ea8d11e..c9624b1 100644
--- a/tester.c
+++ b/tester.c
@@ -133,7 +133,7 @@ int owl_util_regtest(void)
     do {                                                 \
       char *__value = (expr);                            \
       FAIL_UNLESS((desc), !strcmp((expected), __value)); \
-      owl_free(__value);                                 \
+      g_free(__value);                                 \
     } while (0)
 
   CHECK_STR_AND_FREE("owl_util_substitute 1", "foo",
@@ -190,7 +190,7 @@ int owl_util_regtest(void)
       FAIL_UNLESS(desc " - parsed",			\
 		  !strcmp(__argv[0], unquoted));	\
       owl_parse_delete(__argv, __argc);			\
-      owl_free(__quoted);				\
+      g_free(__quoted);				\
     } while (0)
 
   CHECK_QUOTING("boring text", "mango", "mango");
@@ -257,7 +257,7 @@ int owl_dict_regtest(void) {
   FAIL_UNLESS("get_keys result val",0==strcmp("b",owl_list_get_element(&l,1)));
   FAIL_UNLESS("get_keys result val",0==strcmp("c",owl_list_get_element(&l,2)));
 
-  owl_list_cleanup(&l, owl_free);
+  owl_list_cleanup(&l, g_free);
   owl_dict_cleanup(&d, NULL);
 
   /*  if (numfailed) printf("*** WARNING: failures encountered with owl_dict\n"); */
@@ -556,14 +556,14 @@ int owl_fmtext_regtest(void) {
   str = owl_fmtext_print_plain(&fm2);
   FAIL_UNLESS("lines corrected truncated",
 	      str && !strcmp(str, "1\n2\n3\n"));
-  owl_free(str);
+  g_free(str);
 
   owl_fmtext_clear(&fm2);
   owl_fmtext_truncate_lines(&fm1, 1, 5, &fm2);
   str = owl_fmtext_print_plain(&fm2);
   FAIL_UNLESS("lines corrected truncated",
 	      str && !strcmp(str, "1\n2\n3\n4\n"));
-  owl_free(str);
+  g_free(str);
 
   /* Test owl_fmtext_truncate_cols. */
   owl_fmtext_clear(&fm1);
@@ -578,7 +578,7 @@ int owl_fmtext_regtest(void) {
               str && !strcmp(str, "567890"
                                   "56789\n"
                                   "567890"));
-  owl_free(str);
+  g_free(str);
 
   owl_fmtext_clear(&fm1);
   owl_fmtext_append_normal(&fm1, "12\t1234");
@@ -591,7 +591,7 @@ int owl_fmtext_regtest(void) {
   FAIL_UNLESS("columns correctly truncated",
               str && !strcmp(str, "    123456"
                                   "5678      "));
-  owl_free(str);
+  g_free(str);
 
   /* Test owl_fmtext_expand_tabs. */
   owl_fmtext_clear(&fm1);
@@ -604,7 +604,7 @@ int owl_fmtext_regtest(void) {
   FAIL_UNLESS("tabs corrected expanded",
               str && !strcmp(str, "12      1234567 1\n"
                                   "12345678        1"));
-  owl_free(str);
+  g_free(str);
 
   owl_fmtext_clear(&fm2);
   owl_fmtext_expand_tabs(&fm1, &fm2, 1);
@@ -613,7 +613,7 @@ int owl_fmtext_regtest(void) {
   FAIL_UNLESS("tabs corrected expanded",
               str && !strcmp(str, "12     1234567 1\n"
                                   "12345678       1"));
-  owl_free(str);
+  g_free(str);
 
   /* Test owl_fmtext_search. */
   owl_fmtext_clear(&fm1);
@@ -682,7 +682,7 @@ static int owl_smartfilter_test_equals(const char *filtname, const char *expecte
   }
 
  out:
-  owl_free(filtstr);
+  g_free(filtstr);
   return failed;
 }
 
@@ -707,7 +707,7 @@ static int owl_classinstfilt_test(const char *c, const char *i, int related, con
   }
   if (filtname)
     owl_global_remove_filter(&g, filtname);
-  owl_free(filtname);
+  g_free(filtname);
   return failed;
 }
 
@@ -731,7 +731,7 @@ static int owl_zuserfilt_test(const char *longuser, const char *expected) {
   }
   if (filtname)
     owl_global_remove_filter(&g, filtname);
-  owl_free(filtname);
+  g_free(filtname);
   return failed;
 }
 
diff --git a/text.c b/text.c
index 1723a04..efb9e2d 100644
--- a/text.c
+++ b/text.c
@@ -5,7 +5,7 @@
 #include "owl.h"
 
 /* Returns a copy of 'in' with each line indented 'n'
- * characters. Result must be freed with owl_free. */
+ * characters. Result must be freed with g_free. */
 char *owl_text_indent(const char *in, int n)
 {
   const char *ptr1, *ptr2, *last;
@@ -106,23 +106,23 @@ char *owl_text_htmlstrip(const char *in)
   }
 
   out2=owl_text_substitute(out, "&lt;", "<");
-  owl_free(out);
+  g_free(out);
   out=owl_text_substitute(out2, "&gt;", ">");
-  owl_free(out2);
+  g_free(out2);
   out2=owl_text_substitute(out, "&amp;", "&");
-  owl_free(out);
+  g_free(out);
   out=owl_text_substitute(out2, "&quot;", "\"");
-  owl_free(out2);
+  g_free(out2);
   out2=owl_text_substitute(out, "&nbsp;", " ");
-  owl_free(out);
+  g_free(out);
   out=owl_text_substitute(out2, "&ensp;", "  ");
-  owl_free(out2);
+  g_free(out2);
   out2=owl_text_substitute(out, "&emsp;", "   ");
-  owl_free(out);
+  g_free(out);
   out=owl_text_substitute(out2, "&endash;", "--");
-  owl_free(out2);
+  g_free(out2);
   out2=owl_text_substitute(out, "&emdash;", "---");
-  owl_free(out);
+  g_free(out);
 
   return(out2);
 }
diff --git a/util.c b/util.c
index dfab6b1..897a633 100644
--- a/util.c
+++ b/util.c
@@ -177,7 +177,7 @@ char **owl_parseline(const char *line, int *argc)
   if (quote!='\0') {
     /* TODO: when we move to requiring glib 2.22+, use
      * g_ptr_array_new_with_free_func. */
-    g_ptr_array_foreach(argv, (GFunc)owl_free, NULL);
+    g_ptr_array_foreach(argv, (GFunc)g_free, NULL);
     g_ptr_array_free(argv, true);
     *argc = -1;
     return(NULL);
@@ -261,7 +261,7 @@ char *owl_string_build_quoted(const char *tmpl, ...)
 }
 
 /* Returns a quoted version of arg suitable for placing in a
- * command-line. Result should be freed with owl_free. */
+ * command-line. Result should be freed with g_free. */
 char *owl_arg_quote(const char *arg)
 {
   GString *buf = g_string_new("");;
@@ -293,11 +293,6 @@ char *owl_util_minutes_to_timestr(int in)
 
 /* hooks for doing memory allocation et. al. in owl */
 
-void owl_free(void *ptr)
-{
-  g_free(ptr);
-}
-
 char *owl_strdup(const char *s1)
 {
   return(g_strdup(s1));
@@ -371,7 +366,7 @@ char *owl_util_get_default_tty(void)
   } else if ((tmp=ttyname(fileno(stdout)))!=NULL) {
     out=owl_strdup(tmp);
     if (!strncmp(out, "/dev/", 5)) {
-      owl_free(out);
+      g_free(out);
       out=owl_strdup(tmp+5);
     }
   } else {
@@ -399,7 +394,7 @@ char *owl_util_stripnewlines(const char *in)
   }
 
   out=owl_strdup(ptr1);
-  owl_free(tmp);
+  g_free(tmp);
   return(out);
 }
 
@@ -483,7 +478,7 @@ int owl_util_file_deleteline(const char *filename, const char *line, int backup)
   if ((new = fopen(newfile, "w")) == NULL) {
     owl_function_error("Cannot open %s (for writing): %s",
 		       actual_filename, strerror(errno));
-    owl_free(newfile);
+    g_free(newfile);
     fclose(old);
     free(actual_filename);
     return -1;
@@ -494,7 +489,7 @@ int owl_util_file_deleteline(const char *filename, const char *line, int backup)
 		       actual_filename, strerror(errno));
     unlink(newfile);
     fclose(new);
-    owl_free(newfile);
+    g_free(newfile);
     fclose(old);
     free(actual_filename);
     return -1;
@@ -505,7 +500,7 @@ int owl_util_file_deleteline(const char *filename, const char *line, int backup)
       fprintf(new, "%s\n", buf);
     else
       numremoved++;
-  owl_free(buf);
+  g_free(buf);
 
   fclose(new);
   fclose(old);
@@ -515,12 +510,12 @@ int owl_util_file_deleteline(const char *filename, const char *line, int backup)
     unlink(backupfile);
     if (link(actual_filename, backupfile) != 0) {
       owl_function_error("Cannot link %s: %s", backupfile, strerror(errno));
-      owl_free(backupfile);
+      g_free(backupfile);
       unlink(newfile);
-      owl_free(newfile);
+      g_free(newfile);
       return -1;
     }
-    owl_free(backupfile);
+    g_free(backupfile);
   }
 
   if (rename(newfile, actual_filename) != 0) {
@@ -530,7 +525,7 @@ int owl_util_file_deleteline(const char *filename, const char *line, int backup)
   }
 
   unlink(newfile);
-  owl_free(newfile);
+  g_free(newfile);
 
   g_free(actual_filename);
 
diff --git a/variable.c b/variable.c
index d24e0e5..5f9a1d8 100644
--- a/variable.c
+++ b/variable.c
@@ -558,9 +558,9 @@ owl_variable * owl_variable_newvar(const char *name, const char *summary, const
 }
 
 void owl_variable_update(owl_variable *var, const char *summary, const char *desc) {
-  if(var->summary) owl_free(var->summary);
+  if(var->summary) g_free(var->summary);
   var->summary = owl_strdup(summary);
-  if(var->description) owl_free(var->description);
+  if(var->description) g_free(var->description);
   var->description = owl_strdup(desc);
 }
 
@@ -568,7 +568,7 @@ void owl_variable_dict_newvar_string(owl_vardict * vd, const char *name, const c
   owl_variable *old = owl_variable_get_var(vd, name, OWL_VARIABLE_STRING);
   if(old) {
     owl_variable_update(old, summ, desc);
-    if(old->pval_default) owl_free(old->pval_default);
+    if(old->pval_default) g_free(old->pval_default);
     old->pval_default = owl_strdup(initval);
   } else {
     owl_variable * var = owl_variable_newvar(name, summ, desc);
@@ -638,16 +638,16 @@ void owl_variable_dict_get_names(const owl_vardict *d, owl_list *l) {
 
 void owl_variable_dict_namelist_cleanup(owl_list *l)
 {
-  owl_list_cleanup(l, owl_free);
+  owl_list_cleanup(l, g_free);
 }
 
 void owl_variable_delete(owl_variable *v)
 {
   if (v->delete_fn) v->delete_fn(v);
-  owl_free(v->name);
-  owl_free(v->summary);
-  owl_free(v->description);
-  owl_free(v);
+  g_free(v->name);
+  g_free(v->summary);
+  g_free(v->description);
+  g_free(v);
 }
 
 
@@ -868,7 +868,7 @@ const void *owl_variable_get_default(const owl_variable *v) {
 
 void owl_variable_delete_default(owl_variable *v)
 {
-  if (v->val) owl_free(v->val);
+  if (v->val) g_free(v->val);
 }
 
 /* default functions for booleans */
@@ -1007,7 +1007,7 @@ int owl_variable_string_set_default(owl_variable *v, const void *newval) {
   if (v->validate_fn) {
     if (!v->validate_fn(v, newval)) return(-1);
   }
-  if (v->val) owl_free(v->val);
+  if (v->val) g_free(v->val);
   v->val = owl_strdup(newval);
   return(0);
 }
diff --git a/view.c b/view.c
index 3b85513..c29f279 100644
--- a/view.c
+++ b/view.c
@@ -159,5 +159,5 @@ const char *owl_view_get_filtname(const owl_view *v)
 void owl_view_cleanup(owl_view *v)
 {
   owl_list_cleanup(&v->ml.list, NULL);
-  if (v->name) owl_free(v->name);
+  if (v->name) g_free(v->name);
 }
diff --git a/viewwin.c b/viewwin.c
index 76b606a..e1dea44 100644
--- a/viewwin.c
+++ b/viewwin.c
@@ -43,7 +43,7 @@ owl_viewwin *owl_viewwin_new_fmtext(owl_window *win, const owl_fmtext *fmtext)
   if (text[0] != '\0' && text[strlen(text) - 1] != '\n') {
       owl_fmtext_append_normal(&(v->fmtext), "\n");
   }
-  owl_free(text);
+  g_free(text);
   v->textlines=owl_fmtext_num_lines(&(v->fmtext));
   v->topline=0;
   v->rightshift=0;
@@ -203,7 +203,7 @@ char *owl_viewwin_command_start_search(owl_viewwin *v, int argc, const char *con
   ctx->cbdata = v;
   owl_global_push_context_obj(&g, ctx);
   owl_editwin_set_callback(tw, owl_viewwin_callback_search);
-  owl_editwin_set_cbdata(tw, data, owl_free);
+  owl_editwin_set_cbdata(tw, data, g_free);
   /* We aren't saving tw, so release the reference we were given. */
   owl_editwin_unref(tw);
   return NULL;
@@ -423,5 +423,5 @@ void owl_viewwin_delete(owl_viewwin *v)
   g_object_unref(v->content);
   g_object_unref(v->status);
   owl_fmtext_cleanup(&(v->fmtext));
-  owl_free(v);
+  g_free(v);
 }
diff --git a/zbuddylist.c b/zbuddylist.c
index ff54fab..b8d2cb6 100644
--- a/zbuddylist.c
+++ b/zbuddylist.c
@@ -15,7 +15,7 @@ int owl_zbuddylist_adduser(owl_zbuddylist *zb, const char *name)
   j=owl_list_get_size(&(zb->zusers));
   for (i=0; i<j; i++) {
     if (!strcasecmp(user, owl_list_get_element(&(zb->zusers), i))) {
-      owl_free(user);
+      g_free(user);
       return(-1);
     }
   }
@@ -35,12 +35,12 @@ int owl_zbuddylist_deluser(owl_zbuddylist *zb, const char *name)
     ptr=owl_list_get_element(&(zb->zusers), i);
     if (!strcasecmp(user, ptr)) {
       owl_list_remove_element(&(zb->zusers), i);
-      owl_free(ptr);
-      owl_free(user);
+      g_free(ptr);
+      g_free(user);
       return(0);
     }
   }
-  owl_free(user);
+  g_free(user);
   return(-1);
 }
 
@@ -54,10 +54,10 @@ int owl_zbuddylist_contains_user(const owl_zbuddylist *zb, const char *name)
   j=owl_list_get_size(&(zb->zusers));
   for (i=0; i<j; i++) {
     if (!strcasecmp(user, owl_list_get_element(&(zb->zusers), i))) {
-      owl_free(user);
+      g_free(user);
       return(1);
     }
   }
-  owl_free(user);
+  g_free(user);
   return(0);
 }
diff --git a/zephyr.c b/zephyr.c
index d3fcc26..b926cee 100644
--- a/zephyr.c
+++ b/zephyr.c
@@ -111,7 +111,7 @@ void owl_zephyr_finish_initialization(const owl_io_dispatch *d, void *data) {
     owl_function_debugmsg("Loading %d deferred subs.", subs->nsubs);
     owl_zephyr_loadsubs_helper(subs->subs, subs->nsubs);
     deferred_subs = g_list_delete_link(deferred_subs, deferred_subs);
-    owl_free(subs);
+    g_free(subs);
   }
 
   /* zlog in if we need to */
@@ -126,7 +126,7 @@ void owl_zephyr_finish_initialization(const owl_io_dispatch *d, void *data) {
   }
 
   perl = owl_perlconfig_execute("BarnOwl::Zephyr::_zephyr_startup()");
-  owl_free(perl);
+  g_free(perl);
 
   owl_select_add_pre_select_action(owl_zephyr_pre_select_action, NULL, NULL);
 }
@@ -221,12 +221,12 @@ int owl_zephyr_loadsubs_helper(ZSubscription_t subs[], int count)
 
     /* free stuff */
     for (i=0; i<count; i++) {
-      owl_free(subs[i].zsub_class);
-      owl_free(subs[i].zsub_classinst);
-      owl_free(subs[i].zsub_recipient);
+      g_free(subs[i].zsub_class);
+      g_free(subs[i].zsub_classinst);
+      g_free(subs[i].zsub_recipient);
     }
 
-    owl_free(subs);
+    g_free(subs);
   } else {
     owl_sub_list *s = g_new(owl_sub_list, 1);
     s->subs = subs;
@@ -262,7 +262,7 @@ int owl_zephyr_loadsubs(const char *filename, int error_on_nofile)
   subsfile = owl_zephyr_dotfile(".zephyr.subs", filename);
 
   if (stat(subsfile, &statbuff) != 0) {
-    owl_free(subsfile);
+    g_free(subsfile);
     if (error_on_nofile == 1)
       return -1;
     return 0;
@@ -271,7 +271,7 @@ int owl_zephyr_loadsubs(const char *filename, int error_on_nofile)
   ZResetAuthentication();
   count = 0;
   file = fopen(subsfile, "r");
-  owl_free(subsfile);
+  g_free(subsfile);
   if (!file)
     return -1;
   while (owl_getline(&buffer, file)) {
@@ -303,16 +303,16 @@ int owl_zephyr_loadsubs(const char *filename, int error_on_nofile)
      * remove it from the list of subs. */
     if (buffer[0] == '-') {
       owl_function_zpunt(subs[count].zsub_class, subs[count].zsub_classinst, subs[count].zsub_recipient, 0);
-      owl_free(subs[count].zsub_class);
-      owl_free(subs[count].zsub_classinst);
-      owl_free(subs[count].zsub_recipient);
+      g_free(subs[count].zsub_class);
+      g_free(subs[count].zsub_classinst);
+      g_free(subs[count].zsub_recipient);
     } else {
       count++;
     }
   }
   fclose(file);
   if (buffer)
-    owl_free(buffer);
+    g_free(buffer);
 
   return owl_zephyr_loadsubs_helper(subs, count);
 #else
@@ -380,15 +380,15 @@ int owl_zephyr_loadloginsubs(const char *filename)
   subsfile = owl_zephyr_dotfile(".anyone", filename);
 
   if (stat(subsfile, &statbuff) == -1) {
-    owl_free(subs);
-    owl_free(subsfile);
+    g_free(subs);
+    g_free(subsfile);
     return 0;
   }
 
   ZResetAuthentication();
   count = 0;
   file = fopen(subsfile, "r");
-  owl_free(subsfile);
+  g_free(subsfile);
   if (file) {
     while (owl_getline_chomp(&buffer, file)) {
       if (buffer[0] == '\0' || buffer[0] == '#')
@@ -410,7 +410,7 @@ int owl_zephyr_loadloginsubs(const char *filename)
     return 0;
   }
   if (buffer)
-    owl_free(buffer);
+    g_free(buffer);
 
   return owl_zephyr_loadsubs_helper(subs, count);
 #else
@@ -529,7 +529,7 @@ char *owl_zephyr_get_field_as_utf8(const ZNotice_t *n, int j)
     char *tmp, *out;
     tmp = g_strndup(n->z_message + save, n->z_message_len - save);
     out = owl_validate_or_convert(tmp);
-    owl_free(tmp);
+    g_free(tmp);
     return out;
   }
 
@@ -588,8 +588,8 @@ char *owl_zephyr_get_message(const ZNotice_t *n, const owl_message *m)
     field4 = owl_zephyr_get_field(n, 4);
 
     msg = owl_sprintf("%s service on %s %s\n%s", n->z_opcode, n->z_class_inst, field3, field4);
-    owl_free(field3);
-    owl_free(field4);
+    g_free(field3);
+    g_free(field4);
     if (msg) {
       return msg;
     }
@@ -606,11 +606,11 @@ char *owl_zephyr_get_message(const ZNotice_t *n, const owl_message *m)
     field5 = owl_zephyr_get_field(n, 5);
     
     msg = owl_sprintf("New transaction [%s] entered in %s\nFrom: %s (%s)\nSubject: %s", field1, field2, field3, field5, field4);
-    owl_free(field1);
-    owl_free(field2);
-    owl_free(field3);
-    owl_free(field4);
-    owl_free(field5);
+    g_free(field1);
+    g_free(field2);
+    g_free(field3);
+    g_free(field4);
+    g_free(field5);
     if (msg) {
       return msg;
     }
@@ -622,7 +622,7 @@ char *owl_zephyr_get_message(const ZNotice_t *n, const owl_message *m)
     field1 = owl_zephyr_get_field(n, 1);
     
     msg = owl_sprintf("MOIRA %s on %s: %s", n->z_class_inst, owl_message_get_hostname(m), field1);
-    owl_free(field1);
+    g_free(field1);
     if (msg) {
       return msg;
     }
@@ -701,7 +701,7 @@ int send_zephyr(const char *opcode, const char *zsig, const char *class, const c
   ret=ZSrvSendNotice(&notice, ZAUTH, send_zephyr_helper);
   
   /* free then check the return */
-  owl_free(notice.z_message);
+  g_free(notice.z_message);
   ZFreeNotice(&notice);
   if (ret!=ZERR_NONE) {
     owl_function_error("Error sending zephyr");
@@ -754,7 +754,7 @@ void owl_zephyr_handle_ack(const ZNotice_t *retnotice)
         } else { /* classed personal */
           owl_function_makemsg("Message sent to %s on -c %s -i %s\n", tmp, retnotice->z_class, retnotice->z_class_inst);
         }
-        owl_free(tmp);
+        g_free(tmp);
       } else {
         /* class / instance message */
           owl_function_makemsg("Message sent to -c %s -i %s\n", retnotice->z_class, retnotice->z_class_inst);
@@ -819,7 +819,7 @@ void owl_zephyr_handle_ack(const ZNotice_t *retnotice)
       owl_log_outgoing_zephyr_error(&zw, buff);
 
       owl_zwrite_cleanup(&zw);
-      owl_free(tmp);
+      g_free(tmp);
     }
   } else {
     owl_function_error("Internal error on ack (%s)", retnotice->z_message);
@@ -885,8 +885,8 @@ void owl_zephyr_zaway(const owl_message *m)
   } else {
     tmpbuff = owl_sprintf("zwrite -i %s %s", owl_message_get_instance(m), myuser);
   }
-  owl_free(myuser);
-  owl_free(to);
+  g_free(myuser);
+  g_free(to);
 
   z = owl_zwrite_new(tmpbuff);
   owl_zwrite_set_message(z, owl_global_get_zaway_msg(&g));
@@ -895,7 +895,7 @@ void owl_zephyr_zaway(const owl_message *m)
   /* display the message as an admin message in the receive window */
   mout=owl_function_make_outgoing_zephyr(z);
   owl_global_messagequeue_addmsg(&g, mout);
-  owl_free(tmpbuff);
+  g_free(tmpbuff);
   owl_zwrite_delete(z);
 #endif
 }
@@ -941,11 +941,11 @@ char *owl_zephyr_zlocate(const char *user, int auth)
 			  locations.host ? locations.host : "?",
 			  locations.tty ? locations.tty : "?",
 			  locations.time ? locations.time : "?");
-      owl_free(result);
+      g_free(result);
       result = p;
     }
   }
-  owl_free(myuser);
+  g_free(myuser);
 
   return result;
 #else
@@ -973,7 +973,7 @@ void owl_zephyr_addsub(const char *filename, const char *class, const char *inst
       }
     }
     fclose(file);
-    owl_free(s);
+    g_free(s);
   }
 
   if (!duplicate) {
@@ -987,7 +987,7 @@ void owl_zephyr_addsub(const char *filename, const char *class, const char *inst
     }
   }
 
-  owl_free(line);
+  g_free(line);
 #endif
 }
 
@@ -1008,8 +1008,8 @@ void owl_zephyr_delsub(const char *filename, const char *class, const char *inst
   } else if (linesdeleted == 0) {
     owl_function_error("No subscription present in %s", subsfile);
   }
-  owl_free(subsfile);
-  owl_free(line);
+  g_free(subsfile);
+  g_free(line);
 #endif
 }
 
@@ -1077,7 +1077,7 @@ void owl_zephyr_addbuddy(const char *name)
   
   filename = owl_zephyr_dotfile(".anyone", NULL);
   file = fopen(filename, "a");
-  owl_free(filename);
+  g_free(filename);
   if (!file) {
     owl_function_error("Error opening zephyr buddy file for append");
     return;
@@ -1092,7 +1092,7 @@ void owl_zephyr_delbuddy(const char *name)
 
   filename = owl_zephyr_dotfile(".anyone", NULL);
   owl_util_file_deleteline(filename, name, 0);
-  owl_free(filename);
+  g_free(filename);
 }
 
 /* return auth string */
@@ -1150,7 +1150,7 @@ char *owl_zephyr_getsubs(void)
                               sub.zsub_classinst,
                               sub.zsub_recipient);
       g_string_prepend(buf, tmp);
-      owl_free(tmp);
+      g_free(tmp);
     }
   }
 
@@ -1268,10 +1268,10 @@ int owl_zephyr_get_anyone_list(owl_list *in, const char *filename)
   f = fopen(ourfile, "r");
   if (!f) {
     owl_function_error("Error opening file %s: %s", ourfile, strerror(errno) ? strerror(errno) : "");
-    owl_free(ourfile);
+    g_free(ourfile);
     return -1;
   }
-  owl_free(ourfile);
+  g_free(ourfile);
 
   while (owl_getline_chomp(&s, f)) {
     /* ignore comments, blank lines etc. */
@@ -1290,7 +1290,7 @@ int owl_zephyr_get_anyone_list(owl_list *in, const char *filename)
 
     owl_list_append_element(in, long_zuser(s));
   }
-  owl_free(s);
+  g_free(s);
   fclose(f);
   return 0;
 #else
@@ -1354,7 +1354,7 @@ void owl_zephyr_process_pseudologin(ZNotice_t *n)
       }
     }
     ZFreeALD(zald);
-    owl_free(zald);
+    g_free(zald);
   }
 }
 #else
diff --git a/zwrite.c b/zwrite.c
index 29a2b80..795282a 100644
--- a/zwrite.c
+++ b/zwrite.c
@@ -144,7 +144,7 @@ int owl_zwrite_create_from_line(owl_zwrite *z, const char *line)
 
   if(msg) {
     owl_zwrite_set_message(z, msg);
-    owl_free(msg);
+    g_free(msg);
   }
 
   return(0);
@@ -180,7 +180,7 @@ void owl_zwrite_send_ping(const owl_zwrite *z)
       to = owl_strdup(owl_list_get_element(&(z->recips), i));
     }
     send_ping(to, z->class, z->inst);
-    owl_free(to);
+    g_free(to);
   }
 
 }
@@ -188,7 +188,7 @@ void owl_zwrite_send_ping(const owl_zwrite *z)
 /* Set the message with no post-processing*/
 void owl_zwrite_set_message_raw(owl_zwrite *z, const char *msg)
 {
-  if (z->message) owl_free(z->message);
+  if (z->message) g_free(z->message);
   z->message = owl_validate_utf8(msg);
 }
 
@@ -198,7 +198,7 @@ void owl_zwrite_set_message(owl_zwrite *z, const char *msg)
   char *toline = NULL;
   char *tmp = NULL, *tmp2;
 
-  if (z->message) owl_free(z->message);
+  if (z->message) g_free(z->message);
 
   j=owl_list_get_size(&(z->recips));
   if (j>0 && z->cc) {
@@ -210,19 +210,19 @@ void owl_zwrite_set_message(owl_zwrite *z, const char *msg)
       } else {
         toline = owl_sprintf( "%s%s ", toline, (const char *) owl_list_get_element(&(z->recips), i));
       }
-      owl_free(tmp);
+      g_free(tmp);
       tmp = NULL;
     }
     tmp = owl_validate_utf8(msg);
     tmp2 = owl_text_expand_tabs(tmp);
     z->message=owl_sprintf("%s\n%s", toline, tmp2);
-    owl_free(toline);
-    owl_free(tmp);
-    owl_free(tmp2);
+    g_free(toline);
+    g_free(tmp);
+    g_free(tmp2);
   } else {
     tmp=owl_validate_utf8(msg);
     z->message=owl_text_expand_tabs(tmp);
-    owl_free(tmp);
+    g_free(tmp);
   }
 }
 
@@ -257,14 +257,14 @@ int owl_zwrite_send_message(const owl_zwrite *z)
       /* Abort on the first error, to match the zwrite binary. */
       if (ret != 0)
         break;
-      owl_free(to);
+      g_free(to);
       to = NULL;
     }
   } else {
     to = owl_sprintf( "@%s", z->realm);
     ret = send_zephyr(z->opcode, z->zsig, z->class, z->inst, to, z->message);
   }
-  owl_free(to);
+  g_free(to);
   return ret;
 }
 
@@ -300,7 +300,7 @@ const char *owl_zwrite_get_opcode(const owl_zwrite *z)
 
 void owl_zwrite_set_opcode(owl_zwrite *z, const char *opcode)
 {
-  if (z->opcode) owl_free(z->opcode);
+  if (z->opcode) g_free(z->opcode);
   z->opcode=owl_validate_utf8(opcode);
 }
 
@@ -317,7 +317,7 @@ const char *owl_zwrite_get_zsig(const owl_zwrite *z)
 
 void owl_zwrite_set_zsig(owl_zwrite *z, const char *zsig)
 {
-  if(z->zsig) owl_free(z->zsig);
+  if(z->zsig) g_free(z->zsig);
   z->zsig = owl_strdup(zsig);
 }
 
@@ -361,26 +361,26 @@ int owl_zwrite_is_personal(const owl_zwrite *z)
 void owl_zwrite_delete(owl_zwrite *z)
 {
   owl_zwrite_cleanup(z);
-  owl_free(z);
+  g_free(z);
 }
 
 void owl_zwrite_cleanup(owl_zwrite *z)
 {
-  owl_list_cleanup(&(z->recips), &owl_free);
-  if (z->cmd) owl_free(z->cmd);
-  if (z->zwriteline) owl_free(z->zwriteline);
-  if (z->class) owl_free(z->class);
-  if (z->inst) owl_free(z->inst);
-  if (z->opcode) owl_free(z->opcode);
-  if (z->realm) owl_free(z->realm);
-  if (z->message) owl_free(z->message);
-  if (z->zsig) owl_free(z->zsig);
+  owl_list_cleanup(&(z->recips), &g_free);
+  if (z->cmd) g_free(z->cmd);
+  if (z->zwriteline) g_free(z->zwriteline);
+  if (z->class) g_free(z->class);
+  if (z->inst) g_free(z->inst);
+  if (z->opcode) g_free(z->opcode);
+  if (z->realm) g_free(z->realm);
+  if (z->message) g_free(z->message);
+  if (z->zsig) g_free(z->zsig);
 }
 
 /*
  * Returns a zwrite line suitable for replying, specifically the
  * message field is stripped out. Result should be freed with
- * owl_free.
+ * g_free.
  */
 char *owl_zwrite_get_replyline(const owl_zwrite *z)
 {
-- 
1.7.4


From 9f5281a8ab5d6299bb3e45b0ed4f33e57d97fb91 Mon Sep 17 00:00:00 2001
From: Anders Kaseorg <andersk@mit.edu>
Date: Thu, 27 Aug 2009 00:55:10 -0400
Subject: [PATCH 4/5] Replace owl_strdup with g_strdup.

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
---
 aim.c           |   14 +++++-----
 buddy.c         |    2 +-
 cmd.c           |   16 ++++++------
 commands.c      |   14 +++++-----
 context.c       |    2 +-
 dict.c          |    4 +-
 errqueue.c      |    2 +-
 filter.c        |    2 +-
 filterelement.c |    6 ++--
 functions.c     |   22 +++++++++---------
 global.c        |   12 +++++-----
 history.c       |    2 +-
 keybinding.c    |    4 +-
 keymap.c        |    4 +-
 logging.c       |    8 +++---
 message.c       |   10 ++++----
 msgwin.c        |    2 +-
 owl.c           |    6 ++--
 perlconfig.c    |   18 +++++++-------
 regex.c         |    2 +-
 select.c        |    2 +-
 style.c         |    2 +-
 text.c          |    4 +-
 util.c          |   27 ++++++++--------------
 variable.c      |   22 +++++++++---------
 view.c          |    2 +-
 zephyr.c        |   66 +++++++++++++++++++++++++++---------------------------
 zwrite.c        |   20 ++++++++--------
 28 files changed, 145 insertions(+), 152 deletions(-)

diff --git a/aim.c b/aim.c
index 55b066a..5f7179a 100644
--- a/aim.c
+++ b/aim.c
@@ -135,9 +135,9 @@ int owl_aim_login(const char *screenname, const char *password)
   /* this will leak, I know and just don't care right now */
   priv=g_new0(struct owlfaim_priv, 1);
 
-  priv->screenname = owl_strdup(screenname);
-  priv->password = owl_strdup(password);
-  priv->server = owl_strdup(FAIM_LOGIN_SERVER);
+  priv->screenname = g_strdup(screenname);
+  priv->password = g_strdup(password);
+  priv->server = g_strdup(FAIM_LOGIN_SERVER);
   sess->aux_data = priv;
 
   conn=aim_newconn(sess, AIM_CONN_TYPE_AUTH, priv->server ? priv->server : FAIM_LOGIN_SERVER);
@@ -345,7 +345,7 @@ int owl_aim_set_awaymsg(const char *msg)
   char *foo;
   /* there is a max away message lentgh we should check against */
 
-  foo=owl_strdup(msg);
+  foo=g_strdup(msg);
   len=strlen(foo);
   if (len>500) {
     foo[500]='\0';
@@ -1024,7 +1024,7 @@ static int faimtest_parse_incoming_im_chan1(aim_session_t *sess, aim_conn_t *con
   char *realmsg = NULL;
 
   if (!args->msg) {
-    realmsg = owl_strdup("");
+    realmsg = g_strdup("");
   } else if (args->icbmflags & AIM_IMFLAGS_UNICODE) {
     realmsg = g_convert(args->msg, args->msglen, "UTF-8", "UCS-2BE",
                         NULL, NULL, NULL);
@@ -1032,11 +1032,11 @@ static int faimtest_parse_incoming_im_chan1(aim_session_t *sess, aim_conn_t *con
     realmsg = g_convert(args->msg, args->msglen, "UTF-8", "ISO-8859-1",
                         NULL, NULL, NULL);
   } else {
-    realmsg = owl_strdup(args->msg);
+    realmsg = g_strdup(args->msg);
   }
 
   if (!realmsg) {
-    realmsg = owl_strdup("[Error decoding incoming IM]");
+    realmsg = g_strdup("[Error decoding incoming IM]");
   }
 
   owl_function_debugmsg("faimtest_parse_incoming_im_chan1: message from: %s", userinfo->sn?userinfo->sn:"");
diff --git a/buddy.c b/buddy.c
index 25e4f70..c053b8b 100644
--- a/buddy.c
+++ b/buddy.c
@@ -3,7 +3,7 @@
 void owl_buddy_create(owl_buddy *b, int proto, const char *name)
 {
   b->proto=proto;
-  b->name=owl_strdup(name);
+  b->name=g_strdup(name);
   b->idlesince=0;
 }
 
diff --git a/cmd.c b/cmd.c
index 11ef248..5feaf9e 100644
--- a/cmd.c
+++ b/cmd.c
@@ -87,7 +87,7 @@ char *owl_cmddict_execute(const owl_cmddict *cd, const owl_context *ctx, const c
   char *tmpbuff;
   char *retval = NULL;
 
-  tmpbuff=owl_strdup(cmdbuff);
+  tmpbuff=g_strdup(cmdbuff);
   argv=owl_parseline(tmpbuff, &argc);
   if (argc < 0) {
     g_free(tmpbuff);
@@ -134,18 +134,18 @@ char *owl_cmddict_execute_argv(const owl_cmddict *cd, const owl_context *ctx, co
 int owl_cmd_create_from_template(owl_cmd *cmd, const owl_cmd *templ) {
   *cmd = *templ;
   if (!templ->name) return(-1);
-  cmd->name = owl_strdup(templ->name);
-  if (templ->summary)     cmd->summary     = owl_strdup(templ->summary);
-  if (templ->usage)       cmd->usage       = owl_strdup(templ->usage);
-  if (templ->description) cmd->description = owl_strdup(templ->description);
-  if (templ->cmd_aliased_to) cmd->cmd_aliased_to = owl_strdup(templ->cmd_aliased_to);
+  cmd->name = g_strdup(templ->name);
+  if (templ->summary)     cmd->summary     = g_strdup(templ->summary);
+  if (templ->usage)       cmd->usage       = g_strdup(templ->usage);
+  if (templ->description) cmd->description = g_strdup(templ->description);
+  if (templ->cmd_aliased_to) cmd->cmd_aliased_to = g_strdup(templ->cmd_aliased_to);
   return(0);
 }
 
 int owl_cmd_create_alias(owl_cmd *cmd, const char *name, const char *aliased_to) {
   memset(cmd, 0, sizeof(owl_cmd));
-  cmd->name = owl_strdup(name);
-  cmd->cmd_aliased_to = owl_strdup(aliased_to);
+  cmd->name = g_strdup(name);
+  cmd->cmd_aliased_to = g_strdup(aliased_to);
   cmd->summary = owl_sprintf("%s%s", OWL_CMD_ALIAS_SUMMARY_PREFIX, aliased_to);
   return(0);
 }
diff --git a/commands.c b/commands.c
index 48add27..41c31ec 100644
--- a/commands.c
+++ b/commands.c
@@ -1273,7 +1273,7 @@ char *owl_command_next(int argc, const char *const *argv, const char *buff)
       last_if_none=1;
       argc-=1; argv+=1; 
     } else if (argc>=2 && !strcmp(argv[1], "--filter")) {
-      filter = owl_strdup(argv[2]);
+      filter = g_strdup(argv[2]);
       argc-=2; argv+=2; 
     } else if (argc>=2 && !strcmp(argv[1], "--smart-filter")) {
       filter = owl_function_smartfilter(0, 0);
@@ -1303,7 +1303,7 @@ char *owl_command_prev(int argc, const char *const *argv, const char *buff)
       first_if_none=1;
       argc-=1; argv+=1; 
     } else if (argc>=2 && !strcmp(argv[1], "--filter")) {
-      filter = owl_strdup(argv[2]);
+      filter = g_strdup(argv[2]);
       argc-=2; argv+=2; 
     } else if (argc>=2 && !strcmp(argv[1], "--smart-filter")) {
       filter = owl_function_smartfilter(0, 0);
@@ -1674,7 +1674,7 @@ char *owl_command_multi(int argc, const char *const *argv, const char *buff)
     owl_function_makemsg("Invalid arguments to 'multi' command.");    
     return NULL;
   }
-  newbuff = owl_strdup(skiptokens(buff, 1));
+  newbuff = g_strdup(skiptokens(buff, 1));
   if (!strcmp(argv[0], "(")) {
     for (i=strlen(newbuff)-1; i>=0; i--) {
       if (newbuff[i] == ')') {
@@ -2500,7 +2500,7 @@ char *owl_command_getview(int argc, const char *const *argv, const char *buff)
     return NULL;
   }
   filtname = owl_view_get_filtname(owl_global_get_current_view(&g));
-  if (filtname) return owl_strdup(filtname);
+  if (filtname) return g_strdup(filtname);
   return NULL;
 }
 
@@ -2515,7 +2515,7 @@ char *owl_command_getvar(int argc, const char *const *argv, const char *buff)
 				argv[1], tmpbuff, 1024)) {
     return NULL;
   }
-  return owl_strdup(tmpbuff); 
+  return g_strdup(tmpbuff); 
 }
 
 char *owl_command_getfilter(int argc, const char *const *argv, const char *buf)
@@ -2575,7 +2575,7 @@ char *owl_command_aimlogin(int argc, const char *const *argv, const char *buff)
   /* if we get two arguments, ask for the password */
   if (argc==2) {
     owl_editwin *e = owl_function_start_password("AIM Password: ");
-    owl_editwin_set_cbdata(e, owl_strdup(argv[1]), g_free);
+    owl_editwin_set_cbdata(e, g_strdup(argv[1]), g_free);
     owl_editwin_set_callback(e, owl_callback_aimlogin);
     return(NULL);
   } else {
@@ -2603,7 +2603,7 @@ char *owl_command_getstyle(int argc, const char *const *argv, const char *buff)
     return NULL;
   }
   stylename = owl_view_get_style_name(owl_global_get_current_view(&g));
-  if (stylename) return owl_strdup(stylename);
+  if (stylename) return g_strdup(stylename);
   return NULL;
 }
 
diff --git a/context.c b/context.c
index 4aa4524..6fad0e7 100644
--- a/context.c
+++ b/context.c
@@ -14,7 +14,7 @@ owl_context *owl_context_new(int mode, void *data, const char *keymap, owl_windo
   c->mode = mode;
   c->data = data;
   c->cursor = cursor ? g_object_ref(cursor) : NULL;
-  c->keymap = owl_strdup(keymap);
+  c->keymap = g_strdup(keymap);
   return c;
 }
 
diff --git a/dict.c b/dict.c
index a90a37b..2d245d0 100644
--- a/dict.c
+++ b/dict.c
@@ -64,7 +64,7 @@ int owl_dict_get_keys(const owl_dict *d, owl_list *l) {
   char *dupk;
   if (owl_list_create(l)) return(-1);
   for (i=0; i<d->size; i++) {
-    if ((dupk = owl_strdup(d->els[i].k)) == NULL) return(-1);
+    if ((dupk = g_strdup(d->els[i].k)) == NULL) return(-1);
     owl_list_append_element(l, dupk);
   }
   return(0);
@@ -99,7 +99,7 @@ int owl_dict_insert_element(owl_dict *d, const char *k, void *v, void (*delete_o
       d->avail = avail;
       if (d->els==NULL) return(-1);
     }
-    if ((dupk = owl_strdup(k)) == NULL) return(-1);
+    if ((dupk = g_strdup(k)) == NULL) return(-1);
     if (pos!=d->size) {
       /* shift forward to leave us a slot */
       memmove(d->els+pos+1, d->els+pos, 
diff --git a/errqueue.c b/errqueue.c
index c0942d0..9066127 100644
--- a/errqueue.c
+++ b/errqueue.c
@@ -7,7 +7,7 @@ void owl_errqueue_init(owl_errqueue *eq)
 
 void owl_errqueue_append_err(owl_errqueue *eq, const char *msg)
 {
-  owl_list_append_element(&(eq->errlist), owl_strdup(msg));
+  owl_list_append_element(&(eq->errlist), g_strdup(msg));
 }
 
 /* fmtext should already be initialized */
diff --git a/filter.c b/filter.c
index deb7ecb..56b3f36 100644
--- a/filter.c
+++ b/filter.c
@@ -20,7 +20,7 @@ owl_filter *owl_filter_new(const char *name, int argc, const char *const *argv)
 
   f = g_new(owl_filter, 1);
 
-  f->name=owl_strdup(name);
+  f->name=g_strdup(name);
   f->fgcolor=OWL_COLOR_DEFAULT;
   f->bgcolor=OWL_COLOR_DEFAULT;
 
diff --git a/filterelement.c b/filterelement.c
index 1035612..99bf009 100644
--- a/filterelement.c
+++ b/filterelement.c
@@ -213,7 +213,7 @@ void owl_filterelement_create_false(owl_filterelement *fe)
 int owl_filterelement_create_re(owl_filterelement *fe, const char *field, const char *re)
 {
   owl_filterelement_create(fe);
-  fe->field=owl_strdup(field);
+  fe->field=g_strdup(field);
   if(owl_regex_create(&(fe->re), re)) {
     g_free(fe->field);
     fe->field = NULL;
@@ -227,7 +227,7 @@ int owl_filterelement_create_re(owl_filterelement *fe, const char *field, const
 void owl_filterelement_create_filter(owl_filterelement *fe, const char *name)
 {
   owl_filterelement_create(fe);
-  fe->field=owl_strdup(name);
+  fe->field=g_strdup(name);
   fe->match_message = owl_filterelement_match_filter;
   fe->print_elt = owl_filterelement_print_filter;
 }
@@ -235,7 +235,7 @@ void owl_filterelement_create_filter(owl_filterelement *fe, const char *name)
 void owl_filterelement_create_perl(owl_filterelement *fe, const char *name)
 {
   owl_filterelement_create(fe);
-  fe->field=owl_strdup(name);
+  fe->field=g_strdup(name);
   fe->match_message = owl_filterelement_match_perl;
   fe->print_elt = owl_filterelement_print_perl;
 }
diff --git a/functions.c b/functions.c
index d04c721..1b2d9b0 100644
--- a/functions.c
+++ b/functions.c
@@ -357,7 +357,7 @@ void owl_function_aimwrite_setup(const char *to)
   owl_function_write_setup("message");
   owl_function_start_edit_win(line,
                               &owl_callback_aimwrite,
-                              owl_strdup(to),
+                              g_strdup(to),
                               g_free);
   g_free(line);
 }
@@ -435,7 +435,7 @@ void owl_function_zcrypt(owl_zwrite *z, const char *msg)
   if (msg) {
     owl_zwrite_set_message(z, msg);
   }
-  old_msg = owl_strdup(owl_zwrite_get_message(z));
+  old_msg = g_strdup(owl_zwrite_get_message(z));
 
   zcrypt = owl_sprintf("%s/zcrypt", owl_get_bindir());
   argv[0] = "zcrypt";
@@ -490,7 +490,7 @@ void owl_function_aimwrite(const char *to, const char *msg, bool unwrap)
   owl_message *m;
 
   /* make a formatted copy of the message */
-  format_msg = owl_strdup(msg);
+  format_msg = g_strdup(msg);
   if (unwrap)
     owl_text_wordunwrap(format_msg);
   
@@ -521,7 +521,7 @@ void owl_function_send_aimawymsg(const char *to, const char *msg)
   owl_message *m;
 
   /* make a formatted copy of the message */
-  format_msg=owl_strdup(msg);
+  format_msg=g_strdup(msg);
   owl_text_wordunwrap(format_msg);
   
   /* send the message */
@@ -2190,7 +2190,7 @@ char *owl_function_create_negative_filter(const char *filtername)
   owl_function_debugmsg("owl_function_create_negative_filter");
   
   if (!strncmp(filtername, "not-", 4)) {
-    newname=owl_strdup(filtername+4);
+    newname=g_strdup(filtername+4);
   } else {
     newname=owl_sprintf("not-%s", filtername);
   }
@@ -2296,9 +2296,9 @@ char *owl_function_classinstfilt(const char *c, const char *i, int related)
       instance = owl_util_baseclass(i);
     }
   } else {
-    class = owl_strdup(c);
+    class = g_strdup(c);
     if (i) {
-      instance = owl_strdup(i);
+      instance = g_strdup(i);
     }
   }
 
@@ -2428,7 +2428,7 @@ char *owl_function_aimuserfilt(const char *user)
 
   /* if it already exists then go with it.  This lets users override */
   if (owl_global_get_filter(&g, filtname)) {
-    return(owl_strdup(filtname));
+    return(g_strdup(filtname));
   }
 
   /* create the new-internal filter */
@@ -3050,7 +3050,7 @@ void owl_function_buddylist(int aim, int zephyr, const char *filename)
       if (idle!=0) {
 	timestr=owl_util_minutes_to_timestr(idle);
       } else {
-	timestr=owl_strdup("");
+	timestr=g_strdup("");
       }
       owl_fmtext_appendf_normal(&fm, "  %-20.20s %-12.12s\n", owl_buddy_get_name(b), timestr);
       g_free(timestr);
@@ -3285,7 +3285,7 @@ void owl_function_source(const char *filename)
 
   if (!filename) {
     fail_silent = 1;
-    path = owl_strdup(owl_global_get_startupfile(&g));
+    path = g_strdup(owl_global_get_startupfile(&g));
   } else {
     path = owl_util_makepath(filename);
   }
@@ -3388,7 +3388,7 @@ void owl_function_log_err(const char *string)
   char *buff;
 
   now=time(NULL);
-  date=owl_strdup(ctime(&now));
+  date=g_strdup(ctime(&now));
   date[strlen(date)-1]='\0';
 
   buff = owl_sprintf("%s %s", date, string);
diff --git a/global.c b/global.c
index a4f5097..86af1b3 100644
--- a/global.c
+++ b/global.c
@@ -25,9 +25,9 @@ void owl_global_init(owl_global *g) {
   gethostname(hostname, MAXHOSTNAMELEN);
   hent=gethostbyname(hostname);
   if (!hent) {
-    g->thishost=owl_strdup("localhost");
+    g->thishost=g_strdup("localhost");
   } else {
-    g->thishost=owl_strdup(hent->h_name);
+    g->thishost=g_strdup(hent->h_name);
   }
 
   g->lines=LINES;
@@ -89,7 +89,7 @@ void owl_global_init(owl_global *g) {
   homedir = getenv("HOME");
   if (!homedir)
     homedir = g_get_home_dir();
-  g->homedir = owl_strdup(homedir);
+  g->homedir = g_strdup(homedir);
 
   g->confdir = NULL;
   g->startupfile = NULL;
@@ -379,7 +379,7 @@ const char *owl_global_get_confdir(const owl_global *g) {
  */
 void owl_global_set_confdir(owl_global *g, const char *cd) {
   g_free(g->confdir);
-  g->confdir = owl_strdup(cd);
+  g->confdir = g_strdup(cd);
   g_free(g->startupfile);
   g->startupfile = owl_sprintf("%s/startup", cd);
 }
@@ -700,7 +700,7 @@ void owl_global_set_aimloggedin(owl_global *g, const char *screenname)
   g->aim_loggedin=1;
   if (g->aim_screenname) g_free(g->aim_screenname);
   if (g->aim_screenname_for_filters) g_free(g->aim_screenname_for_filters);
-  g->aim_screenname=owl_strdup(screenname);
+  g->aim_screenname=g_strdup(screenname);
   sn_escaped = owl_text_quote(screenname, OWL_REGEX_QUOTECHARS, OWL_REGEX_QUOTEWITH);
   g->aim_screenname_for_filters = owl_arg_quote(sn_escaped);
   g_free(sn_escaped);
@@ -972,7 +972,7 @@ FILE *owl_global_get_debug_file_handle(owl_global *g) {
       g->debug_file = fdopen(fd, "a");
 
     g_free(open_file);
-    open_file = owl_strdup(filename);
+    open_file = g_strdup(filename);
   }
   return g->debug_file;
 }
diff --git a/history.c b/history.c
index d3c6695..4ad2e12 100644
--- a/history.c
+++ b/history.c
@@ -68,7 +68,7 @@ void owl_history_store(owl_history *h, const char *line)
   }
 
   /* add the new line */
-  owl_list_prepend_element(&(h->hist), owl_strdup(line));
+  owl_list_prepend_element(&(h->hist), g_strdup(line));
 }
 
 void owl_history_set_partial(owl_history *h)
diff --git a/keybinding.c b/keybinding.c
index 20da44f..3b15cd9 100644
--- a/keybinding.c
+++ b/keybinding.c
@@ -26,9 +26,9 @@ int owl_keybinding_init(owl_keybinding *kb, const char *keyseq, const char *comm
     return(-1);
   }
 
-  if (command) kb->command = owl_strdup(command);
+  if (command) kb->command = g_strdup(command);
   kb->function_fn = function_fn;
-  if (desc) kb->desc = owl_strdup(desc);
+  if (desc) kb->desc = g_strdup(desc);
   else kb->desc = NULL;
   return(0);
 }
diff --git a/keymap.c b/keymap.c
index 7dfb3a5..2ba9409 100644
--- a/keymap.c
+++ b/keymap.c
@@ -8,8 +8,8 @@ static void _owl_keymap_format_with_parents(const owl_keymap *km, owl_fmtext *fm
 int owl_keymap_init(owl_keymap *km, const char *name, const char *desc, void (*default_fn)(owl_input), void (*prealways_fn)(owl_input), void (*postalways_fn)(owl_input))
 {
   if (!name || !desc) return(-1);
-  if ((km->name = owl_strdup(name)) == NULL) return(-1);
-  if ((km->desc = owl_strdup(desc)) == NULL) return(-1);
+  if ((km->name = g_strdup(name)) == NULL) return(-1);
+  if ((km->desc = g_strdup(desc)) == NULL) return(-1);
   if (0 != owl_list_create(&km->bindings)) return(-1);
   km->parent = NULL;
   km->default_fn = default_fn;
diff --git a/logging.c b/logging.c
index e68c24f..9eb0d06 100644
--- a/logging.c
+++ b/logging.c
@@ -158,7 +158,7 @@ void owl_log_outgoing(const owl_message *m)
     g_free(temp2);
     g_free(temp);
   } else {
-    to = owl_strdup("loopback");
+    to = g_strdup("loopback");
   }
 
   snprintf(filename, MAXPATHLEN, "%s/%s", logpath, to);
@@ -261,7 +261,7 @@ void owl_log_incoming(const owl_message *m)
     if (personal) {
       from=frombuff=short_zuser(owl_message_get_sender(m));
     } else {
-      from=frombuff=owl_strdup(owl_message_get_class(m));
+      from=frombuff=g_strdup(owl_message_get_class(m));
     }
   } else if (owl_message_is_type_aim(m)) {
     /* we do not yet handle chat rooms */
@@ -272,7 +272,7 @@ void owl_log_incoming(const owl_message *m)
     g_free(normalto);
     g_free(temp);
   } else if (owl_message_is_type_loopback(m)) {
-    from=frombuff=owl_strdup("loopback");
+    from=frombuff=g_strdup("loopback");
   } else if (owl_message_is_type_jabber(m)) {
     if (personal) {
       from=frombuff=owl_sprintf("jabber:%s",owl_message_get_sender(m));
@@ -280,7 +280,7 @@ void owl_log_incoming(const owl_message *m)
       from=frombuff=owl_sprintf("jabber:%s",owl_message_get_recipient(m));
     }
   } else {
-    from=frombuff=owl_strdup("unknown");
+    from=frombuff=g_strdup("unknown");
   }
   
   /* check for malicious sender formats */
diff --git a/message.c b/message.c
index 964e19e..d5852e6 100644
--- a/message.c
+++ b/message.c
@@ -46,7 +46,7 @@ void owl_message_init(owl_message *m)
   
   /* save the time */
   m->time=time(NULL);
-  m->timestr=owl_strdup(ctime(&(m->time)));
+  m->timestr=g_strdup(ctime(&(m->time)));
   m->timestr[strlen(m->timestr)-1]='\0';
 
   m->fmtext = NULL;
@@ -130,7 +130,7 @@ void owl_message_attributes_tofmtext(const owl_message *m, owl_fmtext *fm) {
     if(buff == NULL) {
       buff=owl_sprintf("  %-15.15s: %-35.35s\n", owl_pair_get_key(p), "<error>");
       if(buff == NULL)
-        buff=owl_strdup("   <error>\n");
+        buff=g_strdup("   <error>\n");
     }
     owl_fmtext_append_normal(fm, buff);
     g_free(buff);
@@ -585,7 +585,7 @@ char *owl_message_get_cc(const owl_message *m)
   if (strncasecmp(cur, "cc:", 3)) return(NULL);
   cur+=3;
   while (*cur && *cur==' ') cur++;
-  out = owl_strdup(cur);
+  out = g_strdup(cur);
   end = strchr(out, '\n');
   if (end) end[0] = '\0';
   return(out);
@@ -608,7 +608,7 @@ GList *owl_message_get_cc_without_recipient(const owl_message *m)
   while (user != NULL) {
     shortuser = short_zuser(user);
     if (strcasecmp(shortuser, recip) != 0) {
-      out = g_list_prepend(out, owl_strdup(user));
+      out = g_list_prepend(out, g_strdup(user));
     }
     g_free(shortuser);
     user = strtok(NULL, " ");
@@ -794,7 +794,7 @@ void owl_message_create_from_znotice(owl_message *m, const ZNotice_t *n)
   /* save the time, we need to nuke the string saved by message_init */
   if (m->timestr) g_free(m->timestr);
   m->time=n->z_time.tv_sec;
-  m->timestr=owl_strdup(ctime(&(m->time)));
+  m->timestr=g_strdup(ctime(&(m->time)));
   m->timestr[strlen(m->timestr)-1]='\0';
 
   /* set other info */
diff --git a/msgwin.c b/msgwin.c
index ecc3454..94e5a08 100644
--- a/msgwin.c
+++ b/msgwin.c
@@ -23,7 +23,7 @@ static void owl_msgwin_redraw(owl_window *w, WINDOW *curswin, void *msgwin_)
 
 void owl_msgwin_set_text(owl_msgwin *msgwin, const char *msg)
 {
-  owl_msgwin_set_text_nocopy(msgwin, owl_strdup(msg));
+  owl_msgwin_set_text_nocopy(msgwin, g_strdup(msg));
 }
 
 void owl_msgwin_set_text_nocopy(owl_msgwin *msgwin, char *msg)
diff --git a/owl.c b/owl.c
index e217eb2..5e2578c 100644
--- a/owl.c
+++ b/owl.c
@@ -79,13 +79,13 @@ void owl_parse_options(int argc, char *argv[], owl_options *opts) {
       opts->load_initial_subs = 0;
       break;
     case 'c':
-      opts->configfile = owl_strdup(optarg);
+      opts->configfile = g_strdup(optarg);
       break;
     case 's':
-      opts->confdir = owl_strdup(optarg);
+      opts->confdir = g_strdup(optarg);
       break;
     case 't':
-      opts->tty = owl_strdup(optarg);
+      opts->tty = g_strdup(optarg);
       break;
     case 'D':
       opts->rm_debug = 1;
diff --git a/perlconfig.c b/perlconfig.c
index 8969ee5..6595dd9 100644
--- a/perlconfig.c
+++ b/perlconfig.c
@@ -147,7 +147,7 @@ SV *owl_perlconfig_message2hashref(const owl_message *m)
 
   type = owl_message_get_type(m);
   if(!type || !*type) type = "generic";
-  utype = owl_strdup(type);
+  utype = g_strdup(type);
   utype[0] = toupper(type[0]);
   blessas = owl_sprintf("BarnOwl::Message::%s", utype);
 
@@ -213,7 +213,7 @@ owl_message * owl_perlconfig_hashref2message(SV *msg)
     } else if (!strcmp(key, "zwriteline")) {
       owl_message_set_zwriteline(m, val);
     } else if (!strcmp(key, "time")) {
-      m->timestr = owl_strdup(val);
+      m->timestr = g_strdup(val);
       strptime(val, "%a %b %d %T %Y", &tm);
       m->time = mktime(&tm);
     } else {
@@ -281,7 +281,7 @@ char *owl_perlconfig_call_with_message(const char *subname, const owl_message *m
   srv = POPs;
 
   if (srv) {
-    out = owl_strdup(SvPV_nolen(srv));
+    out = g_strdup(SvPV_nolen(srv));
   } else {
     out = NULL;
   }
@@ -334,7 +334,7 @@ char * owl_perlconfig_message_call_method(const owl_message *m, const char *meth
   srv = POPs;
 
   if (srv) {
-    out = owl_strdup(SvPV_nolen(srv));
+    out = g_strdup(SvPV_nolen(srv));
   } else {
     out = NULL;
   }
@@ -368,14 +368,14 @@ char *owl_perlconfig_initperl(const char * file, int *Pargc, char ***Pargv, char
 
   ret=perl_parse(p, owl_perl_xs_init, 2, (char **)args, NULL);
   if (ret || SvTRUE(ERRSV)) {
-    err=owl_strdup(SvPV_nolen(ERRSV));
+    err=g_strdup(SvPV_nolen(ERRSV));
     sv_setsv(ERRSV, &PL_sv_undef);     /* and clear the error */
     return(err);
   }
 
   ret=perl_run(p);
   if (ret || SvTRUE(ERRSV)) {
-    err=owl_strdup(SvPV_nolen(ERRSV));
+    err=g_strdup(SvPV_nolen(ERRSV));
     sv_setsv(ERRSV, &PL_sv_undef);     /* and clear the error */
     return(err);
   }
@@ -411,7 +411,7 @@ char *owl_perlconfig_initperl(const char * file, int *Pargc, char ***Pargv, char
   eval_pv("use BarnOwl;", FALSE);
 
   if (SvTRUE(ERRSV)) {
-    err=owl_strdup(SvPV_nolen(ERRSV));
+    err=g_strdup(SvPV_nolen(ERRSV));
     sv_setsv (ERRSV, &PL_sv_undef);     /* and clear the error */
     return(err);
   }
@@ -449,7 +449,7 @@ char *owl_perlconfig_execute(const char *line)
     sv_setsv (ERRSV, &PL_sv_undef);     /* and clear the error */
   }
 
-  out = owl_strdup(SvPV(response, len));
+  out = g_strdup(SvPV(response, len));
   FREETMPS;
   LEAVE;
 
@@ -528,7 +528,7 @@ char *owl_perlconfig_perlcmd(const owl_cmd *cmd, int argc, const char *const *ar
       croak("Perl command %s returned more than one value!", cmd->name);
     rv = POPs;
     if(SvTRUE(rv)) {
-      ret = owl_strdup(SvPV_nolen(rv));
+      ret = g_strdup(SvPV_nolen(rv));
     }
   }
 
diff --git a/regex.c b/regex.c
index 280642d..4e38fc2 100644
--- a/regex.c
+++ b/regex.c
@@ -13,7 +13,7 @@ int owl_regex_create(owl_regex *re, const char *string)
   char buff1[LINE];
   const char *ptr;
   
-  re->string=owl_strdup(string);
+  re->string=g_strdup(string);
 
   ptr=string;
   re->negate=0;
diff --git a/select.c b/select.c
index ef0f921..d224695 100644
--- a/select.c
+++ b/select.c
@@ -22,7 +22,7 @@ owl_timer *owl_select_add_timer(const char* name, int after, int interval, void
   t->callback = cb;
   t->destroy = destroy;
   t->data = data;
-  t->name = name ? owl_strdup(name) : NULL;
+  t->name = name ? g_strdup(name) : NULL;
 
   *timers = g_list_insert_sorted(*timers, t,
                                  (GCompareFunc)_owl_select_timer_cmp);
diff --git a/style.c b/style.c
index 1e47466..eab0293 100644
--- a/style.c
+++ b/style.c
@@ -4,7 +4,7 @@
 /* Assumes owenership of one existing ref on `obj`*/
 void owl_style_create_perl(owl_style *s, const char *name, SV *obj)
 {
-  s->name=owl_strdup(name);
+  s->name=g_strdup(name);
   s->perlobj = obj;
 }
 
diff --git a/text.c b/text.c
index efb9e2d..30a03f0 100644
--- a/text.c
+++ b/text.c
@@ -192,7 +192,7 @@ char *owl_text_wordwrap(const char *in, int col)
   char *out;
   int cur, lastspace, len, lastnewline;
 
-  out=owl_strdup(in);
+  out=g_strdup(in);
   len=strlen(in);
   cur=0;
   lastspace=-1;
@@ -275,7 +275,7 @@ char *owl_text_substitute(const char *in, const char *from, const char *to)
   char *out;
   int   outlen, tolen, fromlen, inpos=0, outpos=0;
 
-  if (!*from) return owl_strdup(in);
+  if (!*from) return g_strdup(in);
 
   outlen = strlen(in)+1;
   tolen  = strlen(to);
diff --git a/util.c b/util.c
index 897a633..fbc394f 100644
--- a/util.c
+++ b/util.c
@@ -291,13 +291,6 @@ char *owl_util_minutes_to_timestr(int in)
   return(out);
 }
 
-/* hooks for doing memory allocation et. al. in owl */
-
-char *owl_strdup(const char *s1)
-{
-  return(g_strdup(s1));
-}
-
 /* allocates memory and returns the string or null.
  * caller must free the string. 
  */
@@ -362,15 +355,15 @@ char *owl_util_get_default_tty(void)
   char *out;
 
   if (getenv("DISPLAY")) {
-    out=owl_strdup(getenv("DISPLAY"));
+    out=g_strdup(getenv("DISPLAY"));
   } else if ((tmp=ttyname(fileno(stdout)))!=NULL) {
-    out=owl_strdup(tmp);
+    out=g_strdup(tmp);
     if (!strncmp(out, "/dev/", 5)) {
       g_free(out);
-      out=owl_strdup(tmp+5);
+      out=g_strdup(tmp+5);
     }
   } else {
-    out=owl_strdup("unknown");
+    out=g_strdup("unknown");
   }
   return(out);
 }
@@ -383,7 +376,7 @@ char *owl_util_stripnewlines(const char *in)
   
   char  *tmp, *ptr1, *ptr2, *out;
 
-  ptr1=tmp=owl_strdup(in);
+  ptr1=tmp=g_strdup(in);
   while (ptr1[0]=='\n') {
     ptr1++;
   }
@@ -393,7 +386,7 @@ char *owl_util_stripnewlines(const char *in)
     ptr2--;
   }
 
-  out=owl_strdup(ptr1);
+  out=g_strdup(ptr1);
   g_free(tmp);
   return(out);
 }
@@ -544,7 +537,7 @@ char * owl_util_baseclass(const char * class)
     class += 2;
   }
 
-  start = owl_strdup(class);
+  start = g_strdup(class);
   end = start + strlen(start) - 1;
   while(end > start && *end == 'd' && *(end-1) == '.') {
     end -= 2;
@@ -600,7 +593,7 @@ char * owl_strip_format_chars(const char *in)
     if (s) strcat(r,s);
   }
   else {
-    r = owl_strdup("");
+    r = g_strdup("");
   }
   return r;
 }
@@ -629,9 +622,9 @@ char * owl_validate_utf8(const char *in)
 {
   char *out;
   if (g_utf8_validate(in, -1, NULL)) {
-    out = owl_strdup(in);
+    out = g_strdup(in);
   } else {
-    out = owl_strdup("");
+    out = g_strdup("");
   }
   return out;
 }
diff --git a/variable.c b/variable.c
index 5f9a1d8..b18ccc8 100644
--- a/variable.c
+++ b/variable.c
@@ -481,9 +481,9 @@ int owl_variable_dict_setup(owl_vardict *vd) {
     cur = g_new(owl_variable, 1);
     *cur = *var;
     /* strdup all the strings so we can delete them consistently. */
-    cur->name = owl_strdup(var->name);
-    cur->summary = owl_strdup(var->summary);
-    cur->description = owl_strdup(var->description);
+    cur->name = g_strdup(var->name);
+    cur->summary = g_strdup(var->summary);
+    cur->description = g_strdup(var->description);
     switch (cur->type) {
     case OWL_VARIABLE_OTHER:
       cur->set_fn(cur, cur->pval_default);
@@ -551,17 +551,17 @@ void owl_variable_dict_add_variable(owl_vardict * vardict,
 
 owl_variable * owl_variable_newvar(const char *name, const char *summary, const char * description) {
   owl_variable * var = g_new0(owl_variable, 1);
-  var->name = owl_strdup(name);
-  var->summary = owl_strdup(summary);
-  var->description = owl_strdup(description);
+  var->name = g_strdup(name);
+  var->summary = g_strdup(summary);
+  var->description = g_strdup(description);
   return var;
 }
 
 void owl_variable_update(owl_variable *var, const char *summary, const char *desc) {
   if(var->summary) g_free(var->summary);
-  var->summary = owl_strdup(summary);
+  var->summary = g_strdup(summary);
   if(var->description) g_free(var->description);
-  var->description = owl_strdup(desc);
+  var->description = g_strdup(desc);
 }
 
 void owl_variable_dict_newvar_string(owl_vardict * vd, const char *name, const char *summ, const char * desc, const char * initval) {
@@ -569,11 +569,11 @@ void owl_variable_dict_newvar_string(owl_vardict * vd, const char *name, const c
   if(old) {
     owl_variable_update(old, summ, desc);
     if(old->pval_default) g_free(old->pval_default);
-    old->pval_default = owl_strdup(initval);
+    old->pval_default = g_strdup(initval);
   } else {
     owl_variable * var = owl_variable_newvar(name, summ, desc);
     var->type = OWL_VARIABLE_STRING;
-    var->pval_default = owl_strdup(initval);
+    var->pval_default = g_strdup(initval);
     var->set_fn = owl_variable_string_set_default;
     var->set_fromstring_fn = owl_variable_string_set_fromstring_default;
     var->get_fn = owl_variable_get_default;
@@ -1008,7 +1008,7 @@ int owl_variable_string_set_default(owl_variable *v, const void *newval) {
     if (!v->validate_fn(v, newval)) return(-1);
   }
   if (v->val) g_free(v->val);
-  v->val = owl_strdup(newval);
+  v->val = g_strdup(newval);
   return(0);
 }
 
diff --git a/view.c b/view.c
index c29f279..cdb6692 100644
--- a/view.c
+++ b/view.c
@@ -3,7 +3,7 @@
 
 void owl_view_create(owl_view *v, const char *name, owl_filter *f, const owl_style *s)
 {
-  v->name=owl_strdup(name);
+  v->name=g_strdup(name);
   v->filter=f;
   v->style=s;
   owl_messagelist_create(&(v->ml));
diff --git a/zephyr.c b/zephyr.c
index b926cee..b3c9dfd 100644
--- a/zephyr.c
+++ b/zephyr.c
@@ -22,7 +22,7 @@ Code_t ZResetAuthentication(void);
 static char *owl_zephyr_dotfile(const char *name, const char *input)
 {
   if (input != NULL)
-    return owl_strdup(input);
+    return g_strdup(input);
   else
     return owl_sprintf("%s/%s", owl_global_get_homedir(&g), name);
 }
@@ -291,13 +291,13 @@ int owl_zephyr_loadsubs(const char *filename, int error_on_nofile)
     /* add it to the list of subs */
     if ((tmp = strtok(start, ",\n\r")) == NULL)
       continue;
-    subs[count].zsub_class = owl_strdup(tmp);
+    subs[count].zsub_class = g_strdup(tmp);
     if ((tmp=strtok(NULL, ",\n\r")) == NULL)
       continue;
-    subs[count].zsub_classinst = owl_strdup(tmp);
+    subs[count].zsub_classinst = g_strdup(tmp);
     if ((tmp = strtok(NULL, " \t\n\r")) == NULL)
       continue;
-    subs[count].zsub_recipient = owl_strdup(tmp);
+    subs[count].zsub_recipient = g_strdup(tmp);
 
     /* if it started with '-' then add it to the global punt list, and
      * remove it from the list of subs. */
@@ -336,9 +336,9 @@ int owl_zephyr_loadbarnowldefaultsubs(void)
   ZResetAuthentication();
   count=0;
 
-  subs[count].zsub_class=owl_strdup("message");
-  subs[count].zsub_classinst=owl_strdup("*");
-  subs[count].zsub_recipient=owl_strdup("%me%");
+  subs[count].zsub_class=g_strdup("message");
+  subs[count].zsub_classinst=g_strdup("*");
+  subs[count].zsub_recipient=g_strdup("%me%");
   count++;
 
   ret = owl_zephyr_loadsubs_helper(subs, count);
@@ -399,8 +399,8 @@ int owl_zephyr_loadloginsubs(const char *filename)
         subs = g_renew(ZSubscription_t, subs, numSubs);
       }
 
-      subs[count].zsub_class = owl_strdup("login");
-      subs[count].zsub_recipient = owl_strdup("*");
+      subs[count].zsub_class = g_strdup("login");
+      subs[count].zsub_recipient = g_strdup("*");
       subs[count].zsub_classinst = long_zuser(buffer);
 
       count++;
@@ -482,7 +482,7 @@ char *owl_zephyr_get_field(const ZNotice_t *n, int j)
 
   /* If there's no message here, just run along now */
   if (n->z_message_len == 0)
-    return(owl_strdup(""));
+    return(g_strdup(""));
 
   count=save=0;
   for (i=0; i<n->z_message_len; i++) {
@@ -490,7 +490,7 @@ char *owl_zephyr_get_field(const ZNotice_t *n, int j)
       count++;
       if (count==j) {
 	/* just found the end of the field we're looking for */
-	return(owl_strdup(n->z_message+save));
+	return(g_strdup(n->z_message+save));
       } else {
 	save=i+1;
       }
@@ -501,7 +501,7 @@ char *owl_zephyr_get_field(const ZNotice_t *n, int j)
     return g_strndup(n->z_message + save, n->z_message_len - save);
   }
 
-  return(owl_strdup(""));
+  return(g_strdup(""));
 }
 
 char *owl_zephyr_get_field_as_utf8(const ZNotice_t *n, int j)
@@ -510,7 +510,7 @@ char *owl_zephyr_get_field_as_utf8(const ZNotice_t *n, int j)
 
   /* If there's no message here, just run along now */
   if (n->z_message_len == 0)
-    return(owl_strdup(""));
+    return(g_strdup(""));
 
   count=save=0;
   for (i = 0; i < n->z_message_len; i++) {
@@ -533,12 +533,12 @@ char *owl_zephyr_get_field_as_utf8(const ZNotice_t *n, int j)
     return out;
   }
 
-  return(owl_strdup(""));
+  return(g_strdup(""));
 }
 #else
 char *owl_zephyr_get_field(void *n, int j)
 {
-  return(owl_strdup(""));
+  return(g_strdup(""));
 }
 char *owl_zephyr_get_field_as_utf8(void *n, int j)
 {
@@ -577,7 +577,7 @@ char *owl_zephyr_get_message(const ZNotice_t *n, const owl_message *m)
 {
   /* don't let ping messages have a body */
   if (!strcasecmp(n->z_opcode, "ping")) {
-    return(owl_strdup(""));
+    return(g_strdup(""));
   }
 
   /* deal with MIT NOC messages */
@@ -803,18 +803,18 @@ void owl_zephyr_handle_ack(const ZNotice_t *retnotice)
       owl_function_adminmsg("", buff);
 
       memset(&zw, 0, sizeof(zw));
-      zw.class = owl_strdup(retnotice->z_class);
-      zw.inst  = owl_strdup(retnotice->z_class_inst);
+      zw.class = g_strdup(retnotice->z_class);
+      zw.inst  = g_strdup(retnotice->z_class_inst);
       realm = strchr(retnotice->z_recipient, '@');
       if(realm) {
-        zw.realm = owl_strdup(realm + 1);
+        zw.realm = g_strdup(realm + 1);
       } else {
-        zw.realm = owl_strdup(owl_zephyr_get_realm());
+        zw.realm = g_strdup(owl_zephyr_get_realm());
       }
-      zw.opcode = owl_strdup(retnotice->z_opcode);
-      zw.zsig   = owl_strdup("");
+      zw.opcode = g_strdup(retnotice->z_opcode);
+      zw.zsig   = g_strdup("");
       owl_list_create(&(zw.recips));
-      owl_list_append_element(&(zw.recips), owl_strdup(tmp));
+      owl_list_append_element(&(zw.recips), g_strdup(tmp));
 
       owl_log_outgoing_zephyr_error(&zw, buff);
 
@@ -869,7 +869,7 @@ void owl_zephyr_zaway(const owl_message *m)
   if (owl_global_is_smartstrip(&g)) {
     to=owl_zephyr_smartstripped_user(owl_message_get_sender(m));
   } else {
-    to=owl_strdup(owl_message_get_sender(m));
+    to=g_strdup(owl_message_get_sender(m));
   }
 
   send_zephyr("",
@@ -933,7 +933,7 @@ char *owl_zephyr_zlocate(const char *user, int auth)
   if (numlocs == 0) {
     result = owl_sprintf("%s: Hidden or not logged in\n", myuser);
   } else {
-    result = owl_strdup("");
+    result = g_strdup("");
     for (; numlocs; numlocs--) {
       ZGetLocations(&locations, &one);
       p = owl_sprintf("%s%s: %s\t%s\t%s\n",
@@ -949,7 +949,7 @@ char *owl_zephyr_zlocate(const char *user, int auth)
 
   return result;
 #else
-  return owl_strdup("");
+  return g_strdup("");
 #endif
 }
 
@@ -1131,9 +1131,9 @@ char *owl_zephyr_getsubs(void)
 
   ret=ZRetrieveSubscriptions(0, &num);
   if (ret==ZERR_TOOMANYSUBS) {
-    return(owl_strdup("Zephyr: too many subscriptions\n"));
+    return(g_strdup("Zephyr: too many subscriptions\n"));
   } else if (ret || (num <= 0)) {
-    return(owl_strdup("Zephyr: error retriving subscriptions\n"));
+    return(g_strdup("Zephyr: error retriving subscriptions\n"));
   }
 
   buf = g_string_new("");
@@ -1142,7 +1142,7 @@ char *owl_zephyr_getsubs(void)
     if ((ret = ZGetSubscriptions(&sub, &one)) != ZERR_NONE) {
       ZFlushSubscriptions();
       g_string_free(buf, true);
-      return owl_strdup("Error while getting subscriptions\n");
+      return g_strdup("Error while getting subscriptions\n");
     } else {
       /* g_string_append_printf would be backwards. */
       char *tmp = owl_sprintf("<%s,%s,%s>\n",
@@ -1157,7 +1157,7 @@ char *owl_zephyr_getsubs(void)
   ZFlushSubscriptions();
   return g_string_free(buf, false);
 #else
-  return(owl_strdup("Zephyr not available"));
+  return(g_strdup("Zephyr not available"));
 #endif
 }
 
@@ -1184,7 +1184,7 @@ char *short_zuser(const char *in)
 {
   char *out, *ptr;
 
-  out=owl_strdup(in);
+  out=g_strdup(in);
   ptr=strchr(out, '@');
   if (ptr) {
     if (!strcasecmp(ptr+1, owl_zephyr_get_realm())) {
@@ -1200,7 +1200,7 @@ char *short_zuser(const char *in)
 char *long_zuser(const char *in)
 {
   if (strchr(in, '@')) {
-    return(owl_strdup(in));
+    return(g_strdup(in));
   }
   return(owl_sprintf("%s@%s", in, owl_zephyr_get_realm()));
 }
@@ -1214,7 +1214,7 @@ char *owl_zephyr_smartstripped_user(const char *in)
 {
   char *slash, *dot, *realm, *out;
 
-  out = owl_strdup(in);
+  out = g_strdup(in);
 
   /* bail immeaditly if we don't have to do any work */
   slash = strchr(out, '/');
diff --git a/zwrite.c b/zwrite.c
index 795282a..08f595f 100644
--- a/zwrite.c
+++ b/zwrite.c
@@ -34,7 +34,7 @@ int owl_zwrite_create_from_line(owl_zwrite *z, const char *line)
   z->cc=0;
   z->noping=0;
   owl_list_create(&(z->recips));
-  z->zwriteline = owl_strdup(line);
+  z->zwriteline = g_strdup(line);
 
   /* parse the command line for options */
   argv=owl_parseline(line, &argc);
@@ -45,7 +45,7 @@ int owl_zwrite_create_from_line(owl_zwrite *z, const char *line)
   }
   myargc=argc;
   if (myargc && *(myargv[0])!='-') {
-    z->cmd=owl_strdup(myargv[0]);
+    z->cmd=g_strdup(myargv[0]);
     myargc--;
     myargv++;
   }
@@ -136,10 +136,10 @@ int owl_zwrite_create_from_line(owl_zwrite *z, const char *line)
   }
 
   /* now deal with defaults */
-  if (z->class==NULL) z->class=owl_strdup("message");
-  if (z->inst==NULL) z->inst=owl_strdup("personal");
-  if (z->realm==NULL) z->realm=owl_strdup("");
-  if (z->opcode==NULL) z->opcode=owl_strdup("");
+  if (z->class==NULL) z->class=g_strdup("message");
+  if (z->inst==NULL) z->inst=g_strdup("personal");
+  if (z->realm==NULL) z->realm=g_strdup("");
+  if (z->opcode==NULL) z->opcode=g_strdup("");
   /* z->message is allowed to stay NULL */
 
   if(msg) {
@@ -177,7 +177,7 @@ void owl_zwrite_send_ping(const owl_zwrite *z)
     if (strcmp(z->realm, "")) {
       to = owl_sprintf("%s@%s", (const char *) owl_list_get_element(&(z->recips), i), z->realm);
     } else {
-      to = owl_strdup(owl_list_get_element(&(z->recips), i));
+      to = g_strdup(owl_list_get_element(&(z->recips), i));
     }
     send_ping(to, z->class, z->inst);
     g_free(to);
@@ -202,7 +202,7 @@ void owl_zwrite_set_message(owl_zwrite *z, const char *msg)
 
   j=owl_list_get_size(&(z->recips));
   if (j>0 && z->cc) {
-    toline = owl_strdup( "CC: ");
+    toline = g_strdup( "CC: ");
     for (i=0; i<j; i++) {
       tmp = toline;
       if (strcmp(z->realm, "")) {
@@ -251,7 +251,7 @@ int owl_zwrite_send_message(const owl_zwrite *z)
       if (strcmp(z->realm, "")) {
         to = owl_sprintf("%s@%s", (const char *) owl_list_get_element(&(z->recips), i), z->realm);
       } else {
-        to = owl_strdup( owl_list_get_element(&(z->recips), i));
+        to = g_strdup( owl_list_get_element(&(z->recips), i));
       }
       ret = send_zephyr(z->opcode, z->zsig, z->class, z->inst, to, z->message);
       /* Abort on the first error, to match the zwrite binary. */
@@ -318,7 +318,7 @@ const char *owl_zwrite_get_zsig(const owl_zwrite *z)
 void owl_zwrite_set_zsig(owl_zwrite *z, const char *zsig)
 {
   if(z->zsig) g_free(z->zsig);
-  z->zsig = owl_strdup(zsig);
+  z->zsig = g_strdup(zsig);
 }
 
 void owl_zwrite_get_recipstr(const owl_zwrite *z, char *buff)
-- 
1.7.4


From 35b334e871b03bafe98b0064bb93587980242db4 Mon Sep 17 00:00:00 2001
From: Anders Kaseorg <andersk@mit.edu>
Date: Thu, 27 Aug 2009 00:56:39 -0400
Subject: [PATCH 5/5] Replace owl_sprintf with g_strdup_printf.

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
---
 aim.c        |    2 +-
 cmd.c        |    6 +++---
 commands.c   |    2 +-
 functions.c  |   40 ++++++++++++++++++++--------------------
 global.c     |    6 +++---
 keymap.c     |    2 +-
 logging.c    |   10 +++++-----
 message.c    |    6 +++---
 owl.c        |    2 +-
 perlconfig.c |    6 +++---
 util.c       |   21 ++++-----------------
 zephyr.c     |   24 ++++++++++++------------
 zwrite.c     |   12 ++++++------
 13 files changed, 63 insertions(+), 76 deletions(-)

diff --git a/aim.c b/aim.c
index 5f7179a..f4a164b 100644
--- a/aim.c
+++ b/aim.c
@@ -200,7 +200,7 @@ void owl_aim_successful_login(const char *screenname)
   owl_global_set_aimloggedin(&g, screenname);
   owl_global_set_doaimevents(&g); /* this should already be on */
   owl_function_makemsg("%s logged in", screenname);
-  buff=owl_sprintf("Logged in to AIM as %s", screenname);
+  buff=g_strdup_printf("Logged in to AIM as %s", screenname);
   owl_function_adminmsg("", buff);
   g_free(buff);
 
diff --git a/cmd.c b/cmd.c
index 5feaf9e..dc3ba01 100644
--- a/cmd.c
+++ b/cmd.c
@@ -146,7 +146,7 @@ int owl_cmd_create_alias(owl_cmd *cmd, const char *name, const char *aliased_to)
   memset(cmd, 0, sizeof(owl_cmd));
   cmd->name = g_strdup(name);
   cmd->cmd_aliased_to = g_strdup(aliased_to);
-  cmd->summary = owl_sprintf("%s%s", OWL_CMD_ALIAS_SUMMARY_PREFIX, aliased_to);
+  cmd->summary = g_strdup_printf("%s%s", OWL_CMD_ALIAS_SUMMARY_PREFIX, aliased_to);
   return(0);
 }
 
@@ -185,7 +185,7 @@ char *owl_cmd_execute(const owl_cmd *cmd, const owl_cmddict *cd, const owl_conte
       owl_function_makemsg("Alias loop detected for '%s'.", cmdbuff);
     } else {
       cmdbuffargs = skiptokens(cmdbuff, 1);
-      newcmd = owl_sprintf("%s %s", cmd->cmd_aliased_to, cmdbuffargs);
+      newcmd = g_strdup_printf("%s %s", cmd->cmd_aliased_to, cmdbuffargs);
       rv = owl_function_command(newcmd);
       g_free(newcmd);
     } 
@@ -246,7 +246,7 @@ const char *owl_cmd_get_summary(const owl_cmd *cmd) {
 /* returns a summary line describing this keymap.  the caller must free. */
 char *owl_cmd_describe(const owl_cmd *cmd) {
   if (!cmd || !cmd->name || !cmd->summary) return NULL;
-  return owl_sprintf("%-25s - %s", cmd->name, cmd->summary);
+  return g_strdup_printf("%-25s - %s", cmd->name, cmd->summary);
 }
 
 
diff --git a/commands.c b/commands.c
index 41c31ec..4f98e07 100644
--- a/commands.c
+++ b/commands.c
@@ -1412,7 +1412,7 @@ char *owl_command_get_shift(int argc, const char *const *argv, const char *buff)
     owl_function_makemsg("Wrong number of arguments for %s", argv[0]);
     return NULL;
   }
-  return owl_sprintf("%d", owl_global_get_rightshift(&g));
+  return g_strdup_printf("%d", owl_global_get_rightshift(&g));
 }
 
 void owl_command_set_shift(int shift)
diff --git a/functions.c b/functions.c
index 1b2d9b0..8067744 100644
--- a/functions.c
+++ b/functions.c
@@ -95,13 +95,13 @@ void owl_function_show_styles(void) {
 static void _owl_function_timer_append_fmtext(gpointer data, gpointer user_data) {
   owl_fmtext *fm = user_data;
   owl_timer *timer = data;
-  char *str = owl_sprintf("- %s: in %d seconds",
+  char *str = g_strdup_printf("- %s: in %d seconds",
                           timer->name ? timer->name : "(unnamed)",
                           (int)(timer->time - time(NULL)));
   owl_fmtext_append_normal(fm, str);
   g_free(str);
   if (timer->interval) {
-    str = owl_sprintf(", repeat every %d seconds", timer->interval);
+    str = g_strdup_printf(", repeat every %d seconds", timer->interval);
     owl_fmtext_append_normal(fm, str);
     g_free(str);
   }
@@ -132,7 +132,7 @@ char *owl_function_style_describe(const char *name) {
   } else {
     desc = "???";
   }
-  s = owl_sprintf("%-20s - %s%s", name, 
+  s = g_strdup_printf("%-20s - %s%s", name, 
 		  0==owl_style_validate(style)?"":"[INVALID] ",
 		  desc);
   return s;
@@ -215,7 +215,7 @@ void owl_function_show_quickstart(void)
     if (owl_perlconfig_is_function("BarnOwl::Hooks::_get_quickstart")) {
         char *perlquickstart = owl_perlconfig_execute("BarnOwl::Hooks::_get_quickstart()");
         if (perlquickstart) {
-            char *result = owl_sprintf("%s%s", message, perlquickstart);
+            char *result = g_strdup_printf("%s%s", message, perlquickstart);
             owl_function_adminmsg("BarnOwl Quickstart", result);
             g_free(result);
             g_free(perlquickstart);
@@ -310,7 +310,7 @@ void owl_function_start_edit_win(const char *line, void (*callback)(owl_editwin
   e = owl_global_set_typwin_active(&g, OWL_EDITWIN_STYLE_MULTILINE,
                                    owl_global_get_msg_history(&g));
   owl_editwin_set_dotsend(e);
-  s = owl_sprintf("----> %s\n", line);
+  s = g_strdup_printf("----> %s\n", line);
   owl_editwin_set_locktext(e, s);
   g_free(s);
 
@@ -353,7 +353,7 @@ void owl_function_aimwrite_setup(const char *to)
 {
   /* TODO: We probably actually want an owl_aimwrite object like
    * owl_zwrite. */
-  char *line = owl_sprintf("aimwrite %s", to);
+  char *line = g_strdup_printf("aimwrite %s", to);
   owl_function_write_setup("message");
   owl_function_start_edit_win(line,
                               &owl_callback_aimwrite,
@@ -437,7 +437,7 @@ void owl_function_zcrypt(owl_zwrite *z, const char *msg)
   }
   old_msg = g_strdup(owl_zwrite_get_message(z));
 
-  zcrypt = owl_sprintf("%s/zcrypt", owl_get_bindir());
+  zcrypt = g_strdup_printf("%s/zcrypt", owl_get_bindir());
   argv[0] = "zcrypt";
   argv[1] = "-E";
   argv[2] = "-c"; argv[3] = owl_zwrite_get_class(z);
@@ -1990,7 +1990,7 @@ char *owl_function_exec(int argc, const char *const *argv, const char *buff, int
   }
 
   buff = skiptokens(buff, 1);
-  newbuff = owl_sprintf("%s%s", buff, redirect);
+  newbuff = g_strdup_printf("%s%s", buff, redirect);
 
   if (type == OWL_OUTPUT_POPUP) {
     owl_popexec_new(newbuff);
@@ -2192,7 +2192,7 @@ char *owl_function_create_negative_filter(const char *filtername)
   if (!strncmp(filtername, "not-", 4)) {
     newname=g_strdup(filtername+4);
   } else {
-    newname=owl_sprintf("not-%s", filtername);
+    newname=g_strdup_printf("not-%s", filtername);
   }
 
   tmpfilt=owl_global_get_filter(&g, newname);
@@ -2244,7 +2244,7 @@ void owl_function_show_filter(const char *name)
     return;
   }
   tmp = owl_filter_print(f);
-  buff = owl_sprintf("%s: %s", owl_filter_get_name(f), tmp);
+  buff = g_strdup_printf("%s: %s", owl_filter_get_name(f), tmp);
   owl_function_popless_text(buff);
   g_free(buff);
   g_free(tmp);
@@ -2304,9 +2304,9 @@ char *owl_function_classinstfilt(const char *c, const char *i, int related)
 
   /* name for the filter */
   if (!instance) {
-    filtname = owl_sprintf("%sclass-%s", related ? "related-" : "", class);
+    filtname = g_strdup_printf("%sclass-%s", related ? "related-" : "", class);
   } else {
-    filtname = owl_sprintf("%sclass-%s-instance-%s", related ? "related-" : "", class, instance);
+    filtname = g_strdup_printf("%sclass-%s-instance-%s", related ? "related-" : "", class, instance);
   }
   /* downcase it */
   {
@@ -2378,7 +2378,7 @@ char *owl_function_zuserfilt(const char *longuser)
 
   /* name for the filter */
   shortuser = short_zuser(longuser);
-  filtname = owl_sprintf("user-%s", shortuser);
+  filtname = g_strdup_printf("user-%s", shortuser);
   g_free(shortuser);
 
   /* if it already exists then go with it.  This lets users override */
@@ -2424,7 +2424,7 @@ char *owl_function_aimuserfilt(const char *user)
   char *escuser;
 
   /* name for the filter */
-  filtname=owl_sprintf("aimuser-%s", user);
+  filtname=g_strdup_printf("aimuser-%s", user);
 
   /* if it already exists then go with it.  This lets users override */
   if (owl_global_get_filter(&g, filtname)) {
@@ -2434,7 +2434,7 @@ char *owl_function_aimuserfilt(const char *user)
   /* create the new-internal filter */
   escuser = owl_text_quote(user, OWL_REGEX_QUOTECHARS, OWL_REGEX_QUOTEWITH);
 
-  argbuff = owl_sprintf(
+  argbuff = g_strdup_printf(
       "( type ^aim$ and ( ( sender ^%1$s$ and recipient ^%2$s$ ) or "
       "( sender ^%2$s$ and recipient ^%1$s$ ) ) )",
       escuser, owl_global_get_aim_screenname_for_filters(&g));
@@ -2461,7 +2461,7 @@ char *owl_function_typefilt(const char *type)
   char *argbuff, *filtname, *esctype;
 
   /* name for the filter */
-  filtname=owl_sprintf("type-%s", type);
+  filtname=g_strdup_printf("type-%s", type);
 
   /* if it already exists then go with it.  This lets users override */
   if (owl_global_get_filter(&g, filtname)) {
@@ -2520,7 +2520,7 @@ static char *owl_function_smartfilter_cc(const owl_message *m) {
 
   ccs = owl_message_get_attribute_value(m, "zephyr_ccs");
 
-  filtname = owl_sprintf("conversation-%s", ccs);
+  filtname = g_strdup_printf("conversation-%s", ccs);
   owl_text_tr(filtname, ' ', '-');
 
   if (owl_global_get_filter(&g, filtname)) {
@@ -2762,8 +2762,8 @@ void owl_function_show_colors(void)
   owl_fmtext_append_normal_color(&fm, "white\n", OWL_COLOR_WHITE, OWL_COLOR_DEFAULT);
 
   for(i = 8; i < COLORS; ++i) {
-    char* str1 = owl_sprintf("%4i:     ",i);
-    char* str2 = owl_sprintf("%i\n",i);
+    char* str1 = g_strdup_printf("%4i:     ",i);
+    char* str2 = g_strdup_printf("%i\n",i);
     owl_fmtext_append_normal(&fm,str1);
     owl_fmtext_append_normal_color(&fm, str2, i, OWL_COLOR_DEFAULT);
     g_free(str1);
@@ -3391,7 +3391,7 @@ void owl_function_log_err(const char *string)
   date=g_strdup(ctime(&now));
   date[strlen(date)-1]='\0';
 
-  buff = owl_sprintf("%s %s", date, string);
+  buff = g_strdup_printf("%s %s", date, string);
 
   owl_errqueue_append_err(owl_global_get_errqueue(&g), buff);
 
diff --git a/global.c b/global.c
index 86af1b3..2e13f3d 100644
--- a/global.c
+++ b/global.c
@@ -93,7 +93,7 @@ void owl_global_init(owl_global *g) {
 
   g->confdir = NULL;
   g->startupfile = NULL;
-  cd = owl_sprintf("%s/%s", g->homedir, OWL_CONFIG_DIR);
+  cd = g_strdup_printf("%s/%s", g->homedir, OWL_CONFIG_DIR);
   owl_global_set_confdir(g, cd);
   g_free(cd);
 
@@ -381,7 +381,7 @@ void owl_global_set_confdir(owl_global *g, const char *cd) {
   g_free(g->confdir);
   g->confdir = g_strdup(cd);
   g_free(g->startupfile);
-  g->startupfile = owl_sprintf("%s/startup", cd);
+  g->startupfile = g_strdup_printf("%s/startup", cd);
 }
 
 const char *owl_global_get_startupfile(const owl_global *g) {
@@ -964,7 +964,7 @@ FILE *owl_global_get_debug_file_handle(owl_global *g) {
 
     g->debug_file = NULL;
 
-    path = owl_sprintf("%s.%d", filename, getpid());
+    path = g_strdup_printf("%s.%d", filename, getpid());
     fd = open(path, O_CREAT|O_WRONLY|O_EXCL, 0600);
     g_free(path);
 
diff --git a/keymap.c b/keymap.c
index 2ba9409..fdf8c65 100644
--- a/keymap.c
+++ b/keymap.c
@@ -84,7 +84,7 @@ int owl_keymap_remove_binding(owl_keymap *km, const char *keyseq)
 char *owl_keymap_summary(const owl_keymap *km)
 {
   if (!km || !km->name || !km->desc) return NULL;
-  return owl_sprintf("%-15s - %s", km->name, km->desc);
+  return g_strdup_printf("%-15s - %s", km->name, km->desc);
 }
 
 /* Appends details about the keymap to fm */
diff --git a/logging.c b/logging.c
index 9eb0d06..faa45ea 100644
--- a/logging.c
+++ b/logging.c
@@ -148,13 +148,13 @@ void owl_log_outgoing(const owl_message *m)
 
     to = short_zuser(owl_message_get_recipient(m));
   } else if (owl_message_is_type_jabber(m)) {
-    to = owl_sprintf("jabber:%s", owl_message_get_recipient(m));
+    to = g_strdup_printf("jabber:%s", owl_message_get_recipient(m));
     owl_text_tr(to, '/', '_');
   } else if (owl_message_is_type_aim(m)) {
     char *temp2;
     temp = owl_aim_normalize_screenname(owl_message_get_recipient(m));
     temp2 = g_utf8_strdown(temp,-1);
-    to = owl_sprintf("aim:%s", temp2);
+    to = g_strdup_printf("aim:%s", temp2);
     g_free(temp2);
     g_free(temp);
   } else {
@@ -268,16 +268,16 @@ void owl_log_incoming(const owl_message *m)
     char *normalto, *temp;
     temp = owl_aim_normalize_screenname(owl_message_get_sender(m));
     normalto = g_utf8_strdown(temp, -1);
-    from=frombuff=owl_sprintf("aim:%s", normalto);
+    from=frombuff=g_strdup_printf("aim:%s", normalto);
     g_free(normalto);
     g_free(temp);
   } else if (owl_message_is_type_loopback(m)) {
     from=frombuff=g_strdup("loopback");
   } else if (owl_message_is_type_jabber(m)) {
     if (personal) {
-      from=frombuff=owl_sprintf("jabber:%s",owl_message_get_sender(m));
+      from=frombuff=g_strdup_printf("jabber:%s",owl_message_get_sender(m));
     } else {
-      from=frombuff=owl_sprintf("jabber:%s",owl_message_get_recipient(m));
+      from=frombuff=g_strdup_printf("jabber:%s",owl_message_get_recipient(m));
     }
   } else {
     from=frombuff=g_strdup("unknown");
diff --git a/message.c b/message.c
index d5852e6..f6a3f33 100644
--- a/message.c
+++ b/message.c
@@ -126,9 +126,9 @@ void owl_message_attributes_tofmtext(const owl_message *m, owl_fmtext *fm) {
   j=owl_list_get_size(&(m->attributes));
   for (i=0; i<j; i++) {
     p=owl_list_get_element(&(m->attributes), i);
-    buff=owl_sprintf("  %-15.15s: %-35.35s\n", owl_pair_get_key(p), owl_pair_get_value(p));
+    buff=g_strdup_printf("  %-15.15s: %-35.35s\n", owl_pair_get_key(p), owl_pair_get_value(p));
     if(buff == NULL) {
-      buff=owl_sprintf("  %-15.15s: %-35.35s\n", owl_pair_get_key(p), "<error>");
+      buff=g_strdup_printf("  %-15.15s: %-35.35s\n", owl_pair_get_key(p), "<error>");
       if(buff == NULL)
         buff=g_strdup("   <error>\n");
     }
@@ -887,7 +887,7 @@ void owl_message_create_from_znotice(owl_message *m, const ZNotice_t *n)
     int status;
     char *zcrypt;
 
-    zcrypt = owl_sprintf("%s/zcrypt", owl_get_bindir());
+    zcrypt = g_strdup_printf("%s/zcrypt", owl_get_bindir());
 
     rv = call_filter(zcrypt, argv, owl_message_get_body(m), &out, &status);
     g_free(zcrypt);
diff --git a/owl.c b/owl.c
index 5e2578c..0cc972b 100644
--- a/owl.c
+++ b/owl.c
@@ -433,7 +433,7 @@ void stderr_redirect_handler(const owl_io_dispatch *d, void *data)
     buf[navail] = '\0';
   }
 
-  err = owl_sprintf("[stderr]\n%s", buf);
+  err = g_strdup_printf("[stderr]\n%s", buf);
 
   owl_function_log_err(err);
   g_free(err);
diff --git a/perlconfig.c b/perlconfig.c
index 6595dd9..0ef10ab 100644
--- a/perlconfig.c
+++ b/perlconfig.c
@@ -149,7 +149,7 @@ SV *owl_perlconfig_message2hashref(const owl_message *m)
   if(!type || !*type) type = "generic";
   utype = g_strdup(type);
   utype[0] = toupper(type[0]);
-  blessas = owl_sprintf("BarnOwl::Message::%s", utype);
+  blessas = g_strdup_printf("BarnOwl::Message::%s", utype);
 
   hr = newRV_noinc((SV*)h);
   stash =  gv_stashpv(blessas,0);
@@ -239,7 +239,7 @@ owl_message * owl_perlconfig_hashref2message(SV *msg)
     n->z_default_format = zstr("[zephyr created from perl]");
     n->z_multinotice = zstr("[zephyr created from perl]");
     n->z_num_other_fields = 0;
-    n->z_message = owl_sprintf("%s%c%s", owl_message_get_zsig(m), '\0', owl_message_get_body(m));
+    n->z_message = g_strdup_printf("%s%c%s", owl_message_get_zsig(m), '\0', owl_message_get_body(m));
     n->z_message_len = strlen(owl_message_get_zsig(m)) + strlen(owl_message_get_body(m)) + 1;
   }
 #endif
@@ -403,7 +403,7 @@ char *owl_perlconfig_initperl(const char * file, int *Pargc, char ***Pargv, char
 
   /* Add the system lib path to @INC */
   inc = get_av("INC", 0);
-  path = owl_sprintf("%s/lib", owl_get_datadir());
+  path = g_strdup_printf("%s/lib", owl_get_datadir());
   av_unshift(inc, 1);
   av_store(inc, 0, owl_new_sv(path));
   g_free(path);
diff --git a/util.c b/util.c
index fbc394f..7be32a2 100644
--- a/util.c
+++ b/util.c
@@ -284,26 +284,13 @@ char *owl_util_minutes_to_timestr(int in)
   run-=hours*60;
 
   if (days>0) {
-    out=owl_sprintf("%i d %2.2i:%2.2li", days, hours, run);
+    out=g_strdup_printf("%i d %2.2i:%2.2li", days, hours, run);
   } else {
-    out=owl_sprintf("    %2.2i:%2.2li", hours, run);
+    out=g_strdup_printf("    %2.2i:%2.2li", hours, run);
   }
   return(out);
 }
 
-/* allocates memory and returns the string or null.
- * caller must free the string. 
- */
-char *owl_sprintf(const char *fmt, ...)
-{
-  va_list ap;
-  char *ret = NULL;
-  va_start(ap, fmt);
-  ret = g_strdup_vprintf(fmt, ap);
-  va_end(ap);
-  return ret;
-}
-
 /* These are in order of their value in owl.h */
 static const struct {
   int number;
@@ -467,7 +454,7 @@ int owl_util_file_deleteline(const char *filename, const char *line, int backup)
   if (actual_filename == NULL)
     return -1; /* resolving the symlink failed, but we already logged this error */
 
-  newfile = owl_sprintf("%s.new", actual_filename);
+  newfile = g_strdup_printf("%s.new", actual_filename);
   if ((new = fopen(newfile, "w")) == NULL) {
     owl_function_error("Cannot open %s (for writing): %s",
 		       actual_filename, strerror(errno));
@@ -499,7 +486,7 @@ int owl_util_file_deleteline(const char *filename, const char *line, int backup)
   fclose(old);
 
   if (backup) {
-    backupfile = owl_sprintf("%s.backup", actual_filename);
+    backupfile = g_strdup_printf("%s.backup", actual_filename);
     unlink(backupfile);
     if (link(actual_filename, backupfile) != 0) {
       owl_function_error("Cannot link %s: %s", backupfile, strerror(errno));
diff --git a/zephyr.c b/zephyr.c
index b3c9dfd..40326d4 100644
--- a/zephyr.c
+++ b/zephyr.c
@@ -24,7 +24,7 @@ static char *owl_zephyr_dotfile(const char *name, const char *input)
   if (input != NULL)
     return g_strdup(input);
   else
-    return owl_sprintf("%s/%s", owl_global_get_homedir(&g), name);
+    return g_strdup_printf("%s/%s", owl_global_get_homedir(&g), name);
 }
 
 #ifdef HAVE_LIBZEPHYR
@@ -587,7 +587,7 @@ char *owl_zephyr_get_message(const ZNotice_t *n, const owl_message *m)
     field3 = owl_zephyr_get_field(n, 3);
     field4 = owl_zephyr_get_field(n, 4);
 
-    msg = owl_sprintf("%s service on %s %s\n%s", n->z_opcode, n->z_class_inst, field3, field4);
+    msg = g_strdup_printf("%s service on %s %s\n%s", n->z_opcode, n->z_class_inst, field3, field4);
     g_free(field3);
     g_free(field4);
     if (msg) {
@@ -605,7 +605,7 @@ char *owl_zephyr_get_message(const ZNotice_t *n, const owl_message *m)
     field4 = owl_zephyr_get_field(n, 4);
     field5 = owl_zephyr_get_field(n, 5);
     
-    msg = owl_sprintf("New transaction [%s] entered in %s\nFrom: %s (%s)\nSubject: %s", field1, field2, field3, field5, field4);
+    msg = g_strdup_printf("New transaction [%s] entered in %s\nFrom: %s (%s)\nSubject: %s", field1, field2, field3, field5, field4);
     g_free(field1);
     g_free(field2);
     g_free(field3);
@@ -621,7 +621,7 @@ char *owl_zephyr_get_message(const ZNotice_t *n, const owl_message *m)
     
     field1 = owl_zephyr_get_field(n, 1);
     
-    msg = owl_sprintf("MOIRA %s on %s: %s", n->z_class_inst, owl_message_get_hostname(m), field1);
+    msg = g_strdup_printf("MOIRA %s on %s: %s", n->z_class_inst, owl_message_get_hostname(m), field1);
     g_free(field1);
     if (msg) {
       return msg;
@@ -881,9 +881,9 @@ void owl_zephyr_zaway(const owl_message *m)
 
   myuser=short_zuser(to);
   if (!strcasecmp(owl_message_get_instance(m), "personal")) {
-    tmpbuff = owl_sprintf("zwrite %s", myuser);
+    tmpbuff = g_strdup_printf("zwrite %s", myuser);
   } else {
-    tmpbuff = owl_sprintf("zwrite -i %s %s", owl_message_get_instance(m), myuser);
+    tmpbuff = g_strdup_printf("zwrite -i %s %s", owl_message_get_instance(m), myuser);
   }
   g_free(myuser);
   g_free(to);
@@ -926,17 +926,17 @@ char *owl_zephyr_zlocate(const char *user, int auth)
   ZResetAuthentication();
   ret = ZLocateUser(zstr(user), &numlocs, auth ? ZAUTH : ZNOAUTH);
   if (ret != ZERR_NONE)
-    return owl_sprintf("Error locating user %s: %s\n",
+    return g_strdup_printf("Error locating user %s: %s\n",
 		       user, error_message(ret));
 
   myuser = short_zuser(user);
   if (numlocs == 0) {
-    result = owl_sprintf("%s: Hidden or not logged in\n", myuser);
+    result = g_strdup_printf("%s: Hidden or not logged in\n", myuser);
   } else {
     result = g_strdup("");
     for (; numlocs; numlocs--) {
       ZGetLocations(&locations, &one);
-      p = owl_sprintf("%s%s: %s\t%s\t%s\n",
+      p = g_strdup_printf("%s%s: %s\t%s\t%s\n",
 			  result, myuser,
 			  locations.host ? locations.host : "?",
 			  locations.tty ? locations.tty : "?",
@@ -1016,7 +1016,7 @@ void owl_zephyr_delsub(const char *filename, const char *class, const char *inst
 /* caller must free the return */
 char *owl_zephyr_makesubline(const char *class, const char *inst, const char *recip)
 {
-  return owl_sprintf("%s,%s,%s\n", class, inst, !strcmp(recip, "") ? "*" : recip);
+  return g_strdup_printf("%s,%s,%s\n", class, inst, !strcmp(recip, "") ? "*" : recip);
 }
 
 
@@ -1145,7 +1145,7 @@ char *owl_zephyr_getsubs(void)
       return g_strdup("Error while getting subscriptions\n");
     } else {
       /* g_string_append_printf would be backwards. */
-      char *tmp = owl_sprintf("<%s,%s,%s>\n",
+      char *tmp = g_strdup_printf("<%s,%s,%s>\n",
                               sub.zsub_class,
                               sub.zsub_classinst,
                               sub.zsub_recipient);
@@ -1202,7 +1202,7 @@ char *long_zuser(const char *in)
   if (strchr(in, '@')) {
     return(g_strdup(in));
   }
-  return(owl_sprintf("%s@%s", in, owl_zephyr_get_realm()));
+  return(g_strdup_printf("%s@%s", in, owl_zephyr_get_realm()));
 }
 
 /* strip out the instance from a zsender's principal.  Preserves the
diff --git a/zwrite.c b/zwrite.c
index 08f595f..852e2df 100644
--- a/zwrite.c
+++ b/zwrite.c
@@ -175,7 +175,7 @@ void owl_zwrite_send_ping(const owl_zwrite *z)
   j=owl_list_get_size(&(z->recips));
   for (i=0; i<j; i++) {
     if (strcmp(z->realm, "")) {
-      to = owl_sprintf("%s@%s", (const char *) owl_list_get_element(&(z->recips), i), z->realm);
+      to = g_strdup_printf("%s@%s", (const char *) owl_list_get_element(&(z->recips), i), z->realm);
     } else {
       to = g_strdup(owl_list_get_element(&(z->recips), i));
     }
@@ -206,16 +206,16 @@ void owl_zwrite_set_message(owl_zwrite *z, const char *msg)
     for (i=0; i<j; i++) {
       tmp = toline;
       if (strcmp(z->realm, "")) {
-        toline = owl_sprintf( "%s%s@%s ", toline, (const char *) owl_list_get_element(&(z->recips), i), z->realm);
+        toline = g_strdup_printf( "%s%s@%s ", toline, (const char *) owl_list_get_element(&(z->recips), i), z->realm);
       } else {
-        toline = owl_sprintf( "%s%s ", toline, (const char *) owl_list_get_element(&(z->recips), i));
+        toline = g_strdup_printf( "%s%s ", toline, (const char *) owl_list_get_element(&(z->recips), i));
       }
       g_free(tmp);
       tmp = NULL;
     }
     tmp = owl_validate_utf8(msg);
     tmp2 = owl_text_expand_tabs(tmp);
-    z->message=owl_sprintf("%s\n%s", toline, tmp2);
+    z->message=g_strdup_printf("%s\n%s", toline, tmp2);
     g_free(toline);
     g_free(tmp);
     g_free(tmp2);
@@ -249,7 +249,7 @@ int owl_zwrite_send_message(const owl_zwrite *z)
   if (j>0) {
     for (i=0; i<j; i++) {
       if (strcmp(z->realm, "")) {
-        to = owl_sprintf("%s@%s", (const char *) owl_list_get_element(&(z->recips), i), z->realm);
+        to = g_strdup_printf("%s@%s", (const char *) owl_list_get_element(&(z->recips), i), z->realm);
       } else {
         to = g_strdup( owl_list_get_element(&(z->recips), i));
       }
@@ -261,7 +261,7 @@ int owl_zwrite_send_message(const owl_zwrite *z)
       to = NULL;
     }
   } else {
-    to = owl_sprintf( "@%s", z->realm);
+    to = g_strdup_printf( "@%s", z->realm);
     ret = send_zephyr(z->opcode, z->zsig, z->class, z->inst, to, z->message);
   }
   g_free(to);
-- 
1.7.4


home help back first fref pref prev next nref lref last post