예제 #1
0
파일: main.c 프로젝트: Estella/eggdrop-1.8
/* For mem.c : calculate memory we SHOULD be using
 */
int expected_memory(void)
{
  int tot;

  tot = expmem_chanprog() + expmem_users() + expmem_misc() + expmem_dccutil() +
        expmem_botnet() + expmem_tcl() + expmem_tclhash() + expmem_net() +
        expmem_modules(0) + expmem_language() + expmem_tcldcc() +
        expmem_tclmisc() + expmem_dns();
#ifdef TLS 
  tot += expmem_tls();
#endif
  return tot;
}
예제 #2
0
파일: mem.c 프로젝트: Abysim/NyanLion
void debug_mem_to_dcc(int idx)
{
#ifdef DEBUG_MEM
#  define MAX_MEM 13
  unsigned long exp[MAX_MEM], use[MAX_MEM], l;
  int i, j;
  char fn[20], sofar[81];
  module_entry *me;
  char *p;

  exp[0] = expmem_language();
  exp[1] = expmem_chanprog();
  exp[2] = expmem_misc();
  exp[3] = expmem_users();
  exp[4] = expmem_net();
  exp[5] = expmem_dccutil();
  exp[6] = expmem_botnet();
  exp[7] = expmem_tcl();
  exp[8] = expmem_tclhash();
  exp[9] = expmem_tclmisc();
  exp[10] = expmem_modules(1);
  exp[11] = expmem_tcldcc();
  exp[12] = expmem_dns();

  for (me = module_list; me; me = me->next)
    me->mem_work = 0;

  for (i = 0; i < MAX_MEM; i++)
    use[i] = 0;

  for (i = 0; i < lastused; i++) {
    strcpy(fn, memtbl[i].file);
    p = strchr(fn, ':');
    if (p)
      *p = 0;
    l = memtbl[i].size;
    if (!strcmp(fn, "language.c"))
      use[0] += l;
    else if (!strcmp(fn, "chanprog.c"))
      use[1] += l;
    else if (!strcmp(fn, "misc.c"))
      use[2] += l;
    else if (!strcmp(fn, "userrec.c"))
      use[3] += l;
    else if (!strcmp(fn, "net.c"))
      use[4] += l;
    else if (!strcmp(fn, "dccutil.c"))
      use[5] += l;
    else if (!strcmp(fn, "botnet.c"))
      use[6] += l;
    else if (!strcmp(fn, "tcl.c"))
      use[7] += l;
    else if (!strcmp(fn, "tclhash.c"))
      use[8] += l;
    else if (!strcmp(fn, "tclmisc.c"))
      use[9] += l;
    else if (!strcmp(fn, "modules.c"))
      use[10] += l;
    else if (!strcmp(fn, "tcldcc.c"))
      use[11] += l;
    else if (!strcmp(fn, "dns.c"))
      use[12] += l;
    else if (p) {
      for (me = module_list; me; me = me->next)
        if (!strcmp(fn, me->name))
          me->mem_work += l;
    } else
      dprintf(idx, "Not logging file %s!\n", fn);
  }

  for (i = 0; i < MAX_MEM; i++) {
    switch (i) {
    case 0:
      strcpy(fn, "language.c");
      break;
    case 1:
      strcpy(fn, "chanprog.c");
      break;
    case 2:
      strcpy(fn, "misc.c");
      break;
    case 3:
      strcpy(fn, "userrec.c");
      break;
    case 4:
      strcpy(fn, "net.c");
      break;
    case 5:
      strcpy(fn, "dccutil.c");
      break;
    case 6:
      strcpy(fn, "botnet.c");
      break;
    case 7:
      strcpy(fn, "tcl.c");
      break;
    case 8:
      strcpy(fn, "tclhash.c");
      break;
    case 9:
      strcpy(fn, "tclmisc.c");
      break;
    case 10:
      strcpy(fn, "modules.c");
      break;
    case 11:
      strcpy(fn, "tcldcc.c");
      break;
    case 12:
      strcpy(fn, "dns.c");
      break;
    }

    if (use[i] == exp[i])
      dprintf(idx, "File '%-10s' accounted for %lu/%lu (ok)\n", fn, exp[i],
              use[i]);
    else {
      dprintf(idx, "File '%-10s' accounted for %lu/%lu (debug follows:)\n",
              fn, exp[i], use[i]);
      strcpy(sofar, "   ");
      for (j = 0; j < lastused; j++) {
        if ((p = strchr(memtbl[j].file, ':')))
          *p = 0;
        if (!egg_strcasecmp(memtbl[j].file, fn)) {
          if (p)
            sprintf(&sofar[strlen(sofar)], "%-10s/%-4d:(%04d) ",
                    p + 1, memtbl[j].line, memtbl[j].size);
          else
            sprintf(&sofar[strlen(sofar)], "%-4d:(%04d) ",
                    memtbl[j].line, memtbl[j].size);

          if (strlen(sofar) > 60) {
            sofar[strlen(sofar) - 1] = 0;
            dprintf(idx, "%s\n", sofar);
            strcpy(sofar, "   ");
          }
        }
        if (p)
          *p = ':';
      }
      if (sofar[0]) {
        sofar[strlen(sofar) - 1] = 0;
        dprintf(idx, "%s\n", sofar);
      }
    }
  }

  for (me = module_list; me; me = me->next) {
    Function *f = me->funcs;
    int expt = 0;

    if ((f != NULL) && (f[MODCALL_EXPMEM] != NULL))
      expt = f[MODCALL_EXPMEM] ();
    if (me->mem_work == expt)
      dprintf(idx, "Module '%-10s' accounted for %lu/%lu (ok)\n", me->name,
              expt, me->mem_work);
    else {
      dprintf(idx, "Module '%-10s' accounted for %lu/%lu (debug follows:)\n",
              me->name, expt, me->mem_work);
      strcpy(sofar, "   ");
      for (j = 0; j < lastused; j++) {
        strcpy(fn, memtbl[j].file);
        if ((p = strchr(fn, ':')) != NULL) {
          *p = 0;
          if (!egg_strcasecmp(fn, me->name)) {
            sprintf(&sofar[strlen(sofar)], "%-10s/%-4d:(%04X) ", p + 1,
                    memtbl[j].line, memtbl[j].size);
            if (strlen(sofar) > 60) {
              sofar[strlen(sofar) - 1] = 0;
              dprintf(idx, "%s\n", sofar);
              strcpy(sofar, "   ");
            }
            *p = ':';
          }
        }
      }
      if (sofar[0]) {
        sofar[strlen(sofar) - 1] = 0;
        dprintf(idx, "%s\n", sofar);
      }
    }
  }

  dprintf(idx, "--- End of debug memory list.\n");
#else
  dprintf(idx, "Compiled without extensive memory debugging (sorry).\n");
#endif
  tell_netdebug(idx);
}