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
DYNARR(3) C Programmer's Manual DYNARR(3)

dynarr, dynarr_init, dynarr_resize, dynarr_free - simple dynamic arrays

#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);

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).

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

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

Lars Wirzenius (lars.wirzenius@helsinki.fi)
C Programmer's Manual Publib

Search for    or go to Top of page |  Section 3 |  Main Index

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