Просмотр исходного кода

Use new/delete for memberlist so non-pointer members can be constructed

Bryan Drewery 7 лет назад
Родитель
Сommit
36a6e3d862
4 измененных файлов с 12 добавлено и 15 удалено
  1. 7 0
      src/chan.h
  2. 1 1
      src/mod/channels.mod/chanmisc.cc
  3. 2 9
      src/mod/irc.mod/chan.cc
  4. 2 5
      src/mod/irc.mod/irc.cc

+ 7 - 0
src/chan.h

@@ -59,6 +59,13 @@ typedef struct memstruct {
   bool is_me;
   bd::HashTable<flood_t, time_t>     *floodtime; // floodtime[FLOOD_PRIVMSG] = now;
   bd::HashTable<flood_t, int>         *floodnum; // floodnum[FLOOD_PRIVMSG] = 1;
+
+  void* operator new (size_t size) {
+    return calloc(1, size);
+  }
+  void operator delete (void* p) {
+    free(p);
+  }
 } memberlist;
 
 namespace std {

+ 1 - 1
src/mod/channels.mod/chanmisc.cc

@@ -978,7 +978,7 @@ static void init_channel(struct chanset_t *chan, bool reset)
   chan->channel.invite = (masklist *) calloc(1, sizeof(masklist));
   init_masklist(chan->channel.invite);
 
-  chan->channel.member = (memberlist *) calloc(1, sizeof(memberlist));
+  chan->channel.member = new memberlist;
   chan->channel.member->nick[0] = 0;
   chan->channel.member->next = NULL;
   chan->channel.topic = NULL;

+ 2 - 9
src/mod/irc.mod/chan.cc

@@ -256,20 +256,13 @@ static memberlist *newmember(struct chanset_t *chan, char *nick)
 {
   memberlist *x = chan->channel.member, 
              *lx = NULL, 
-             *n = (memberlist *) calloc(1, sizeof(memberlist));
+             *n = new memberlist;
 
   /* This sorts the list */
   while (x && x->nick[0] && (rfc_casecmp(x->nick, nick) < 0)) {
     lx = x;
     x = x->next;
   }
-  /*
-   * redundant as calloc is used
-   n->next = NULL;
-   n->split = 0L;
-   n->last = 0L;
-   n->delay = 0L;
-   */
 
   strlcpy(n->nick, nick, sizeof(n->nick));
   n->rfc_nick = new RfcString(n->nick);
@@ -300,7 +293,7 @@ void delete_member(memberlist* m) {
   delete m->floodnum;
   delete m->rfc_nick;
   m->rfc_nick = NULL;
-  free(m);
+  delete m;
 }
 
 static bool member_getuser(memberlist* m, bool act_on_lookup) {

+ 2 - 5
src/mod/irc.mod/irc.cc

@@ -1201,11 +1201,8 @@ killmember(struct chanset_t *chan, char *nick, bool cacheMember)
     }
     putlog(LOG_MISC, "*", "(!) actually I know of %d members.", chan->channel.members);
   }
-  if (unlikely(!chan->channel.member)) {
-    chan->channel.member = (memberlist *) calloc(1, sizeof(memberlist));
-    chan->channel.member->nick[0] = 0;
-    chan->channel.member->next = NULL;
-  }
+  if (unlikely(!chan->channel.member))
+    chan->channel.member = new memberlist;
   return 1;
 }