123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- /* -*-comment-start: "//";comment-end:""-*-
- * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
- *
- * This file is part of GNU Mes.
- *
- * GNU 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.
- *
- * GNU 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
- */
- #include <mes/lib.h>
- #include <mes/lib.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- 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 file4
- {
- char name[4];
- } file4_struct;
- typedef struct file12
- {
- int foo;
- int bar;
- char name[4];
- } file12_struct;
- //#define file file4
- #define file file12
- struct state
- {
- int bla;
- char **paths;
- int path_count;
- struct file **files;
- //file_struct **files;
- int file_count;
- };
- struct state g_s;
- int
- main ()
- {
- 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;
- // eputs ("foo\n");
- // fs = s->files[0];
- 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 2;
- 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");
- file = malloc (sizeof (struct file) + strlen (file_name));
- file_name = "hallo";
- strcpy (file->name, file_name);
- add (&s->files, &s->file_count, file);
- struct file **pf = s->files;
- fs = pf[0];
- eputs ("\n");
- eputs ("&fs0*= ");
- eputs (itoa (&pf[0]));
- eputs ("\n");
- eputs ("fs0*= ");
- eputs (itoa (fs));
- eputs ("\n");
- fs = s->files[0];
- eputs ("fs0*= ");
- eputs (itoa (fs));
- eputs ("\n");
- eputs ("\n");
- pf = s->files;
- fs = pf[1];
- eputs ("&fs1*= ");
- eputs (itoa (&pf[1]));
- eputs ("\n");
- eputs ("fs1*= ");
- eputs (itoa (fs));
- eputs ("\n");
- fs = s->files[1];
- eputs ("fs1*= ");
- eputs (itoa (fs));
- eputs ("\n");
- eputs ("\n");
- if (strcmp (fs->name, file_name))
- return 3;
- fs = g_s.files[0];
- eputs ("gfs0*= ");
- eputs (itoa (fs));
- eputs ("\n");
- fs = g_s.files[1];
- eputs ("gfs1*= ");
- eputs (itoa (fs));
- eputs ("\n");
- eputs ("\n");
- if (strcmp (fs->name, file_name))
- return 3;
- return 0;
- }
|