pool.h
上传用户:pycemail
上传日期:2007-01-04
资源大小:329k
文件大小:3k
源码类别:

Ftp客户端

开发平台:

Unix_Linux

  1. /*
  2.  * ProFTPD - FTP server daemon
  3.  * Copyright (c) 1997, 1998 Public Flood Software
  4.  *
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
  18.  */
  19. /* Memory allocation/anti-leak system.  Yes, this *IS* stolen from Apache
  20.  * also.  What can I say?  It makes sense, and it's safe (more overhead
  21.  * though)
  22.  * $Id: pool.h,v 1.3 1999/08/31 01:31:59 flood Exp $
  23.  */
  24. #ifndef __POOL_H
  25. #define __POOL_H
  26. typedef struct pool pool;
  27. extern pool *permanent_pool;
  28. void init_alloc();
  29. pool *make_sub_pool(pool*); /* All pools are sub-pools of perm */
  30. pool *make_named_sub_pool(pool*,const char*);
  31. /* Low-level memory allocation */
  32. void *xmalloc(size_t);
  33. void *xcalloc(size_t,size_t);
  34. void *xrealloc(void*,size_t);
  35. void pool_release_free_block_list(void);
  36. /* Clears out _everything_ in a pool, destroying any sub-pools */
  37. void destroy_pool(struct pool*);
  38. void cleanup_for_exec();
  39. /* allocate memory from a pool */
  40. void *palloc(struct pool*, int nbytes);
  41. void *pcalloc(struct pool*, int nbytes);
  42. extern char *pstrdup(struct pool*, const char *s);
  43. extern char *pstrndup(struct pool*, const char *s, int n);
  44. char *pstrcat(struct pool*,...);       /* Must be char* */
  45. char *pdircat(struct pool*,...); /* Must be char* */
  46. /* MM debugging */
  47. void debug_walk_pools();
  48. /* Array management */
  49. typedef struct {
  50.   pool *pool;
  51.   int elt_size;
  52.   int nelts;
  53.   int nalloc;
  54.   void *elts;
  55. } array_header;
  56. array_header *make_array(pool *p, int nelts, int elt_size);
  57. void *push_array(array_header*);
  58. void array_cat(array_header *dst, const array_header *src);
  59. array_header *append_arrays(pool *, const array_header *,
  60.                             const array_header *);
  61. array_header *copy_array(pool *p, const array_header *src);
  62. array_header *copy_array_hdr(pool *p, const array_header *src);
  63.  
  64. /* Alarm signals can easily interfere with the pooled memory operations,
  65.    thus block_alarms() and unblock_alarms() provide for re-entrant
  66.    security. */
  67. extern void block_alarms();
  68. extern void unblock_alarms();
  69. FILE *pfopen(struct pool *, const char *name, const char *fmode);
  70. FILE *pfdopen(struct pool *, int fd, const char *fmode);
  71. int popenf(struct pool *, const char *name, int flg, int mode);
  72. int pfclose(struct pool *, FILE *);
  73. int pclosef(struct pool *, int fd);
  74. /* Functions for cleanup handlers */
  75. void register_cleanup(pool*,void*,void (*plain_cleanup)(void*),
  76.                       void (*child_cleanup)(void*));
  77. void kill_cleanup(pool*,void*,void (*cleanup)(void*));
  78. void cleanup_for_exec();
  79. /* minimum free bytes in a new block pool */
  80. #define BLOCK_MINFREE TUNABLE_NEW_POOL_SIZE
  81. /* accounting */
  82. long bytes_in_pool(pool *p);
  83. long bytes_in_free_blocks();
  84. #endif /* __POOL_H */