📄 alloc.c
字号:
(struct option_cache *)(rval -> expression); dmalloc_reuse (rval, file, line, 0); } else { rval = dmalloc (sizeof (struct option_cache), file, line); if (!rval) return 0; } memset (rval, 0, sizeof *rval); return option_cache_reference (cptr, rval, file, line);}int option_cache_reference (ptr, src, file, line) struct option_cache **ptr; struct option_cache *src; const char *file; int line;{ if (!ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } if (*ptr) { log_error ("%s(%d): non-null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else *ptr = (struct option_cache *)0;#endif } *ptr = src; src -> refcnt++; rc_register (file, line, ptr, src, src -> refcnt, 0, RC_MISC); return 1;}int buffer_allocate (ptr, len, file, line) struct buffer **ptr; unsigned len; const char *file; int line;{ struct buffer *bp; bp = dmalloc (len + sizeof *bp, file, line); if (!bp) return 0; memset (bp, 0, sizeof *bp); bp -> refcnt = 0; return buffer_reference (ptr, bp, file, line);}int buffer_reference (ptr, bp, file, line) struct buffer **ptr; struct buffer *bp; const char *file; int line;{ if (!ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } if (*ptr) { log_error ("%s(%d): non-null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else *ptr = (struct buffer *)0;#endif } *ptr = bp; bp -> refcnt++; rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC); return 1;}int buffer_dereference (ptr, file, line) struct buffer **ptr; const char *file; int line;{ struct buffer *bp; if (!ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } if (!*ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } (*ptr) -> refcnt--; rc_register (file, line, ptr, *ptr, (*ptr) -> refcnt, 1, RC_MISC); if (!(*ptr) -> refcnt) { dfree ((*ptr), file, line); } else if ((*ptr) -> refcnt < 0) { log_error ("%s(%d): negative refcnt!", file, line);#if defined (DEBUG_RC_HISTORY) dump_rc_history (*ptr);#endif#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } *ptr = (struct buffer *)0; return 1;}int dns_host_entry_allocate (ptr, hostname, file, line) struct dns_host_entry **ptr; const char *hostname; const char *file; int line;{ struct dns_host_entry *bp; bp = dmalloc (strlen (hostname) + sizeof *bp, file, line); if (!bp) return 0; memset (bp, 0, sizeof *bp); bp -> refcnt = 0; strcpy (bp -> hostname, hostname); return dns_host_entry_reference (ptr, bp, file, line);}int dns_host_entry_reference (ptr, bp, file, line) struct dns_host_entry **ptr; struct dns_host_entry *bp; const char *file; int line;{ if (!ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } if (*ptr) { log_error ("%s(%d): non-null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else *ptr = (struct dns_host_entry *)0;#endif } *ptr = bp; bp -> refcnt++; rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC); return 1;}int dns_host_entry_dereference (ptr, file, line) struct dns_host_entry **ptr; const char *file; int line;{ struct dns_host_entry *bp; if (!ptr || !*ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } (*ptr) -> refcnt--; rc_register (file, line, ptr, *ptr, (*ptr) -> refcnt, 1, RC_MISC); if (!(*ptr) -> refcnt) dfree ((*ptr), file, line); if ((*ptr) -> refcnt < 0) { log_error ("%s(%d): negative refcnt!", file, line);#if defined (DEBUG_RC_HISTORY) dump_rc_history (*ptr);#endif#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } *ptr = (struct dns_host_entry *)0; return 1;}int option_state_allocate (ptr, file, line) struct option_state **ptr; const char *file; int line;{ unsigned size; if (!ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } if (*ptr) { log_error ("%s(%d): non-null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else *ptr = (struct option_state *)0;#endif } size = sizeof **ptr + (universe_count - 1) * sizeof (VOIDPTR); *ptr = dmalloc (size, file, line); if (*ptr) { memset (*ptr, 0, size); (*ptr) -> universe_count = universe_count; (*ptr) -> refcnt = 1; rc_register (file, line, ptr, *ptr, (*ptr) -> refcnt, 0, RC_MISC); return 1; } return 0;}int option_state_reference (ptr, bp, file, line) struct option_state **ptr; struct option_state *bp; const char *file; int line;{ if (!ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } if (*ptr) { log_error ("%s(%d): non-null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else *ptr = (struct option_state *)0;#endif } *ptr = bp; bp -> refcnt++; rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC); return 1;}int option_state_dereference (ptr, file, line) struct option_state **ptr; const char *file; int line;{ int i; struct option_state *options; if (!ptr || !*ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } options = *ptr; *ptr = (struct option_state *)0; --options -> refcnt; rc_register (file, line, ptr, options, options -> refcnt, 1, RC_MISC); if (options -> refcnt > 0) return 1; if (options -> refcnt < 0) { log_error ("%s(%d): negative refcnt!", file, line);#if defined (DEBUG_RC_HISTORY) dump_rc_history (options);#endif#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } /* Loop through the per-universe state. */ for (i = 0; i < options -> universe_count; i++) if (options -> universes [i] && universes [i] -> option_state_dereference) ((*(universes [i] -> option_state_dereference)) (universes [i], options, file, line)); dfree (options, file, line); return 1;}int executable_statement_allocate (ptr, file, line) struct executable_statement **ptr; const char *file; int line;{ struct executable_statement *bp; bp = dmalloc (sizeof *bp, file, line); if (!bp) return 0; memset (bp, 0, sizeof *bp); return executable_statement_reference (ptr, bp, file, line);}int executable_statement_reference (ptr, bp, file, line) struct executable_statement **ptr; struct executable_statement *bp; const char *file; int line;{ if (!ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } if (*ptr) { log_error ("%s(%d): non-null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else *ptr = (struct executable_statement *)0;#endif } *ptr = bp; bp -> refcnt++; rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC); return 1;}static struct packet *free_packets;#if defined (DEBUG_MEMORY_LEAKAGE) || \ defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)void relinquish_free_packets (){ struct packet *p, *n; for (p = free_packets; p; p = n) { n = (struct packet *)(p -> raw); dfree (p, MDL); } free_packets = (struct packet *)0;}#endifint packet_allocate (ptr, file, line) struct packet **ptr; const char *file; int line;{ int size; struct packet *p; if (!ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } if (*ptr) { log_error ("%s(%d): non-null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else *ptr = (struct packet *)0;#endif } if (free_packets) { p = free_packets; free_packets = (struct packet *)(p -> raw); dmalloc_reuse (p, file, line, 1); } else { p = dmalloc (sizeof *p, file, line); } if (p) { memset (p, 0, sizeof *p); return packet_reference (ptr, p, file, line); } return 0;}int packet_reference (ptr, bp, file, line) struct packet **ptr; struct packet *bp; const char *file; int line;{ if (!ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } if (*ptr) { log_error ("%s(%d): non-null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else *ptr = (struct packet *)0;#endif } *ptr = bp; bp -> refcnt++; rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC); return 1;}int packet_dereference (ptr, file, line) struct packet **ptr; const char *file; int line;{ int i; struct packet *packet; if (!ptr || !*ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } packet = *ptr; *ptr = (struct packet *)0; --packet -> refcnt; rc_register (file, line, ptr, packet, packet -> refcnt, 1, RC_MISC); if (packet -> refcnt > 0) return 1; if (packet -> refcnt < 0) { log_error ("%s(%d): negative refcnt!", file, line);#if defined (DEBUG_RC_HISTORY) dump_rc_history (packet);#endif#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } if (packet -> options) option_state_dereference (&packet -> options, file, line); if (packet -> interface) interface_dereference (&packet -> interface, MDL); if (packet -> shared_network) shared_network_dereference (&packet -> shared_network, MDL); for (i = 0; i < packet -> class_count && i < PACKET_MAX_CLASSES; i++) { if (packet -> classes [i]) omapi_object_dereference ((omapi_object_t **) &packet -> classes [i], MDL); } packet -> raw = (struct dhcp_packet *)free_packets; free_packets = packet; dmalloc_reuse (free_packets, (char *)0, 0, 0); return 1;}int dns_zone_allocate (ptr, file, line) struct dns_zone **ptr; const char *file; int line;{ int size; struct dns_zone *d; if (!ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } if (*ptr) { log_error ("%s(%d): non-null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else *ptr = (struct dns_zone *)0;#endif } d = dmalloc (sizeof *d, file, line); if (d) { memset (d, 0, sizeof *d); return dns_zone_reference (ptr, d, file, line); } return 0;}int dns_zone_reference (ptr, bp, file, line) struct dns_zone **ptr; struct dns_zone *bp; const char *file; int line;{ if (!ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } if (*ptr) { log_error ("%s(%d): non-null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else *ptr = (struct dns_zone *)0;#endif } *ptr = bp; bp -> refcnt++; rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC); return 1;}int binding_scope_allocate (ptr, file, line) struct binding_scope **ptr; const char *file; int line;{ struct binding_scope *bp; if (!ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } if (*ptr) { log_error ("%s(%d): non-null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } bp = dmalloc (sizeof *bp, file, line); if (!bp) return 0; memset (bp, 0, sizeof *bp); binding_scope_reference (ptr, bp, file, line); return 1;}int binding_scope_reference (ptr, bp, file, line) struct binding_scope **ptr; struct binding_scope *bp; const char *file; int line;{ if (!ptr) { log_error ("%s(%d): null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else return 0;#endif } if (*ptr) { log_error ("%s(%d): non-null pointer", file, line);#if defined (POINTER_DEBUG) abort ();#else *ptr = (struct binding_scope *)0;#endif } *ptr = bp; bp -> refcnt++; rc_register (file, line, ptr, bp, bp -> refcnt, 0, RC_MISC); return 1;}/* Make a copy of the data in data_string, upping the buffer reference count if there's a buffer. */void data_string_copy (dest, src, file, line) struct data_string *dest; struct data_string *src; const char *file; int line;{ if (src -> buffer) buffer_reference (&dest -> buffer, src -> buffer, file, line); dest -> data = src -> data; dest -> terminated = src -> terminated; dest -> len = src -> len;}/* Release the reference count to a data string's buffer (if any) and zero out the other information, yielding the null data string. */void data_string_forget (data, file, line) struct data_string *data; const char *file; int line;{ if (data -> buffer) buffer_dereference (&data -> buffer, file, line); memset (data, 0, sizeof *data);}/* Make a copy of the data in data_string, upping the buffer reference count if there's a buffer. */void data_string_truncate (dp, len) struct data_string *dp; int len;{ if (len < dp -> len) { dp -> terminated = 0; dp -> len = len; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -