GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages


Manual Reference Pages  -  DYNARR_RESIZE (3)

NAME

dynarr, dynarr_init, dynarr_resize, dynarr_free - simple dynamic arrays

CONTENTS

Synopsis
Returns
Author

SYNOPSIS

#include <publib.h>

void dynarr_init(struct dynarr *da, size_t elsize);
int dynarr_resize(struct dynarr *da, size_t newsize);
void dynarr_free(struct dynarr *da);

DESCRIPTION

These functions make it easier to use dynamic arrays, i.e., arrays that are allocated with malloc(3) and resized with realloc(3). Below is a typical code fragment for implementing a dynamic array that is resized as more input is read.

char *p, *line;
size_t alloc, len;

len = 0; alloc = 1024; if ((line = malloc(alloc)) == NULL) abort();

while (fgets(line + len, alloc-len, stdin) != NULL) {         len = strlen(line);         alloc += 1024;         if ((p = realloc(alloc)) == NULL) abort();         alloc = p; }

(The error handling is intentionally simplified.) Below is the above fragment with the dynarr(3).

struct dynarr da;

dynarr_init(&da); while (fgets((char *)da.data + da.used, da.alloc-da.len, stdin) != NULL) {         da.used = strlen(da.data);         if (dynarr_resize(&da, da.alloc + 1024) == -1) abort(); }

The code is a bit simpler, and all the memory allocation details and most of the error checking code is hidden away.

The dynamic array is represented by a struct dynarr:

struct dynarr {
    void *data;
    size_t alloc, used;
};

The interface to the dynamic allocation has intentionally been made unopaque.

dynarr_init initializes a struct dynarr to be an empty array, dynarr_resize sets its size to be newsize, and dynarr_free frees the array (it will become an empty array again).

RETURNS

dynarr_resize returns -1 if it failed, 0 if it succeeded. It does not change the array in any way if it failed.

SEE ALSO

publib(3), malloc(3), realloc(3), strdup(3)

AUTHOR

Lars Wirzenius (lars.wirzenius@helsinki.fi)
Search for    or go to Top of page |  Section 3 |  Main Index


Publib DYNARR (3) C Programmer's Manual

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.