ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cv/mgflib/object.c
Revision: 1.3
Committed: Wed May 10 17:18:45 1995 UTC (28 years, 11 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 1.2: +2 -2 lines
Log Message:
fixed memory error!

File Contents

# Content
1 /* Copyright (c) 1994 Regents of the University of California */
2
3 #ifndef lint
4 static char SCCSid[] = "$SunId$ LBL";
5 #endif
6
7 /*
8 * Header file for tracking hierarchical object names
9 */
10
11 #include <stdio.h>
12 #include <string.h>
13 #include "parser.h"
14
15
16 int obj_nnames; /* depth of name hierarchy */
17 char **obj_name; /* name list */
18
19 static int obj_maxname; /* allocated list size */
20
21 #define ALLOC_INC 16 /* list increment ( > 1 ) */
22
23
24 int
25 obj_handler(ac, av) /* handle an object entity statement */
26 int ac;
27 char **av;
28 {
29 if (ac == 1) { /* just pop top object */
30 if (obj_nnames < 1)
31 return(MG_OK); /* should be error? */
32 free((MEM_PTR)obj_name[--obj_nnames]);
33 obj_name[obj_nnames] = NULL;
34 return(MG_OK);
35 }
36 if (ac != 2)
37 return(MG_EARGC);
38 if (obj_nnames >= obj_maxname-1) { /* enlarge array */
39 if (!obj_maxname)
40 obj_name = (char **)malloc(
41 (obj_maxname=ALLOC_INC)*sizeof(char *));
42 else
43 obj_name = (char **)realloc((MEM_PTR)obj_name,
44 (obj_maxname+=ALLOC_INC)*sizeof(char *));
45 if (obj_name == NULL)
46 return(MG_EMEM);
47 }
48 /* allocate new entry */
49 obj_name[obj_nnames] = (char *)malloc(strlen(av[1])+1);
50 if (obj_name[obj_nnames] == NULL)
51 return(MG_EMEM);
52 strcpy(obj_name[obj_nnames++], av[1]);
53 obj_name[obj_nnames] = NULL;
54 return(MG_OK);
55 }
56
57
58 void
59 obj_clear() /* clear object stack */
60 {
61 while (obj_nnames)
62 free((MEM_PTR)obj_name[--obj_nnames]);
63 if (obj_maxname) {
64 free((MEM_PTR)obj_name);
65 obj_maxname = 0;
66 }
67 }