ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/libstatgrab/src/libstatgrab/vector.h
(Generate patch)

Comparing projects/libstatgrab/src/libstatgrab/vector.h (file contents):
Revision 1.3 by ats, Mon Apr 5 00:20:05 2004 UTC vs.
Revision 1.4 by ats, Mon Apr 5 00:45:17 2004 UTC

# Line 22 | Line 22 | typedef struct {
22                  (vector_destroy_function) destroy_fn \
23          }
24  
25 < int statgrab_vector_resize(char **vector, vector_header *h, int count);
25 > /* A pointer value that won't be returned by malloc, and isn't NULL, so can be
26 > * used as a sentinel by allocation routines that need to return NULL
27 > * sometimes. */
28 > extern char statgrab_vector_sentinel_value;
29 > static void *statgrab_vector_sentinel = &statgrab_vector_sentinel_value;
30  
31 + /* Internal function to resize the vector. Ideally it would take void ** as the
32 + * first parameter, but ANSI strict-aliasing rules would then prevent it from
33 + * doing anything with it, so we return a sentinel value as above instead if
34 + * allocation fails. */
35 + void *statgrab_vector_resize(void *vector, vector_header *h, int count);
36 +
37   /* Declare a vector. Specify the init/destroy functions as NULL if you don't
38   * need them. The block size is how many items to allocate at once. */
39   #define VECTOR_DECLARE(name, item_type, block_size, init_fn, destroy_fn) \
# Line 41 | Line 51 | int statgrab_vector_resize(char **vector, vector_heade
51  
52   /* Resize a vector. Returns 0 on success, -1 on out-of-memory. On
53   * out-of-memory, the old contents of the vector will be destroyed and the old
54 < * vector will be freed. */
54 > * vector will be freed.
55 > *
56 > * This is ugly because it needs to check for the sentinel value.
57 > */
58   #define VECTOR_RESIZE(name, num_items) \
59 <        statgrab_vector_resize((char **) &name, &name##_header, num_items)
59 >        (((name = statgrab_vector_resize((char *) name, &name##_header, num_items)) \
60 >          == statgrab_vector_sentinel) ? -1 : 0)
61  
62   /* Free a vector, destroying its contents. */
63   #define VECTOR_FREE(name) \

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines