This is Unofficial EPICS BASE Doxygen Site
registry.c
Go to the documentation of this file.
1 /*************************************************************************\
2 * Copyright (c) 2002 The University of Chicago, as Operator of Argonne
3 * National Laboratory.
4 * Copyright (c) 2002 The Regents of the University of California, as
5 * Operator of Los Alamos National Laboratory.
6 * EPICS BASE Versions 3.13.7
7 * and higher are distributed subject to a Software License Agreement found
8 * in file LICENSE that is included with this distribution.
9 \*************************************************************************/
10 /*registry.c */
11 
12 /* Author: Marty Kraimer Date: 08JUN99 */
13 
14 #include <stdlib.h>
15 #include <stddef.h>
16 #include <string.h>
17 #include <stdio.h>
18 
19 #include "dbDefs.h"
20 #include "cantProceed.h"
21 #include "epicsFindSymbol.h"
22 #include "gpHash.h"
23 #include "registry.h"
24 
25 static struct gphPvt *gphPvt = 0;
26 
27 static void registryInit(int tableSize)
28 {
29  if(tableSize==0) tableSize = DEFAULT_TABLE_SIZE;
30  gphInitPvt(&gphPvt,tableSize);
31  if(!gphPvt) cantProceed("registry why did gphInitPvt fail\n");
32 }
33 
34 LIBCOM_API int epicsStdCall registrySetTableSize(int size)
35 {
36  if(gphPvt) {
37  printf("registryInit already called\n");
38  return(-1);
39  }
40  registryInit(size);
41  return(0);
42 }
43 
44 
45 LIBCOM_API int epicsStdCall registryAdd(
46  void *registryID,const char *name,void *data)
47 {
48  GPHENTRY *pentry;
49  if(!gphPvt) registryInit(0);
50  pentry = gphAdd(gphPvt,name,registryID);
51  if(!pentry) return(FALSE);
52  pentry->userPvt = data;
53  return(TRUE);
54 }
55 
56 LIBCOM_API int epicsStdCall registryChange(
57  void *registryID,const char *name,void *data)
58 {
59  GPHENTRY *pentry;
60  if(!gphPvt) registryInit(0);
61  pentry = gphFind(gphPvt,(char *)name,registryID);
62  if(!pentry) return(FALSE);
63  pentry->userPvt = data;
64  return(TRUE);
65 }
66 
67 LIBCOM_API void * epicsStdCall registryFind(
68  void *registryID,const char *name)
69 {
70  GPHENTRY *pentry;
71  if(name==0) return(0);
72  if(registryID==0) return(epicsFindSymbol(name));
73  if(!gphPvt) registryInit(0);
74  pentry = gphFind(gphPvt,(char *)name,registryID);
75  if(!pentry) return(0);
76  return(pentry->userPvt);
77 }
78 
79 LIBCOM_API void epicsStdCall registryFree(void)
80 {
81  if(!gphPvt) return;
82  gphFreeMem(gphPvt);
83  gphPvt = 0;
84 }
85 
86 LIBCOM_API int epicsStdCall registryDump(void)
87 {
88  if(!gphPvt) return(0);
89  gphDump(gphPvt);
90  return(0);
91 }
#define FALSE
Definition: dbDefs.h:32
LIBCOM_API int epicsStdCall registryAdd(void *registryID, const char *name, void *data)
Definition: registry.c:45
LIBCOM_API int epicsStdCall registryChange(void *registryID, const char *name, void *data)
Definition: registry.c:56
#define printf
Definition: epicsStdio.h:41
LIBCOM_API void epicsStdCall registryFree(void)
Definition: registry.c:79
int size
Definition: gpHashLib.c:26
Miscellaneous macro definitions.
LIBCOM_API void epicsStdCall gphInitPvt(struct gphPvt **ppvt, int tableSize)
Definition: gpHashLib.c:37
void * userPvt
Definition: gpHash.h:25
LIBCOM_API GPHENTRY *epicsStdCall gphFind(struct gphPvt *pvt, const char *name, void *pvtid)
Definition: gpHashLib.c:92
LIBCOM_API void epicsStdCall gphFreeMem(struct gphPvt *pvt)
Definition: gpHashLib.c:176
LIBCOM_API void *epicsStdCall registryFind(void *registryID, const char *name)
Definition: registry.c:67
LIBCOM_API int epicsStdCall registrySetTableSize(int size)
Definition: registry.c:34
LIBCOM_API void epicsStdCall gphDump(struct gphPvt *pvt)
Definition: gpHashLib.c:206
#define TRUE
Definition: dbDefs.h:27
LIBCOM_API void *epicsStdCall epicsFindSymbol(const char *name)
Definition: osdFindSymbol.c:23
LIBCOM_API void cantProceed(const char *msg,...)
Definition: cantProceed.c:54
Routines for code that can&#39;t continue or return after an error.
LIBCOM_API int epicsStdCall registryDump(void)
Definition: registry.c:86
#define DEFAULT_TABLE_SIZE
Definition: registry.h:18
LIBCOM_API GPHENTRY *epicsStdCall gphAdd(struct gphPvt *pvt, const char *name, void *pvtid)
Definition: gpHashLib.c:97