/* -*-comment-start: "//";comment-end:""-*- * Mes --- Maxwell Equations of Software * Copyright © 2017 Jan Nieuwenhuizen * * This file is part of Mes. * * Mes is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * Mes is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Mes. If not, see . */ #include "30-test.i" #include #include #include #include void add (void *ptab, int *nb_ptr, void *data) { int nb, nb_alloc; int **pp; nb = *nb_ptr; pp = *(void ***)ptab; /* every power of two we double array size */ if ((nb & (nb - 1)) == 0) { if (!nb) nb_alloc = 1; else nb_alloc = nb * 2; pp = realloc (pp, nb_alloc * sizeof(void *)); *(void***)ptab = pp; } pp[nb++] = data; *nb_ptr = nb; } typedef struct file { char name[4]; } file_struct; struct state { int bla; char **paths; int path_count; struct file **files; //file_struct **files; int file_count; }; struct state g_s; int test () { struct state *s = &g_s; char* file_name = "file-name"; struct file *file; file = malloc (sizeof (struct file) + strlen (file_name)); strcpy (file->name, file_name); add (&s->files, &s->file_count, file); char *path_name = "foo:bar:baz"; add (&s->paths, &s->path_count, path_name); if (strcmp (*s->paths, path_name)) return 1; eputs ("&PATHS="); eputs (itoa (&s->paths)); eputs ("\n"); eputs ("&FILES="); eputs (itoa (&s->files)); eputs ("\n"); struct file *fs = s->files[0]; eputs ("add s= "); eputs (itoa (s)); eputs ("\n"); eputs ("add fs= "); eputs (itoa (fs)); eputs ("\n"); eputs ("&fs->[0]="); eputs (itoa (fs->name)); eputs ("\n"); eputs ("fs->name="); eputs (fs->name); eputs ("\n"); eputs ("ps= "); eputs (itoa (s->paths)); eputs ("\n"); eputs ("*ps "); eputs (*s->paths); eputs ("\n"); if (strcmp (fs->name, file_name)) return 1; eputs ("&fs->[0]="); eputs (itoa (fs->name)); eputs ("\n"); eputs ("fs->name="); eputs (fs->name); eputs ("\n"); eputs ("ps= "); eputs (itoa (s->paths)); eputs ("\n"); eputs ("*ps "); eputs (*s->paths); eputs ("\n"); return 0; }