Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
2671-Remove-erl_interface-registry.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2671-Remove-erl_interface-registry.patch of Package erlang
From f87288b0a2534843b53df174e3728e921c2efd60 Mon Sep 17 00:00:00 2001 From: Rickard Green <rickard@erlang.org> Date: Tue, 15 Dec 2020 18:34:51 +0100 Subject: [PATCH] Remove erl_interface registry --- lib/erl_interface/doc/src/Makefile | 3 +- lib/erl_interface/doc/src/ei_users_guide.xml | 170 ----- lib/erl_interface/doc/src/notes.xml | 3 +- lib/erl_interface/doc/src/ref_man.xml | 1 - lib/erl_interface/doc/src/registry.xml | 642 ------------------ lib/erl_interface/include/ei.h | 176 +---- lib/erl_interface/src/Makefile.in | 41 +- lib/erl_interface/src/README.internal | 7 - lib/erl_interface/src/registry/hash.h | 48 -- lib/erl_interface/src/registry/hash_dohash.c | 46 -- lib/erl_interface/src/registry/hash_foreach.c | 45 -- lib/erl_interface/src/registry/hash_freetab.c | 59 -- lib/erl_interface/src/registry/hash_insert.c | 109 --- lib/erl_interface/src/registry/hash_isprime.c | 58 -- lib/erl_interface/src/registry/hash_lookup.c | 43 -- lib/erl_interface/src/registry/hash_newtab.c | 53 -- lib/erl_interface/src/registry/hash_remove.c | 88 --- lib/erl_interface/src/registry/hash_resize.c | 68 -- lib/erl_interface/src/registry/hash_rlookup.c | 44 -- lib/erl_interface/src/registry/reg.h | 47 -- lib/erl_interface/src/registry/reg_close.c | 69 -- lib/erl_interface/src/registry/reg_delete.c | 37 - lib/erl_interface/src/registry/reg_dirty.c | 37 - lib/erl_interface/src/registry/reg_dump.c | 321 --------- lib/erl_interface/src/registry/reg_free.c | 48 -- lib/erl_interface/src/registry/reg_get.c | 91 --- lib/erl_interface/src/registry/reg_getf.c | 36 - lib/erl_interface/src/registry/reg_geti.c | 36 - lib/erl_interface/src/registry/reg_getp.c | 40 -- lib/erl_interface/src/registry/reg_gets.c | 39 -- lib/erl_interface/src/registry/reg_make.c | 50 -- lib/erl_interface/src/registry/reg_open.c | 42 -- lib/erl_interface/src/registry/reg_purge.c | 77 --- lib/erl_interface/src/registry/reg_resize.c | 37 - lib/erl_interface/src/registry/reg_restore.c | 323 --------- lib/erl_interface/src/registry/reg_set.c | 75 -- lib/erl_interface/src/registry/reg_setf.c | 62 -- lib/erl_interface/src/registry/reg_seti.c | 63 -- lib/erl_interface/src/registry/reg_setp.c | 63 -- lib/erl_interface/src/registry/reg_sets.c | 66 -- lib/erl_interface/src/registry/reg_stat.c | 42 -- lib/erl_interface/src/registry/reg_tabstat.c | 38 -- system/doc/general_info/deprecations_23.inc | 10 +- system/doc/general_info/removed_24.inc | 8 + .../general_info/scheduled_for_removal_24.inc | 12 - 45 files changed, 16 insertions(+), 3457 deletions(-) delete mode 100644 lib/erl_interface/doc/src/registry.xml delete mode 100644 lib/erl_interface/src/registry/hash.h delete mode 100644 lib/erl_interface/src/registry/hash_dohash.c delete mode 100644 lib/erl_interface/src/registry/hash_foreach.c delete mode 100644 lib/erl_interface/src/registry/hash_freetab.c delete mode 100644 lib/erl_interface/src/registry/hash_insert.c delete mode 100644 lib/erl_interface/src/registry/hash_isprime.c delete mode 100644 lib/erl_interface/src/registry/hash_lookup.c delete mode 100644 lib/erl_interface/src/registry/hash_newtab.c delete mode 100644 lib/erl_interface/src/registry/hash_remove.c delete mode 100644 lib/erl_interface/src/registry/hash_resize.c delete mode 100644 lib/erl_interface/src/registry/hash_rlookup.c delete mode 100644 lib/erl_interface/src/registry/reg.h delete mode 100644 lib/erl_interface/src/registry/reg_close.c delete mode 100644 lib/erl_interface/src/registry/reg_delete.c delete mode 100644 lib/erl_interface/src/registry/reg_dirty.c delete mode 100644 lib/erl_interface/src/registry/reg_dump.c delete mode 100644 lib/erl_interface/src/registry/reg_free.c delete mode 100644 lib/erl_interface/src/registry/reg_get.c delete mode 100644 lib/erl_interface/src/registry/reg_getf.c delete mode 100644 lib/erl_interface/src/registry/reg_geti.c delete mode 100644 lib/erl_interface/src/registry/reg_getp.c delete mode 100644 lib/erl_interface/src/registry/reg_gets.c delete mode 100644 lib/erl_interface/src/registry/reg_make.c delete mode 100644 lib/erl_interface/src/registry/reg_open.c delete mode 100644 lib/erl_interface/src/registry/reg_purge.c delete mode 100644 lib/erl_interface/src/registry/reg_resize.c delete mode 100644 lib/erl_interface/src/registry/reg_restore.c delete mode 100644 lib/erl_interface/src/registry/reg_set.c delete mode 100644 lib/erl_interface/src/registry/reg_setf.c delete mode 100644 lib/erl_interface/src/registry/reg_seti.c delete mode 100644 lib/erl_interface/src/registry/reg_setp.c delete mode 100644 lib/erl_interface/src/registry/reg_sets.c delete mode 100644 lib/erl_interface/src/registry/reg_stat.c delete mode 100644 lib/erl_interface/src/registry/reg_tabstat.c create mode 100644 system/doc/general_info/removed_24.inc diff --git a/lib/erl_interface/doc/src/Makefile b/lib/erl_interface/doc/src/Makefile index 73344b1a65..f709176508 100644 --- a/lib/erl_interface/doc/src/Makefile +++ b/lib/erl_interface/doc/src/Makefile @@ -39,8 +39,7 @@ RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN) XML_REF1_FILES = erl_call_cmd.xml XML_REF3_FILES = ei_global.xml \ ei.xml \ - ei_connect.xml \ - registry.xml + ei_connect.xml BOOK_FILES = book.xml XML_APPLICATION_FILES = ref_man.xml diff --git a/lib/erl_interface/doc/src/ei_users_guide.xml b/lib/erl_interface/doc/src/ei_users_guide.xml index 5dfaf556da..5c9452b516 100644 --- a/lib/erl_interface/doc/src/ei_users_guide.xml +++ b/lib/erl_interface/doc/src/ei_users_guide.xml @@ -70,7 +70,6 @@ <item>Sending and receiving Erlang messages</item> <item>Remote procedure calls</item> <item>Using global names</item> - <item>Using the registry</item> </list> </section> @@ -528,173 +527,4 @@ ei_global_register(fd,servicename,ei_self(ec)); ]]></code> ei_global_unregister(&ec,fd,servicename); ]]></code> </section> - <section> - <title>Using the Registry</title> - - <note><p>This functionality is deprecated as of OTP 23, and will be - removed in OTP 24. Reasonably new <c>gcc</c> compilers will issue - deprecation warnings. In order to disable these warnings, define the - macro <c>EI_NO_DEPR_WARN</c>.</p></note> - - <p>This section describes the use of the registry, a simple mechanism - for storing key-value pairs in a C-node, as well as backing them up or - restoring them from an <c>Mnesia</c> table on an Erlang node. For more - detailed information about the individual API functions, see the - <seecref marker="registry"><c>registry</c></seecref> module.</p> - - <p>Keys are strings, that is, <c>NULL</c>-terminated arrays of characters, and - values are arbitrary objects. Although integers and floating point numbers - are treated specially by the registry, you can store strings or binary - objects of any type as pointers.</p> - - <p>To start, open a registry:</p> - - <code type="none"><![CDATA[ -ei_reg *reg; - -reg = ei_reg_open(45); ]]></code> - - <p>The number <c>45</c> in the example indicates the approximate number of - objects that you expect to store in the registry. Internally the - registry uses hash tables with collision chaining, so there is no - absolute upper limit on the number of objects that the registry can - contain, but if performance or memory usage is important, then you - are to choose a number accordingly. The registry can be resized later.</p> - - <p>You can open as many registries as you like (if memory permits).</p> - - <p>Objects are stored and retrieved through set and get functions. - The following example shows how to store integers, floats, strings, - and arbitrary binary objects:</p> - - <code type="none"><![CDATA[ -struct bonk *b = malloc(sizeof(*b)); -char *name = malloc(7); - -ei_reg_setival(reg,"age",29); -ei_reg_setfval(reg,"height",1.85); - -strcpy(name,"Martin"); -ei_reg_setsval(reg,"name",name); - -b->l = 42; -b->m = 12; -ei_reg_setpval(reg,"jox",b,sizeof(*b)); ]]></code> - - <p>If you try to store an object in the registry and there is an - existing object with the same key, the new value replaces the old - one. This is done regardless of whether the new object and the old one - have the same type, so you can, for example, replace a string with an - integer. If the existing value is a string or binary, it is freed - before the new value is assigned.</p> - - <p>Stored values are retrieved from the registry as follows:</p> - - <code type="none"><![CDATA[ -long i; -double f; -char *s; -struct bonk *b; -int size; - -i = ei_reg_getival(reg,"age"); -f = ei_reg_getfval(reg,"height"); -s = ei_reg_getsval(reg,"name"); -b = ei_reg_getpval(reg,"jox",&size); ]]></code> - - <p>In all the above examples, the object must exist and it must be of - the right type for the specified operation. If you do not know the - type of an object, you can ask:</p> - - <code type="none"><![CDATA[ -struct ei_reg_stat buf; - -ei_reg_stat(reg,"name",&buf); ]]></code> - - <p>Buf is initialized to contain object attributes.</p> - - <p>Objects can be removed from the registry:</p> - - <code type="none"><![CDATA[ -ei_reg_delete(reg,"name"); ]]></code> - - <p>When you are finished with a registry, close it to remove all the - objects and free the memory back to the system:</p> - - <code type="none"><![CDATA[ -ei_reg_close(reg); ]]></code> - - <section> - <title>Backing Up the Registry to Mnesia</title> - <p>The contents of a registry can be backed up to - <seeerl marker="mnesia:mnesia"><c>Mnesia</c></seeerl> on a "nearby" Erlang - node. You must provide an open connection to the Erlang node - (see <seecref marker="ei_connect"><c>ei_connect</c></seecref>). - Also, <c>Mnesia</c> 3.0 or later must be running - on the Erlang node before the backup is initiated:</p> - - <code type="none"><![CDATA[ -ei_reg_dump(fd, reg, "mtab", dumpflags); ]]></code> - - <p>This example back up the contents of the registry to the - specified <c>Mnesia</c> table <c>"mtab"</c>. - Once a registry has been backed - up to <c>Mnesia</c> like this, more backups only affect - objects that have been modified since the most recent backup, that is, - objects that have been created, changed, or deleted. The backup - operation is done as a single atomic transaction, so that either the - entire backup is performed or none of it.</p> - - <p>Likewise, a registry can be restored from a <c>Mnesia</c> table:</p> - - <code type="none"><![CDATA[ -ei_reg_restore(fd, reg, "mtab"); ]]></code> - - <p>This reads the entire contents of <c>"mtab"</c> into the - specified registry. After the restore, all the objects in the registry - are marked as unmodified, so a later backup only affects - objects that you have modified since the restore.</p> - - <p>Notice that if you restore to a non-empty registry, objects in the - table overwrite objects in the registry with the same keys. Also, - the <em>entire</em> contents of the registry is marked as unmodified - after the restore, including any modified objects that were not - overwritten by the restore operation. This may not be your - intention.</p> - </section> - - <section> - <title>Storing Strings and Binaries</title> - <p>When string or binary objects are stored in the registry it is - important that some simple guidelines are followed.</p> - - <p>Most importantly, the object must have been created with a single call - to <c>malloc()</c> (or similar), so that it can later be - removed by a single call to <c>free()</c>. - Objects are freed by the registry - when it is closed, or when you assign a new value to an object that - previously contained a string or binary.</p> - - <p>Notice that if you store binary objects that are context-dependent - (for example, containing pointers or open file descriptors), - they lose their meaning if they are backed up to a <c>Mnesia</c> table - and later restored in a different context.</p> - - <p>When you retrieve a stored string or binary value from the registry, - the registry maintains a pointer to the object and you are passed a - copy of that pointer. You should never free an object retrieved in - this manner because when the registry later attempts to free it, a - runtime error occurs that likely causes the C-node to crash.</p> - - <p>You are free to modify the contents of an object retrieved this way. - However, when you do so, the registry is not aware of your changes, - possibly causing it to be missed the next time you make an - <c>Mnesia</c> backup of the registry contents. This can be avoided if - you mark the object as dirty after any such changes with - <seecref marker="registry#ei_reg_markdirty"> - <c>ei_reg_markdirty</c></seecref>, or pass appropriate flags to - <seecref marker="registry#ei_reg_dump"> - <c>ei_reg_dump</c></seecref>.</p> - </section> - </section> </chapter> diff --git a/lib/erl_interface/doc/src/notes.xml b/lib/erl_interface/doc/src/notes.xml index fde35537ba..3a7c64b98b 100644 --- a/lib/erl_interface/doc/src/notes.xml +++ b/lib/erl_interface/doc/src/notes.xml @@ -270,8 +270,7 @@ Own Id: OTP-16624</p> </item> <item> - <p>The <c>erl_interface</c> <seecref - marker="erl_interface:registry"><c>registry</c></seecref> + <p>The <c>erl_interface</c> <c>registry</c> functionality is deprecated as of OTP 23, and will be removed in OTP 24. Reasonably new <c>gcc</c> compilers will issue deprecation warnings when using this diff --git a/lib/erl_interface/doc/src/ref_man.xml b/lib/erl_interface/doc/src/ref_man.xml index 064a83a4ba..a0d75128a3 100644 --- a/lib/erl_interface/doc/src/ref_man.xml +++ b/lib/erl_interface/doc/src/ref_man.xml @@ -32,7 +32,6 @@ </description> <xi:include href="ei.xml"/> <xi:include href="ei_connect.xml"/> - <xi:include href="registry.xml"/> <xi:include href="ei_global.xml"/> <xi:include href="erl_call_cmd.xml"/> </application> diff --git a/lib/erl_interface/doc/src/registry.xml b/lib/erl_interface/doc/src/registry.xml deleted file mode 100644 index 92858516d9..0000000000 --- a/lib/erl_interface/doc/src/registry.xml +++ /dev/null @@ -1,642 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE cref SYSTEM "cref.dtd"> - -<cref> - <header> - <copyright> - <year>1998</year><year>2020</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - </legalnotice> - - <title>registry</title> - <prepared>Gordon Beaton</prepared> - <responsible>Gordon Beaton</responsible> - <docno></docno> - <approved>Gordon Beaton</approved> - <checked>Gordon Beaton</checked> - <date>1998-07-07</date> - <rev>A</rev> - <file>registry.xml</file> - </header> - <lib>registry</lib> - <libsummary>Store and back up key-value pairs.</libsummary> - <description> - <note><p>This functionality is deprecated as of OTP 23, and will be - removed in OTP 24. Reasonably new <c>gcc</c> compilers will issue - deprecation warnings. In order to disable these warnings, define the - macro <c>EI_NO_DEPR_WARN</c>.</p></note> - - <p>This module provides support for storing key-value - pairs in a table known as a registry, backing up registries to - <seeerl marker="mnesia:mnesia">Mnesia</seeerl> - in an atomic manner, and later restoring the contents of a - registry from <c>Mnesia</c>.</p> - </description> - - <funcs> - <func> - <name since=""><ret>int</ret><nametext>ei_reg_close(reg)</nametext></name> - <fsummary>Close a registry.</fsummary> - <type> - <v>ei_reg *reg;</v> - </type> - <desc> - <p>A registry that has previously been created with - <c>ei_reg_open()</c> is closed, and all the objects it - contains are freed.</p> - <p><c>reg</c> is the registry to close.</p> - <p>Returns <c>0</c>.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_delete(reg,key)</nametext></name> - <fsummary>Delete an object from the registry.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>const char *key;</v> - </type> - <desc> - <p>Deletes an object from the registry. The object is not - removed from the registry, it is only marked for later - removal so that on later backups to <c>Mnesia</c>, the - corresponding object can be removed from the <c>Mnesia</c> table as - well. If another object is later created with the same key, the - object will be reused. </p> - <p>The object is removed from the registry after a call to - <c>ei_reg_dump()</c> or <c>ei_reg_purge()</c>. - </p> - <list type="bulleted"> - <item><c>reg</c> is the registry containing - <c>key</c>.</item> - <item><c>key</c> is the object to remove.</item> - </list> - <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_dump(fd,reg,mntab,flags)</nametext></name> - <fsummary>Back up a registry to Mnesia.</fsummary> - <type> - <v>int fd;</v> - <v>ei_reg *reg;</v> - <v>const char *mntab;</v> - <v>int flags;</v> - </type> - <desc> - <p>Dumps the contents of a registry to a <c>Mnesia</c> table in an - atomic manner, that is, either all data or no data is updated. - If any errors are encountered while backing up - the data, the entire operation is aborted.</p> - <list type="bulleted"> - <item><c>fd</c> is an open connection to Erlang. - <c>Mnesia</c> 3.0 or later must be running on the Erlang node. - </item> - <item><c>reg</c> is the registry to back up.</item> - <item><c>mntab</c> is the name of the <c>Mnesia</c> table - where the backed up data is to be placed. If the table does not - exist, it is created automatically using configurable defaults. - For information about configuring this behavior, see - <seeerl marker="mnesia:mnesia"><c>Mnesia</c></seeerl>.</item> - </list> - <p>If <c>flags</c> is <c>0</c>, the backup includes only - those objects that have been created, modified, or deleted since the - last backup or restore (that is, an incremental backup). After the - backup, any objects that were marked dirty are now clean, and any - objects that had been marked for deletion are deleted.</p> - <p>Alternatively, setting flags to <c>EI_FORCE</c> causes a full - backup to be done, and <c>EI_NOPURGE</c> causes the deleted objects - to be left in the registry afterwards. These can be bitwise OR'ed - together if both behaviors are desired. If <c>EI_NOPURGE</c> was - specified, <c>ei_reg_purge()</c> can be used to - explicitly remove the deleted items from the registry later.</p> - <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> - </desc> - </func> - - <func> - <name since=""><ret>double</ret><nametext>ei_reg_getfval(reg,key)</nametext></name> - <fsummary>Get a floating point object.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>const char *key;</v> - </type> - <desc> - <p>Gets the value associated with <c>key</c> in the - registry. The value must be a floating point type.</p> - <list type="bulleted"> - <item><c>reg</c> is the registry where the object will be - looked up.</item> - <item><c>key</c> is the name of the object to look up. - </item> - </list> - <p>On success, the function returns the value associated with - <c>key</c>. - If the object is not found or if it is not a floating point - object, <c>-1.0</c> is returned. To avoid problems with in-band error - reporting (that is, if you cannot distinguish between <c>-1.0</c> and - a valid result), use the more general function - <c>ei_reg_getval()</c> instead.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_getival(reg,key)</nametext></name> - <fsummary>Get an integer object.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>const char *key;</v> - </type> - <desc> - <p>Gets the value associated with <c>key</c> in the - registry. The value must be an integer.</p> - <list type="bulleted"> - <item><c>reg</c> is the registry where the object will be - looked up.</item> - <item><c>key</c> is the name of the object to look up. - </item> - </list> - <p>On success, the function returns the value associated with - <c>key</c>. - If the object is not found or if it is not an integer - object, <c>-1</c> is returned. To avoid problems with in-band error - reporting (that is, if you cannot distinguish between <c>-1</c> and a - valid result), use the more general function - <c>ei_reg_getval()</c> instead.</p> - </desc> - </func> - - <func> - <name since=""><ret>const void *</ret><nametext>ei_reg_getpval(reg,key,size)</nametext></name> - <fsummary>Get a binary object.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>const char *key;</v> - <v>int size;</v> - </type> - <desc> - <p>Gets the value associated with <c>key</c> in the - registry. The value must be a binary (pointer) type.</p> - <list type="bulleted"> - <item><c>reg</c> is the registry where the object will be - looked up.</item> - <item><c>key</c> is the name of the object to look up. - </item> - <item><c>size</c> is initialized to contain the length in - bytes of the object, if it is found.</item> - </list> - <p>On success, the function returns the value associated with - <c>key</c> and indicates its length in - <c>size</c>. - If the object is not found or if it is not a binary object, - <c>NULL</c> is returned. To avoid problems with in-band error - reporting (that is, if you cannot distinguish between <c>NULL</c> and - a valid result), use the more general function - <c>ei_reg_getval()</c> instead.</p> - </desc> - </func> - - <func> - <name since=""><ret>const char *</ret><nametext>ei_reg_getsval(reg,key)</nametext></name> - <fsummary>Get a string object.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>const char *key;</v> - </type> - <desc> - <p>Gets the value associated with <c>key</c> in the - registry. The value must be a string.</p> - <list type="bulleted"> - <item><c>reg</c> is the registry where the object will be - looked up.</item> - <item><c>key</c> is the name of the object to look up. - </item> - </list> - <p>On success, the function returns the value associated with - <c>key</c>. If the object is not found or if it is not a - string, <c>NULL</c> is returned. To avoid problems with in-band error - reporting (that is, if you cannot distinguish between <c>NULL</c> and - a valid result), use the more general function - <c>ei_reg_getval()</c> instead.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_getval(reg,key,flags,v,...)</nametext></name> - <fsummary>Get any object.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>const char *key;</v> - <v>int flags;</v> - <v>void *v (see below)</v> - </type> - <desc> - <p>A general function for retrieving any kind of - object from the registry.</p> - <list type="bulleted"> - <item> - <p><c>reg</c> is the registry where the object will be - looked up.</p> - </item> - <item> - <p><c>key</c> is the name of the object to look up.</p> - </item> - <item> - <p><c>flags</c> indicates the type of object that you - are looking for. If <c>flags</c> is <c>0</c>, any - kind of object is returned. - If <c>flags</c> is <c>EI_INT</c>, <c>EI_FLT</c>, - <c>EI_STR</c>, or <c>EI_BIN</c>, then only values of - that kind are returned.</p> - <p>The buffer pointed to by <c>v</c> - must be large enough to hold the return data, that is, it must be - a pointer to one of <c>int</c>, - <c>double</c>, <c>char*</c>, or - <c>void*</c>, respectively.</p> - <p>If <c>flags</c> is <c>EI_BIN</c>, a fifth argument - <c>int *size</c> is required, so that the size of the - object can be returned.</p> - </item> - </list> - <p>On success, <c>v</c> (and <c>size</c> if the - object is binary) is initialized with the value associated - with <c>key</c>, and the function returns <c>EI_INT</c>, - <c>EI_FLT</c>, <c>EI_STR</c>, or <c>EI_BIN</c>, indicating the type - of object. On failure, <c>-1</c> is returned and the - arguments are not updated.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_markdirty(reg,key)</nametext></name> - <fsummary>Mark an object as dirty.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>const char *key;</v> - </type> - <desc> - <p>Marks a registry object as dirty. This ensures that - it is included in the next backup to <c>Mnesia</c>. Normally this - operation is not necessary, as all of the normal registry - 'set' functions do this automatically. However, if you have - retrieved the value of a string or binary object from the - registry and modified the contents, then the change is - invisible to the registry and the object is assumed to be - unmodified. This function allows you to make such modifications - and then let the registry know about them.</p> - <list type="bulleted"> - <item><c>reg</c> is the registry containing the object. - </item> - <item><c>key</c> is the name of the object to mark. - </item> - </list> - <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> - </desc> - </func> - - <func> - <name since=""><ret>ei_reg *</ret><nametext>ei_reg_open(size)</nametext></name> - <fsummary>Create and open a registry.</fsummary> - <type> - <v>int size;</v> - </type> - <desc> - <p>Opens (creates) a registry, which initially is empty. To - close the registry later, use <c>ei_reg_close()</c>.</p> - <p><c>size</c> is the approximate number of objects you - intend to store in the registry. As the registry uses a hash table - with collision chaining, no absolute upper limit exists on the - number of objects that can be stored in it. However, for reasons - of efficiency, it is a good idea to choose a number that is - appropriate for your needs. To change the size later, use - <c>ei_reg_resize()</c>. Notice that the number - you provide is increased to the nearest larger prime number.</p> - <p>Returns an empty registry on success, otherwise <c>NULL</c>.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_purge(reg)</nametext></name> - <fsummary>Remove deleted objects.</fsummary> - <type> - <v>ei_reg *reg;</v> - </type> - <desc> - <p>Removes all objects marked for deletion. When objects - are deleted with <c>ei_reg_delete()</c> they are not - removed from the registry, only marked for later removal. - On a later backup to <c>Mnesia</c>, the - objects can also be removed from the <c>Mnesia</c> table. If you are - not backing up to <c>Mnesia</c>, you may wish to remove the objects - manually with this function.</p> - <p><c>reg</c> is a registry containing objects marked for - deletion.</p> - <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_resize(reg,newsize)</nametext></name> - <fsummary>Resize a registry.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>int newsize;</v> - </type> - <desc> - <p>Changes the size of a registry.</p> - <p><c>newsize</c> is the new size to make the registry. The - number is increased to the nearest larger prime number.</p> - <p>On success, the registry is resized, all contents - rehashed, and <c>0</c> is returned. On failure, the - registry is left unchanged and <c>-1</c> is returned.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_restore(fd,reg,mntab)</nametext></name> - <fsummary>Restore a registry from Mnesia.</fsummary> - <type> - <v>int fd;</v> - <v>ei_reg *reg;</v> - <v>const char *mntab;</v> - </type> - <desc> - <p>The contents of a <c>Mnesia</c> table are read into the registry.</p> - <list type="bulleted"> - <item><c>fd</c> is an open connection to Erlang. - <c>Mnesia</c> 3.0 or later must be running on the Erlang node. - </item> - <item><c>reg</c> is the registry where the data is to be - placed.</item> - <item><c>mntab</c> is the name of the <c>Mnesia</c> table - to read data from.</item> - </list> - <p>Notice that only tables of a certain format can be - restored, that is, those that have been created and backed up to - with <c>ei_reg_dump()</c>. If the registry was not empty - before the operation, the contents of the table are added to the - contents of the registry. If the table contains objects with the - same keys as those already in the registry, the registry objects - are overwritten with the new values. If the registry - contains objects that were not in the table, they are - unchanged by this operation.</p> - <p>After the restore operation, the entire contents of the - registry is marked as unmodified. Notice that this includes any - objects that were modified before the restore and not - overwritten by the restore.</p> - <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_setfval(reg,key,f)</nametext></name> - <fsummary>Assign a floating point object.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>const char *key;</v> - <v>double f;</v> - </type> - <desc> - <p>Creates a key-value pair with the specified <c>key</c> - and floating point value <c>f</c>. If an object already - exists with the same <c>key</c>, the new value replaces - the old one. If the previous value was a binary or string, it is - freed with <c>free()</c>.</p> - <list type="bulleted"> - <item><c>reg</c> is the registry where the object is to be - placed.</item> - <item><c>key</c> is the object name.</item> - <item><c>f</c> is the floating point value to assign. - </item> - </list> - <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_setival(reg,key,i)</nametext></name> - <fsummary>Assign an integer object.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>const char *key;</v> - <v>int i;</v> - </type> - <desc> - <p>Creates a key-value pair with the specified <c>key</c> - and integer value <c>i</c>. If an object already exists - with the same <c>key</c>, the new value replaces the old - one. If the previous value was a binary or string, it is freed with - <c>free()</c>.</p> - <list type="bulleted"> - <item><c>reg</c> is the registry where the object is to be - placed.</item> - <item><c>key</c> is the object name.</item> - <item><c>i</c> is the integer value to assign.</item> - </list> - <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_setpval(reg,key,p,size)</nametext></name> - <fsummary>Assign a binary object.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>const char *key;</v> - <v>const void *p;</v> - <v>int size;</v> - </type> - <desc> - <p>Creates a key-value pair with the specified <c>key</c> - whose "value" is the binary object pointed to by <c>p</c>. - If an object already exists with the same <c>key</c>, - the new value replaces the old one. If the previous value was a - binary or string, it is freed with <c>free()</c>.</p> - <list type="bulleted"> - <item><c>reg</c> is the registry where the object is to be - placed.</item> - <item><c>key</c> is the object name.</item> - <item><c>p</c> is a pointer to the binary object. The - object itself must have been created through a single call to - <c>malloc()</c> or a similar function, so that the - registry can later delete it if necessary by calling - <c>free()</c>.</item> - <item><c>size</c> is the length in bytes of the binary - object.</item> - </list> - <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_setsval(reg,key,s)</nametext></name> - <fsummary>Assign a string object.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>const char *key;</v> - <v>const char *s;</v> - </type> - <desc> - <p>Creates a key-value pair with the specified <c>key</c> - whose "value" is the specified string <c>s</c>. If an - object already exists with the same <c>key</c>, the new - value replaces the old one. If the previous value was a binary or - string, it is freed with <c>free()</c>.</p> - <list type="bulleted"> - <item><c>reg</c> is the registry where the object is to be - placed.</item> - <item><c>key</c> is the object name.</item> - <item><c>s</c> is the string to assign. The string itself - must have been created through a single call to - <c>malloc()</c> or similar a function, - so that the registry can later delete it if - necessary by calling <c>free()</c>.</item> - </list> - <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_setval(reg,key,flags,v,...)</nametext></name> - <fsummary>Assign a value to any object type.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>const char *key;</v> - <v>int flags;</v> - <v>v (see below)</v> - </type> - <desc> - <p>Creates a key-value pair with the specified <c>key</c> - whose value is specified by <c>v</c>. If an object already - exists with the same <c>key</c>, the new value replaces - the old one. If the previous value was a binary or string, it is freed - with <c>free()</c>.</p> - <list type="bulleted"> - <item> - <p><c>reg</c> is the registry where the object is to be - placed.</p> - </item> - <item> - <p><c>key</c> is the object name.</p> - </item> - <item> - <p><c>flags</c> indicates the type of the object - specified by <c>v</c>. Flags must be one of - <c>EI_INT</c>, <c>EI_FLT</c>, <c>EI_STR</c>, and <c>EI_BIN</c>, - indicating whether - <c>v</c> is <c>int</c>, - <c>double</c>, <c>char*</c>, or - <c>void*</c>.</p> - <p>If <c>flags</c> is <c>EI_BIN</c>, a fifth argument - <c>size</c> is required, indicating the size - in bytes of the object pointed to by <c>v</c>.</p> - </item> - </list> - <p>If you wish to store an arbitrary pointer in the registry, - specify a <c>size</c> of <c>0</c>. In this case, the - object itself is not transferred by an - <c>ei_reg_dump()</c> operation, only the pointer - value.</p> - <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_stat(reg,key,obuf)</nametext></name> - <fsummary>Get object information.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>const char *key;</v> - <v>struct ei_reg_stat *obuf;</v> - </type> - <desc> - <p>Returns information about an object.</p> - <list type="bulleted"> - <item><c>reg</c> is the registry containing the object. - </item> - <item><c>key</c> is the object name.</item> - <item><c>obuf</c> is a pointer to an - <c>ei_reg_stat</c> structure, defined as follows:</item> - </list> - <code type="none"><![CDATA[ -struct ei_reg_stat { - int attr; - int size; -}; - ]]></code> - <p>In <c>attr</c> the attributes of the object are stored - as the logical <em>OR</em> of its type (one of <c>EI_INT</c>, - <c>EI_FLT</c>, <c>EI_BIN</c>, and <c>EI_STR</c>), - whether it is marked for deletion (<c>EI_DELET</c>), and whether it - has been modified since the last backup to <c>Mnesia</c> - (<c>EI_DIRTY</c>).</p> - <p>Field <c>size</c> indicates the size in bytes required - to store <c>EI_STR</c> (including the terminating <c>0</c>) and - <c>EI_BIN</c> objects, or <c>0</c> for <c>EI_INT</c> and - <c>EI_FLT</c>.</p> - <p>Returns <c>0</c> and initializes <c>obuf</c> on success, - otherwise <c>-1</c>.</p> - </desc> - </func> - - <func> - <name since=""><ret>int</ret><nametext>ei_reg_tabstat(reg,obuf)</nametext></name> - <fsummary>Get registry information.</fsummary> - <type> - <v>ei_reg *reg;</v> - <v>struct ei_reg_tabstat *obuf;</v> - </type> - <desc> - <p>Returns information about a registry. Using information - returned by this function, you can see whether the size of the - registry is suitable for the amount of data it contains.</p> - <list type="bulleted"> - <item><c>reg</c> is the registry to return information - about.</item> - <item><c>obuf</c> is a pointer to an - <c>ei_reg_tabstat</c> structure, defined as follows: - </item> - </list> - <code type="none"><![CDATA[ -struct ei_reg_tabstat { - int size; - int nelem; - int npos; - int collisions; -}; - ]]></code> - <p>Field <c>size</c> indicates the number of hash positions - in the registry. This is the number you provided when you - created or last resized the registry, rounded up to the nearest - prime number.</p> - <list type="bulleted"> - <item><c>nelem</c> indicates the number of elements stored - in the registry. It includes objects that are deleted but not - purged.</item> - <item><c>npos</c> indicates the number of unique positions - that are occupied in the registry.</item> - <item><c>collisions</c> indicates how many elements are - sharing positions in the registry.</item> - </list> - <p>On success, <c>0</c> is returned and - <c>obuf</c> is initialized to contain table statistics, - otherwise <c>-1</c> is returned.</p> - </desc> - </func> - </funcs> -</cref> diff --git a/lib/erl_interface/include/ei.h b/lib/erl_interface/include/ei.h index f3a1926c36..f1b6112960 100644 --- a/lib/erl_interface/include/ei.h +++ b/lib/erl_interface/include/ei.h @@ -616,186 +616,12 @@ int ei_cmp_refs(erlang_ref *a, erlang_ref *b); int ei_cmp_pids(erlang_pid *a, erlang_pid *b); int ei_cmp_ports(erlang_port *a, erlang_port *b); -/*************************************************************************** - * - * Hash types needed by registry types - * - ***************************************************************************/ - -#define EI_SMALLKEY 32 - -typedef struct bucket_s { - int rawhash; - const char *key; - char keybuf[EI_SMALLKEY]; - const void *value; - struct bucket_s *next; -} ei_bucket; - -/* users of the package declare variables as pointers to this. */ -typedef struct { - ei_bucket **tab; - int (*hash)(const char *); /* hash function for this table */ - int size; /* size of table */ - int nelem; /* nr elements */ - int npos; /* nr occupied positions */ - ei_bucket *freelist; /* reuseable freed buckets */ -} ei_hash; - - -/*************************************************************************** - * - * Registry defines, types, functions - * - ***************************************************************************/ - -/* -------------------------------------------------------------------- */ -/* XXXXXXXXXXX */ -/* -------------------------------------------------------------------- */ - -/* registry object attributes */ -#define EI_DIRTY 0x01 /* dirty bit (object value differs from backup) */ -#define EI_DELET 0x02 /* object is deleted */ -#define EI_INT 0x10 /* object is an integer */ -#define EI_FLT 0x20 /* object is a float */ -#define EI_STR 0x40 /* object is a string */ -#define EI_BIN 0x80 /* object is a binary, i.e. pointer to arbitrary type */ - - /* -------------------------------------------------------------------- */ -/* XXXXXXXXXXX */ +/* Initialize erl_interface */ /* -------------------------------------------------------------------- */ -typedef struct ei_reg_inode { - int attr; - int size; - union { - long i; - double f; - char *s; - void *p; - } val; - struct ei_reg_inode *next; -} ei_reg_obj; - -typedef struct { - ei_reg_obj *freelist; - ei_hash *tab; -} ei_reg; - -struct ei_reg_stat { - int attr; /* object attributes (see above) */ - int size; /* size in bytes (for STR and BIN) 0 for others */ -}; - -struct ei_reg_tabstat { - int size; /* size of table */ - int nelem; /* number of stored elements */ - int npos; /* number of occupied positions */ - int collisions; /* number of positions with more than one element */ -}; - - int ei_init(void); -/* -------------------------------------------------------------------- */ -/* XXXXXXXXXXX */ -/* -------------------------------------------------------------------- */ - -/* FIXME move comments to source */ - -/* open / close registry. On open, a descriptor is returned that must - * be specified in all subsequent calls to registry functions. You can - * open as many registries as you like. - */ -ei_reg *ei_reg_open(int size) EI_DEPRECATED_ATTR; -int ei_reg_resize(ei_reg *oldreg, int newsize) EI_DEPRECATED_ATTR; -int ei_reg_close(ei_reg *reg) EI_DEPRECATED_ATTR; - -/* set values... these routines assign values to keys. If the key - * exists, the previous value is discarded and the new one replaces - * it. - * - * BIN objects require an additional argument indicating the size in - * bytes of the stored object. This will be used when the object is - * backed up, since it will need to be copied at that time. Remember - * also that pointers are process-space specific and it is not - * meaningful to back them up for later recall. If you are storing - * binary objects for backup, make sure that they are self-contained - * (without references to other objects). - * - * On success the function returns 0, otherwise a value - * indicating the reason for failure will be returned. - */ -int ei_reg_setival(ei_reg *reg, const char *key, long i) EI_DEPRECATED_ATTR; -int ei_reg_setfval(ei_reg *reg, const char *key, double f) EI_DEPRECATED_ATTR; -int ei_reg_setsval(ei_reg *reg, const char *key, const char *s) EI_DEPRECATED_ATTR; -int ei_reg_setpval(ei_reg *reg, const char *key, const void *p, int size) EI_DEPRECATED_ATTR; - -/* general set function (specifiy type via flags) - * optional arguments are as for equivalent type-specific function, - * i.e.: - * ei_reg_setval(fd, path, EI_INT, int i); - * ei_reg_setval(fd, path, EI_FLT, float f); - * ei_reg_setval(fd, path, EI_STR, const char *s); - * ei_reg_setval(fd, path, EI_BIN, const void *p, int size); - */ -int ei_reg_setval(ei_reg *reg, const char *key, int flags, ...) EI_DEPRECATED_ATTR; - -/* get value of specific type object */ -/* warning: it may be difficult to detect errors when using these - * functions, since the error values are returned "in band" - */ -long ei_reg_getival(ei_reg *reg, const char *key) EI_DEPRECATED_ATTR; -double ei_reg_getfval(ei_reg *reg, const char *key) EI_DEPRECATED_ATTR; -const char *ei_reg_getsval(ei_reg *reg, const char *key) EI_DEPRECATED_ATTR; -const void *ei_reg_getpval(ei_reg *reg, const char *key, int *size) EI_DEPRECATED_ATTR; - -/* get value of any type object (must specify) - * Retrieve a value from an object. The type of value expected and a - * pointer to a large enough buffer must be provided. flags must be - * set to the appropriate type (see type constants above) and the - * object type must match. If (flags == 0) the pointer is *assumed* to - * be of the correct type for the object. In any case, the actual - * object type is always returned on success. - * - * The argument following flags must be one of int*, double*, const - * char** and const void**. - * - * for BIN objects an int* is needed to return the size of the object, i.e. - * int ei_reg_getval(ei_reg *reg, const char *path, int flags, void **p, int *size); - */ -int ei_reg_getval(ei_reg *reg, const char *key, int flags, ...) EI_DEPRECATED_ATTR; - -/* mark the object as dirty. Normally this operation will not be - * necessary, as it is done automatically by all of the above 'set' - * functions. However, if you modify the contents of an object pointed - * to by a STR or BIN object, then the registry will not be aware of - * the change. As a result, the object may be missed on a subsequent - * backup operation. Use this function to set the dirty bit on the - * object. - */ -int ei_reg_markdirty(ei_reg *reg, const char *key) EI_DEPRECATED_ATTR; - -/* remove objects. The value, if any, is discarded. For STR and BIN - * objects, the object itself is removed using free(). */ -int ei_reg_delete(ei_reg *reg, const char *key) EI_DEPRECATED_ATTR; - -/* get information about an object */ -int ei_reg_stat(ei_reg *reg, const char *key, struct ei_reg_stat *obuf) EI_DEPRECATED_ATTR; - -/* get information about table */ -int ei_reg_tabstat(ei_reg *reg, struct ei_reg_tabstat *obuf) EI_DEPRECATED_ATTR; - -/* dump to / restore from backup */ -/* fd is open descriptor to Erlang, mntab is Mnesia table name */ -/* flags here: */ -#define EI_FORCE 0x1 /* dump all records (not just dirty ones) */ -#define EI_NOPURGE 0x2 /* don't purge deleted records */ -int ei_reg_dump(int fd, ei_reg *reg, const char *mntab, int flags) EI_DEPRECATED_ATTR; -int ei_reg_restore(int fd, ei_reg *reg, const char *mntab) EI_DEPRECATED_ATTR; -int ei_reg_purge(ei_reg *reg) EI_DEPRECATED_ATTR; - /* -------------------------------------------------------------------- */ /* The ei_global functions */ /* -------------------------------------------------------------------- */ diff --git a/lib/erl_interface/src/Makefile.in b/lib/erl_interface/src/Makefile.in index de82f4ad51..061fd05a1d 100644 --- a/lib/erl_interface/src/Makefile.in +++ b/lib/erl_interface/src/Makefile.in @@ -96,7 +96,7 @@ AR_FLAGS=rcv endif INCFLAGS = -I. -I../include -Iconnect -Iencode -Idecode -Imisc -Iepmd \ - -Iregistry -I$(TARGET) + -I$(TARGET) ifeq ($(USING_VC),yes) WARNFLAGS = -Wall @@ -133,7 +133,7 @@ BINDIR = $(ERL_TOP)/lib/erl_interface/bin/$(TARGET) # -Wno-char-subscripts # -Wshadow -vpath %.c connect:encode:decode:misc:epmd:global:registry +vpath %.c connect:encode:decode:misc:epmd:global ########################################################################### # List targets @@ -289,7 +289,6 @@ EISOURCES = \ $(ENCODESRC) \ $(EPMDSRC) \ $(MISCSRC) \ - $(REGISTRYSRC) \ $(GLOBALSOURCES) CONNECTSRC = \ @@ -376,40 +375,6 @@ MISCSRC = \ misc/ei_init.c \ misc/ei_cmp_nc.c -REGISTRYSRC = \ - registry/hash_dohash.c \ - registry/hash_foreach.c \ - registry/hash_freetab.c \ - registry/hash_insert.c \ - registry/hash_isprime.c \ - registry/hash_lookup.c \ - registry/hash_newtab.c \ - registry/hash_remove.c \ - registry/hash_resize.c \ - registry/hash_rlookup.c \ - registry/reg_close.c \ - registry/reg_delete.c \ - registry/reg_dirty.c \ - registry/reg_dump.c \ - registry/reg_free.c \ - registry/reg_get.c \ - registry/reg_getf.c \ - registry/reg_geti.c \ - registry/reg_getp.c \ - registry/reg_gets.c \ - registry/reg_make.c \ - registry/reg_open.c \ - registry/reg_purge.c \ - registry/reg_resize.c \ - registry/reg_restore.c \ - registry/reg_set.c \ - registry/reg_setf.c \ - registry/reg_seti.c \ - registry/reg_setp.c \ - registry/reg_sets.c \ - registry/reg_stat.c \ - registry/reg_tabstat.c - GLOBALSOURCES = \ global/global_names.c \ global/global_register.c \ @@ -716,7 +681,6 @@ release: opt $(INSTALL_DIR) "$(RELSYSDIR)/src/global" $(INSTALL_DIR) "$(RELSYSDIR)/src/misc" $(INSTALL_DIR) "$(RELSYSDIR)/src/prog" - $(INSTALL_DIR) "$(RELSYSDIR)/src/registry" $(INSTALL_DIR) "$(RELEASE_PATH)/usr/include" $(INSTALL_DIR) "$(RELEASE_PATH)/usr/lib" $(INSTALL_DATA) $(APP_TARGET) "$(RELSYSDIR)/ebin/$(APP_FILE)" @@ -732,7 +696,6 @@ release: opt $(INSTALL_DATA) encode/*.[ch] "$(RELSYSDIR)/src/encode" $(INSTALL_DATA) epmd/*.[ch] "$(RELSYSDIR)/src/epmd" $(INSTALL_DATA) misc/*.[ch] "$(RELSYSDIR)/src/misc" - $(INSTALL_DATA) registry/*.[ch] "$(RELSYSDIR)/src/registry" $(INSTALL_DATA) global/*.[ch] "$(RELSYSDIR)/src/global" $(INSTALL_DATA) prog/*.[ch] "$(RELSYSDIR)/src/prog" diff --git a/lib/erl_interface/src/README.internal b/lib/erl_interface/src/README.internal index 42c45b46a9..51be1159d3 100644 --- a/lib/erl_interface/src/README.internal +++ b/lib/erl_interface/src/README.internal @@ -60,10 +60,6 @@ From time to time do a Handle communication with epmd - * src/registry/ - - Key/value database with optional mnesia back up - * src/misc/ The rest of the library @@ -140,9 +136,6 @@ The base for the config.h.in file was created with 'autoheader'. Writing source ****************************************************************************** -C files in "registry" are considered users of 'ei' and should not -include "eidef.h" or "config.h", only "ei.h". - C files in "prog" could include "config.h" directly. Other C files should include "eidef.h" as the first line of diff --git a/lib/erl_interface/src/registry/hash.h b/lib/erl_interface/src/registry/hash.h deleted file mode 100644 index 7fcaced319..0000000000 --- a/lib/erl_interface/src/registry/hash.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#ifndef _HASH_H -#define _HASH_H - -#include <stdio.h> - -#include "ei.h" /* We need our types there */ - -#define ei_hash_size(tab) ((tab)->size) -#define ei_hash_count(tab) ((tab)->count) - -#define ALIGN_QUAD 0x7 -#define ei_align(size) while (((unsigned)size) & ALIGN_QUAD) (size)++ - -int ei_isprime(int n); -int ei_dohash(const char *key); -void *ei_hash_lookup(ei_hash *tab, const char *key); -const char *ei_hash_rlookup(ei_hash *tab, const void *value); -int ei_hash_foreach(ei_hash *tab, int (*f)(const char *key, const void *value)); -void *ei_hash_insert(ei_hash *tab, const char *key, const void *value); -void *ei_hash_remove(ei_hash *tab, const char *key); -ei_hash *ei_hash_newtab(int tabsize); -ei_hash *ei_hash_resize(ei_hash *oldtab, int newsize); -int ei_hash_freetab(ei_hash *tab, void (*f)(void *)); -void ei_hash_stats(ei_hash *tab, FILE *out); -void ei_hash_bfree(ei_hash *tab, ei_bucket *b); - -#endif /* _HASH_H */ diff --git a/lib/erl_interface/src/registry/hash_dohash.c b/lib/erl_interface/src/registry/hash_dohash.c deleted file mode 100644 index 6f859cef2e..0000000000 --- a/lib/erl_interface/src/registry/hash_dohash.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include "hash.h" - -/* This is hashpjw, from the dragon book */ -/* Note that this function is only used as a default hash function. - * All calls are made through the hash pointer in the tab structure. - * The only place this function is explicitly referenced is in - * hash_newtab(); Users can use hash_setfunc() to change the hash function. - */ -int ei_dohash(const char *key) -{ - const char *s; - unsigned h = 0; - unsigned g; - - for (s=key; *s; s++) { - h = (h << 4) + *s; - if ((g = (h & 0xf0000000))) { /* assumes 32-bit int */ - h = h^(g >> 24); - h = h^g; - } - } - return h; -} - - diff --git a/lib/erl_interface/src/registry/hash_foreach.c b/lib/erl_interface/src/registry/hash_foreach.c deleted file mode 100644 index b58df27e8e..0000000000 --- a/lib/erl_interface/src/registry/hash_foreach.c +++ /dev/null @@ -1,45 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include "hash.h" - -/* perform f(key,value) on each key-value pair in the table. - * hash_foreach() will traverse the table until the end is reached or - * until f() returns a non-zero value, whichever comes first. The - * return value from f() will be returned to the caller, or 0 if the - * entire table was traversed. - */ -int ei_hash_foreach(ei_hash *tab, int (*f)(const char *key, const void *value)) -{ - ei_bucket *b; - int i; - int r; - - for (i=0; i<tab->size; i++) { - b=tab->tab[i]; - while (b) { - if (f && (r=f(b->key,b->value))) return r; - b = b->next; - } - } - return 0; -} - diff --git a/lib/erl_interface/src/registry/hash_freetab.c b/lib/erl_interface/src/registry/hash_freetab.c deleted file mode 100644 index 0a2c0dcfe6..0000000000 --- a/lib/erl_interface/src/registry/hash_freetab.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include "hash.h" - -/* remove all the key-values from a table. The - * values are removed with - * the user-provided function f. - */ -int ei_hash_freetab(ei_hash *tab, void (*f)(void *)) -{ - ei_bucket *b, *next; - int i; - - for (i=0; i<tab->size; i++) { - b=tab->tab[i]; - while (b) { - next = b->next; - - if (f) f((void *)b->value); - - /* no point in saving these buckets on freelist */ - free(b); - b = next; - } - } - - /* remove the freelist */ - b = tab->freelist; - while (b) { - next = b->next; - free(b); - b = next; - } - - /* remove the table */ - free(tab); - - return 0; -} diff --git a/lib/erl_interface/src/registry/hash_insert.c b/lib/erl_interface/src/registry/hash_insert.c deleted file mode 100644 index 0002cb64df..0000000000 --- a/lib/erl_interface/src/registry/hash_insert.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include <string.h> -#include "hash.h" - -/* this function returns a bucket - from the freelist if one was found - * there, or from malloc(). Only "small" buckets, i.e. those whose - * keys are short enough to be stored in the bucket itself, are saved - * on the freelist. - */ -static ei_bucket *ei_hash_bmalloc(ei_hash *tab) -{ - ei_bucket *new; - - if (tab->freelist) { - new = tab->freelist; - tab->freelist = new->next; - /* fprintf(stderr,"getting bucket from freelist\n"); */ - } - else { - new = malloc(sizeof(*new)); - /* fprintf(stderr,"allocating new (small) bucket\n"); */ - } - - return new; -} - -/* insert a new key-value pair. The old value (if any) is returned. If - * the malloc fails the function returns NULL. This is potentially a - * problem since the function returns the same thing when malloc fails - * as when a item is inserted that did not previously exist in the - * table. */ -void *ei_hash_insert(ei_hash *tab, const char *key, const void *value) -{ - const void *oldval=NULL; - ei_bucket *b=NULL; - int h, rh; - - rh = tab->hash(key); - h = rh % tab->size; - - b=tab->tab[h]; - while (b) { - if ((rh == b->rawhash) && (!strcmp(key,b->key))) - break; - b=b->next; - } - - if (b) { - /* replace existing value, return old value */ - oldval = b->value; - b->value = value; - } - else { - int keylen = strlen(key); - - /* this element is new */ - if (keylen < EI_SMALLKEY) { - /* short keys stored directly in bucket */ - /* try to get bucket from freelist */ - if ((b = ei_hash_bmalloc(tab)) == NULL) return NULL; - b->key = b->keybuf; - } - else { - /* for longer keys we allocate space */ - int keypos=sizeof(*b); - - ei_align(keypos); - if ((b = malloc(keypos+keylen+1)) == NULL) return NULL; - b->key = (char *)b + keypos; - /* fprintf(stderr,"allocating new (large) bucket\n"); */ - } - - /* fill in the blanks */ - b->rawhash = rh; - strcpy((char *)b->key,key); - b->value = value; - - /* some statistiscs */ - if (!tab->tab[h]) tab->npos++; - tab->nelem++; - - /* link in the new element */ - b->next = tab->tab[h]; - tab->tab[h] = b; - } - return (void *)oldval; -} - diff --git a/lib/erl_interface/src/registry/hash_isprime.c b/lib/erl_interface/src/registry/hash_isprime.c deleted file mode 100644 index 58166c6957..0000000000 --- a/lib/erl_interface/src/registry/hash_isprime.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include "hash.h" - -/* this is a general prime factoring function - * we get one prime factor each time we call it - * we only use it here to determine if n is prime, - * by checking if factor(n) == n . - */ -static int factor(int n) -{ - /* FIXME problem for threaded?! */ - static int a[] = { 0, 4, 1, 2, 0, 2 }; - static int m = 0; - static int d = 0; - - if (n) { - m = n; - d = 2; - } - - while ((d*d) <= m) { - if (!(m%d)) { - m /= d; - return d; - } - d += a[d%6]; - } - n = m; - m = 0; - - return n; -} - -/* true if n prime */ -int ei_isprime(int n) -{ - return (n == factor(n)); -} diff --git a/lib/erl_interface/src/registry/hash_lookup.c b/lib/erl_interface/src/registry/hash_lookup.c deleted file mode 100644 index 31c30179df..0000000000 --- a/lib/erl_interface/src/registry/hash_lookup.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include <string.h> -#include "hash.h" - -void *ei_hash_lookup(ei_hash *tab, const char *key) -{ - int h, rh; - ei_bucket *b=NULL; - - rh = tab->hash(key); - h = rh % tab->size; - - b=tab->tab[h]; - while (b) { - if ((rh == b->rawhash) && (!strcmp(key,b->key))) - return (void *)b->value; - b=b->next; - } - return NULL; -} - - diff --git a/lib/erl_interface/src/registry/hash_newtab.c b/lib/erl_interface/src/registry/hash_newtab.c deleted file mode 100644 index 4baa5a7b41..0000000000 --- a/lib/erl_interface/src/registry/hash_newtab.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include <string.h> -#include "hash.h" - -ei_hash *ei_hash_newtab(int tabsize) -{ - ei_hash *tab=NULL; - int bucketpos=sizeof(*tab); - - /* make sure size is odd, then increase until prime */ - tabsize |= 0x1; - while (!ei_isprime(tabsize)) tabsize +=2; - - /* we will only do one malloc, so "sizeof(*tab)" - * must be adjusted to align tab->tab properly - */ - ei_align(bucketpos); - - /* single malloc, then fill in all fields */ - if ((tab = malloc(bucketpos + (tabsize * (sizeof(*(tab->tab))))))) { - tab->tab = (ei_bucket **)((char *)tab + bucketpos); - memset(tab->tab,0,tabsize*sizeof(*(tab->tab))); - tab->hash = ei_dohash; - tab->size = tabsize; - tab->npos = 0; - tab->nelem = 0; - tab->freelist = NULL; - } - - return tab; -} - diff --git a/lib/erl_interface/src/registry/hash_remove.c b/lib/erl_interface/src/registry/hash_remove.c deleted file mode 100644 index 080f15889e..0000000000 --- a/lib/erl_interface/src/registry/hash_remove.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include <string.h> -#include "hash.h" - -/* free a hash bucket. If the bucket contained a long key (more that - * EI_SMALLKEY) the bucket is thrown away (really freed). If the - * bucket contained a short key, then it can be saved on the freelist - * for later use. Buckets with short keys have (key == keybuf). - */ -void ei_hash_bfree(ei_hash *tab, ei_bucket *b) -{ - if (!b) return; - - /* we throw away buckets with long keys (i.e. non-standard buckets) */ - if (b->key != b->keybuf) { - /* fprintf(stderr,"freeing bucket with long key (%s)\n",b->key); */ - free(b); - } - - else { - /* others we save on (tab-local) freelist */ - /* fprintf(stderr,"saving bucket with short key (%s)\n",b->key); */ - b->next = tab->freelist; - tab->freelist = b; - } - - return; -} - -void *ei_hash_remove(ei_hash *tab, const char *key) -{ - ei_bucket *b=NULL, *tmp=NULL; - const void *oldval=NULL; - int h, rh; - - rh = tab->hash(key); - h = rh % tab->size; - - /* is it in the first position? */ - if ((b=tab->tab[h])) { - if ((rh == b->rawhash) && (!strcmp(key,b->key))) { - tab->tab[h] = b->next; - oldval = b->value; - ei_hash_bfree(tab,b); - - tab->nelem--; - if (!tab->tab[h]) tab->npos--; - } - else { - /* is it later in the chain? */ - while (b->next) { - if ((rh == b->next->rawhash) && (!strcmp(key,b->next->key))) { - tmp = b->next; - b->next = tmp->next; - oldval = tmp->value; - ei_hash_bfree(tab,tmp); - - tab->nelem--; - break; - } - b=b->next; - } - } - } - return (void *)oldval; -} - diff --git a/lib/erl_interface/src/registry/hash_resize.c b/lib/erl_interface/src/registry/hash_resize.c deleted file mode 100644 index 031d8bfbf6..0000000000 --- a/lib/erl_interface/src/registry/hash_resize.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include "hash.h" - -/* move the elements from oldtab to a new table newsize. The old table - * is freed and the caller should discard the pointer. On failure - * (i.e. if malloc fails) return the old table and do nothing. -*/ -ei_hash *ei_hash_resize(ei_hash *oldtab, int newsize) -{ - ei_hash *newtab=NULL; - ei_bucket *b, *next; - int i,h; - - /* make sure size is odd, then increase until prime */ - newsize |= 0x1; - while (!ei_isprime(newsize)) newsize +=2; - - if (newsize == oldtab->size) return oldtab; - - /* make a new table */ - if (!(newtab = ei_hash_newtab(newsize))) return oldtab; - newtab->hash = oldtab->hash; - - /* move the buckets, rehashing */ - /* note that this will reverse the order of any chains */ - for (i=0; i<oldtab->size; i++) { - b=oldtab->tab[i]; - while (b) { - next = b->next; - h = b->rawhash % newtab->size; - b->next=newtab->tab[h]; - if (!newtab->tab[h]) newtab->npos++; - newtab->tab[h]=b; - b = next; - } - } - /* the new table has the same number of elements as the old one */ - newtab->nelem = oldtab->nelem; - - /* the new table takes over the freelist from the old one */ - newtab->freelist = oldtab->freelist; - - /* now it's safe to remove the old table */ - free(oldtab); - - return newtab; -} diff --git a/lib/erl_interface/src/registry/hash_rlookup.c b/lib/erl_interface/src/registry/hash_rlookup.c deleted file mode 100644 index b0a948673a..0000000000 --- a/lib/erl_interface/src/registry/hash_rlookup.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include "hash.h" - -/* this function does a reverse lookup and returns the first key whose - * value matches value. This operation may be lengthy! Also, there is - * no guarantee that the *values* are unique in the hash table, so the - * returned key might not be the one you expect. - */ -const char *ei_hash_rlookup(ei_hash *tab, const void *value) -{ - ei_bucket *b; - int i; - - for (i=0; i<tab->size; i++) { - b=tab->tab[i]; - while (b) { - if (b->value == value) return b->key; - b = b->next; - } - } - return NULL; -} - diff --git a/lib/erl_interface/src/registry/reg.h b/lib/erl_interface/src/registry/reg.h deleted file mode 100644 index 261e36ac06..0000000000 --- a/lib/erl_interface/src/registry/reg.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#ifndef _REG_H -#define _REG_H - -#include "ei.h" /* Our public defines, types and declarations */ -#include "hash.h" - -#define EI_MNESIA_MODULE "mnesia_registry" - -#define EI_MNESIA_DUMP "start_dump" -#define EI_MNESIA_WRITE "write" -#define EI_MNESIA_DELETE "delete" -#define EI_MNESIA_COMMIT "commit" - -#define EI_MNESIA_RESTORE "start_restore" -#define EI_MNESIA_SEND "send_records" -#define EI_MNESIA_RECV "restore" -#define EI_MNESIA_SIZE "size" - -#define EI_REG_TYPEMASK 0xf8 /* all but lowest bits */ -#define ei_reg_typeof(r) (r->attr & EI_REG_TYPEMASK) - -ei_reg_obj *ei_reg_make(ei_reg *reg, int attr); - -void ei_reg_free(ei_reg *reg, ei_reg_obj *obj); - -#endif /* _REG_H */ diff --git a/lib/erl_interface/src/registry/reg_close.c b/lib/erl_interface/src/registry/reg_close.c deleted file mode 100644 index c1475383e1..0000000000 --- a/lib/erl_interface/src/registry/reg_close.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include "reg.h" - -/* really remove an object (help function to hash_freetab) */ -static void obj_free(void *p) -{ - ei_reg_obj *obj = p; - - if (obj) { - switch (ei_reg_typeof(obj)) { - case EI_STR: - free(obj->val.s); - break; - - case EI_BIN: - free(obj->val.p); - break; - } - - /* really remove the inode (don't use freelist here) */ - free(obj); - } - return; -} - -/* close an open registry */ -int ei_reg_close(ei_reg *reg) -{ - ei_reg_obj *obj, *next; - - if (!reg) return -1; /* return EI_BADARG; */ - - /* remove hash_table */ - ei_hash_freetab(reg->tab,obj_free); - - /* remove freelist */ - obj = reg->freelist; - while (obj) { - next = obj->next; - free(obj); - obj = next; - } - - /* remove registry */ - free(reg); - - return 0; -} diff --git a/lib/erl_interface/src/registry/reg_delete.c b/lib/erl_interface/src/registry/reg_delete.c deleted file mode 100644 index 8882f611bc..0000000000 --- a/lib/erl_interface/src/registry/reg_delete.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include "reg.h" - -int ei_reg_delete(ei_reg *reg, const char *key) -{ - ei_hash *tab; - ei_reg_obj *obj; - - if (!key || !reg) return -1; /* return EI_BADARG; */ - tab = reg->tab; - if (!(obj = ei_hash_lookup(tab,key))) return -1; /* return EI_NOTFOUND; */ - - /* just mark the object deleted */ - obj->attr |= (EI_DELET | EI_DIRTY); - - return 0; -} diff --git a/lib/erl_interface/src/registry/reg_dirty.c b/lib/erl_interface/src/registry/reg_dirty.c deleted file mode 100644 index 00f19482c2..0000000000 --- a/lib/erl_interface/src/registry/reg_dirty.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include "reg.h" - -int ei_reg_markdirty(ei_reg *reg, const char *key) -{ - ei_hash *tab; - ei_reg_obj *obj; - - if (!key || !reg) return -1; /* EI_BADARG; */ - tab = reg->tab; - if (!(obj = ei_hash_lookup(tab,key))) return -1; /* return EI_NOTFOUND; */ - - /* just mark the object dirty */ - obj->attr |= EI_DIRTY; - - return 0; -} diff --git a/lib/erl_interface/src/registry/reg_dump.c b/lib/erl_interface/src/registry/reg_dump.c deleted file mode 100644 index f90fd4d4b6..0000000000 --- a/lib/erl_interface/src/registry/reg_dump.c +++ /dev/null @@ -1,321 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2020. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include <string.h> -#include "eidef.h" -#include "eiext.h" -#include "reg.h" -#include "eisend.h" -#include "eirecv.h" -#include "ei_connect_int.h" - -static int mn_start_dump(int fd, const erlang_pid *self, - erlang_pid *mnesia, const char *mntab) -{ - char buf[EISMALLBUF]; - char *bufp = buf; - char tmpbuf[64]; - int index = 0; - erlang_msg msg; - int type; - int arity; - int version; - int msglen; - int i; - int needlink; - int needpid; - - /* set up rpc arguments */ - /* { PidFrom, { call, Mod, Fun, Args, user }} */ - ei_encode_version(buf,&index); - ei_encode_tuple_header(buf,&index,2); - ei_encode_pid(buf,&index,self); /* PidFrom */ - ei_encode_tuple_header(buf,&index,5); - ei_encode_atom(buf,&index,"call"); /* call */ - ei_encode_atom(buf,&index,EI_MNESIA_MODULE); /* Mod */ - ei_encode_atom(buf,&index,EI_MNESIA_DUMP); /* Fun */ - ei_encode_list_header(buf,&index,2); /* Args: [ table, self() ] */ - ei_encode_atom(buf,&index,mntab); - ei_encode_pid(buf,&index,self); - ei_encode_empty_list(buf,&index); - ei_encode_atom(buf,&index,"user"); /* user */ - - /* make the rpc call */ - if (ei_send_reg_encoded(fd,self,"rex",buf,index)) return -1; - - /* get the reply: expect link and pid (not sure which will come first though) */ - needlink = needpid = 1; - while (needlink || needpid) { - /* get message */ - while (1) { - index = EISMALLBUF; - if (!(i = ei_recv_internal(fd,&bufp,&index,&msg,&msglen,1,0))) continue; - else break; - } - - switch (i) { - case ERL_LINK: - /* got link */ - if (!needlink) return -1; - needlink = 0; - break; - - case ERL_SEND: - /* got message - does it contain a pid? */ - if (!needpid) return -1; - else { - /* expecting { rex, <pid> } */ - index = 0; - if (ei_decode_version(buf,&index,&version) - || ei_decode_tuple_header(buf,&index,&arity) - || (arity != 2) - || ei_decode_atom(buf,&index,tmpbuf) - || strcmp(tmpbuf,"rex") - || ei_get_type(buf,&index,&type,&arity) - || (type != ERL_PID_EXT)) - return -1; /* bad response from other side */ - - if (ei_decode_pid(buf,&index,mnesia)) return -1; - - /* got pid */ - needpid = 0; - } - break; - - default: - return -1; /* wasn't link or pid */ - } - } - return 0; -} - -static int mn_send_commit(int fd, erlang_pid *mnesia, erlang_pid *self) -{ - char buf[EISMALLBUF]; - char *bufp=buf; - char string[256]; - int index = 0; - int version,arity; - int msglen; - erlang_msg msg; - int i; - - /* set up commit message { commit, self() } */ - ei_encode_version(buf,&index); - ei_encode_tuple_header(buf,&index,2); - ei_encode_atom(buf,&index,EI_MNESIA_COMMIT); - ei_encode_pid(buf,&index,self); - - /* send it */ - if (ei_send_encoded(fd,mnesia,buf,index)) return -1; - - /* get reply */ - while (1) { - index = EISMALLBUF; - if (!(i=ei_recv_internal(fd,&bufp,&index,&msg,&msglen,1,0))) continue; - else if (i < 0) return -1; - else break; - } - - if (i == ERL_SEND) { - index = 0; - if (ei_decode_version(buf,&index,&version) - || ei_decode_tuple_header(buf,&index,&arity) - || ei_decode_atom(buf,&index,string)) - return -1; - - if (!strcmp(string,"ok")) return 0; - } - /* wrong message type */ - return -1; -} - -static int mn_send_delete(int fd, erlang_pid *mnesia, const char *key) -{ - char sbuf[EISMALLBUF]; - char *dbuf = NULL; - char *msgbuf; - int index = 0; - int len = strlen(key) + 32; /* 32 is a slight overestimate */ - - if (len > EISMALLBUF) - if (!(dbuf = malloc(len))) - return -1; - msgbuf = (dbuf ? dbuf : sbuf); - - /* set up delete message { delete, Key } */ - ei_encode_version(msgbuf,&index); - ei_encode_tuple_header(msgbuf,&index,2); - ei_encode_atom(msgbuf,&index,EI_MNESIA_DELETE); - ei_encode_string(msgbuf,&index,key); - - /* send it */ - if (ei_send_encoded(fd,mnesia,msgbuf,index)) { - if (dbuf) free(dbuf); - return -1; - } - - if (dbuf) free(dbuf); - return 0; -} - -static int mn_send_write(int fd, erlang_pid *mnesia, const char *key, ei_reg_obj *obj) -{ - char sbuf[EISMALLBUF]; - char *dbuf = NULL; - char *msgbuf; - int index = 0; - int keylen = strlen(key) + 1; - int len = 32 + keylen + obj->size; - - if (len > EISMALLBUF) - if (!(dbuf = malloc(len))) - return -1; - msgbuf = (dbuf ? dbuf : sbuf); - - ei_encode_version(msgbuf,&index); - ei_encode_tuple_header(msgbuf,&index,6); - ei_encode_atom(msgbuf,&index,EI_MNESIA_WRITE); - ei_encode_string(msgbuf,&index,key); - ei_encode_long(msgbuf,&index,keylen); - ei_encode_long(msgbuf,&index,obj->attr); - ei_encode_long(msgbuf,&index,obj->size); - - switch (ei_reg_typeof(obj)) { - case EI_INT: - ei_encode_long(msgbuf,&index,obj->val.i); - break; - case EI_FLT: - ei_encode_double(msgbuf,&index,obj->val.f); - break; - case EI_STR: - if (obj->size > 0) ei_encode_string(msgbuf,&index,obj->val.s); - else ei_encode_long(msgbuf,&index, 0); /* just the NULL pointer */ - break; - case EI_BIN: - if (obj->size > 0) ei_encode_binary(msgbuf,&index,obj->val.p,obj->size); - else ei_encode_long(msgbuf,&index, obj->val.i); /* just the pointer */ - break; - default: - if (dbuf) free(dbuf); - return -1; - } - - /* send it */ - if (ei_send_encoded(fd,mnesia,msgbuf,index)) { - if (dbuf) free(dbuf); - return -1; - } - - if (dbuf) free(dbuf); - return 0; -} - -static int mn_get_unlink(int fd) -{ - erlang_msg msg; - char buf[EISMALLBUF]; - char *bufp=buf; - int index; - int msglen; - - /* wait for unlink or exit */ - while (1) { - index = EISMALLBUF; - switch (ei_recv_internal(fd,&bufp,&index,&msg,&msglen,1,0)) { - case 0: continue; - case ERL_UNLINK: return 0; - default: return -1; - } - } - return 0; -} - -/* dump to backup */ -/* fd is open connection to erlang node */ -int ei_reg_dump(int fd, ei_reg *reg, const char *mntab, int flags) -{ - ei_hash *tab; - erlang_pid *self; - erlang_pid mnesia; - ei_bucket *b; - ei_reg_obj *obj; - const char *key; - ei_cnode *ec; - int i; - - if (!reg || !mntab) return -1; /* return EI_BADARG; */ - tab = reg->tab; - - /* make a self pid */ - - if ((ec = ei_fd_to_cnode(fd)) == NULL) { - return -1; - } - - self = ei_self(ec); - - if (mn_start_dump(fd,self,&mnesia,mntab)) return -1; - - /* traverse the table, passing objects to mnesia */ - for (i=0; i<tab->size; i++) { - b=tab->tab[i]; - while (b) { - obj = (ei_reg_obj*)(b->value); /* cast to eliminate 'const' warning */ - key = b->key; - - if ((flags & EI_FORCE) || (obj->attr & EI_DIRTY)) { - if (obj->attr & EI_DELET) { - if (mn_send_delete(fd,&mnesia,key)) { - ei_send_exit(fd,self,&mnesia,"delete failed"); - return -1; - } - } - else { - if (mn_send_write(fd,&mnesia,key,obj)) { - ei_send_exit(fd,self,&mnesia,"update failed"); - return -1; - } - } - } - b = b->next; - } - } - - /* end the transaction */ - if (mn_send_commit(fd,&mnesia,self)) { - ei_send_exit(fd,self,&mnesia,"commit failed"); - return -1; - } - - /* wait for unlink */ - if (mn_get_unlink(fd)) return -1; - - /* this point only reached if all went ok so far... */ - - /* now remove all deleted objects, unless the caller asked us not to */ - if (!(flags & EI_NOPURGE)) ei_reg_purge(reg); - - /* success */ - return 0; - -} diff --git a/lib/erl_interface/src/registry/reg_free.c b/lib/erl_interface/src/registry/reg_free.c deleted file mode 100644 index d835520e76..0000000000 --- a/lib/erl_interface/src/registry/reg_free.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include "reg.h" - -/* free a registry object (inode) on the freelist. The "value" - * contained by the object is removed. - */ -void ei_reg_free(ei_reg *reg, ei_reg_obj *obj) -{ - /* free the value part */ - switch (ei_reg_typeof(obj)) { - case EI_STR: - free(obj->val.s); - break; - - case EI_BIN: - free(obj->val.p); - break; - } - - /* fprintf(stderr,"%s:%d: saving %p on freelist\n",__FILE__,__LINE__,obj);*/ - - /* save the rest on the freelist */ - obj->next = reg->freelist; - reg->freelist = obj; - - return; -} diff --git a/lib/erl_interface/src/registry/reg_get.c b/lib/erl_interface/src/registry/reg_get.c deleted file mode 100644 index 73975f6a91..0000000000 --- a/lib/erl_interface/src/registry/reg_get.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdarg.h> -#include "reg.h" - -/* this is the general "get" function. Values are copied into a buffer - * provided by the caller, and the return value indicates success or - * failure. This function can get all types except directorys. The user - * must specify the type of data he is expecting, or 0 if he doesn't - * care. On success, the data type is returned. If the requested data - * type does not match the data found, EI_TYPE is returned. - */ -int ei_reg_getval(ei_reg *reg, const char *key, int flags, ...) -{ - ei_hash *tab; - ei_reg_obj *obj=NULL; - va_list ap; - int rval; - int objtype; - - if (!key || !reg) return -1; /* return EI_BADARG; */ - tab = reg->tab; - if (!(obj=ei_hash_lookup(tab,key))) return -1; /* return EI_NOTFOUND; */ - if (obj->attr & EI_DELET) return -1; /* return EI_NOTFOUND; */ - - /* if type was specified then it must match object */ - objtype = ei_reg_typeof(obj); - if (flags && (flags != objtype)) return -1; /* return EI_TYPE; */ - - va_start(ap,flags); - - switch ((rval = objtype)) { - case EI_INT: { - long *ip; - - if (!(ip = va_arg(ap,long*))) rval = -1; /* EI_BADARG; */ - else *ip = obj->val.i; - break; - } - case EI_FLT: { - double *fp; - - if (!(fp = va_arg(ap,double*))) rval = -1; /* EI_BADARG; */ - else *fp = obj->val.f; - break; - } - case EI_STR: { - char **sp; - - if (!(sp = va_arg(ap,char**))) rval = -1; /* EI_BADARG; */ - else *sp = obj->val.s; - break; - } - case EI_BIN: { - void **pp; - int *size; - - if (!(pp = va_arg(ap,void**))) rval = -1; /* EI_BADARG; */ - else *pp = obj->val.p; - if ((size=va_arg(ap,int*))) *size=obj->size; - break; - } - default: - /* can't (should never) happen */ - rval = -1; - /* rval = EI_UNKNOWN; */ - } - - /* clean up & return */ - va_end(ap); - return rval; -} diff --git a/lib/erl_interface/src/registry/reg_getf.c b/lib/erl_interface/src/registry/reg_getf.c deleted file mode 100644 index 35956c3d79..0000000000 --- a/lib/erl_interface/src/registry/reg_getf.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include "reg.h" - -double ei_reg_getfval(ei_reg *reg, const char *key) -{ - ei_hash *tab; - ei_reg_obj *obj=NULL; - - if (!key || !reg) return -1; /* return (double)EI_BADARG; */ - tab = reg->tab; - if (!(obj=ei_hash_lookup(tab,key))) return -1; /* return EI_NOTFOUND; */ - if (obj->attr & EI_DELET) return -1; /* return EI_NOTFOUND; */ - if (ei_reg_typeof(obj) != EI_FLT) return -1; /* return (double)EI_TYPE; */ - - return obj->val.f; -} diff --git a/lib/erl_interface/src/registry/reg_geti.c b/lib/erl_interface/src/registry/reg_geti.c deleted file mode 100644 index 09709fdf3d..0000000000 --- a/lib/erl_interface/src/registry/reg_geti.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include "reg.h" - -long ei_reg_getival(ei_reg *reg, const char *key) -{ - ei_hash *tab; - ei_reg_obj *obj=NULL; - - if (!key || !reg) return -1; /* return EI_BADARG; */ - tab = reg->tab; - if (!(obj=ei_hash_lookup(tab,key))) return -1; /* return EI_NOTFOUND; */ - if (obj->attr & EI_DELET) return -1; /* return EI_NOTFOUND; */ - if (ei_reg_typeof(obj) != EI_INT) return -1; /* return EI_TYPE; */ - - return obj->val.i; -} diff --git a/lib/erl_interface/src/registry/reg_getp.c b/lib/erl_interface/src/registry/reg_getp.c deleted file mode 100644 index faff00bcb0..0000000000 --- a/lib/erl_interface/src/registry/reg_getp.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include "reg.h" - -const void *ei_reg_getpval(ei_reg *reg, const char *key, int *size) -{ - ei_hash *tab; - ei_reg_obj *obj; - - if (!key || !reg) return NULL; - tab = reg->tab; - - if ((!(obj=ei_hash_lookup(tab,key))) || /* return (const void *)EI_NOTFOUND; */ - (obj->attr & EI_DELET) || /* return (const void *)EI_NOTFOUND; */ - (ei_reg_typeof(obj) != EI_BIN)) /* return (const void *)EI_TYPE; */ - return NULL; - - if (size) *size=obj->size; - return obj->val.p; -} diff --git a/lib/erl_interface/src/registry/reg_gets.c b/lib/erl_interface/src/registry/reg_gets.c deleted file mode 100644 index 27fd83ac03..0000000000 --- a/lib/erl_interface/src/registry/reg_gets.c +++ /dev/null @@ -1,39 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include "reg.h" - -const char *ei_reg_getsval(ei_reg *reg, const char *key) -{ - ei_hash *tab; - ei_reg_obj *obj=NULL; - - if (!key || !reg) return NULL; /* return (const char *)EI_BADARG; */ - tab = reg->tab; - - if ((!(obj=ei_hash_lookup(tab,key))) || /* return (const char *)EI_NOTFOUND; */ - (obj->attr & EI_DELET) || /* return (const char *)EI_NOTFOUND; */ - (ei_reg_typeof(obj) != EI_STR)) /* return (const char *)EI_TYPE; */ - return NULL; - - return obj->val.s; -} diff --git a/lib/erl_interface/src/registry/reg_make.c b/lib/erl_interface/src/registry/reg_make.c deleted file mode 100644 index ed77a740b6..0000000000 --- a/lib/erl_interface/src/registry/reg_make.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include "reg.h" - - -/* make a new ei_reg_obj object. If the freelist for this registry is - * not empty, an object will be returned from there. Otherwise one - * will be created with malloc(). - */ -ei_reg_obj *ei_reg_make(ei_reg *reg, int attr) -{ - ei_reg_obj *new=NULL; - - if (reg->freelist) { - new = reg->freelist; - reg->freelist = new->next; - /* fprintf(stderr,"%s:%d: found %p on freelist\n",__FILE__,__LINE__,new); */ - } - else { - new = malloc(sizeof(*new)); - /* fprintf(stderr,"%s:%d: allocated %p\n",__FILE__,__LINE__,new); */ - } - - if (new) { - new->attr=attr | EI_DIRTY; - new->size=0; - new->next = NULL; - } - return new; -} diff --git a/lib/erl_interface/src/registry/reg_open.c b/lib/erl_interface/src/registry/reg_open.c deleted file mode 100644 index 73c2140145..0000000000 --- a/lib/erl_interface/src/registry/reg_open.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include "reg.h" - -/* open a registry */ -ei_reg *ei_reg_open(int size) -{ - ei_reg *new; - - if (size <= 0) return NULL; - - if (!(new = malloc(sizeof(*new)))) return NULL; - - new->freelist = NULL; - - if (!(new->tab = ei_hash_newtab(size))) { - free(new); - return NULL; - } - - return new; -} diff --git a/lib/erl_interface/src/registry/reg_purge.c b/lib/erl_interface/src/registry/reg_purge.c deleted file mode 100644 index 08483e32f5..0000000000 --- a/lib/erl_interface/src/registry/reg_purge.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include "reg.h" - -static ei_bucket *do_purge(ei_reg *reg, int i) -{ - ei_hash *tab = reg->tab; - ei_bucket *head = tab->tab[i]; - ei_bucket *this, *next; - ei_reg_obj *obj; - - /* first position special case */ - while ((this=head)) { - obj = (ei_reg_obj*)(this->value); /* cast to eliminate 'const' warning */ - if (obj->attr & EI_DELET) { - head = this->next; - ei_reg_free(reg,obj); /* free obj to freelist */ - ei_hash_bfree(tab,this); /* free bucket to freelist */ - tab->nelem--; - } - else break; - } - - /* check remaining positions */ - this = head; - while (this && this->next) { - next = this->next; - obj = (ei_reg_obj*)(next->value); /* cast to eliminate 'const' warning */ - if (obj->attr & EI_DELET) { - this->next = next->next; - ei_reg_free(reg,obj); /* free object to freelist */ - ei_hash_bfree(tab,next); /* free bucket to freelist */ - tab->nelem--; - } - else this = this->next; - } - - return head; -} - -int ei_reg_purge(ei_reg *reg) -{ - ei_hash *tab; - int i; - - if (!reg) return -1; - tab = reg->tab; - - for (i=0;i<tab->size;i++) { - if ((tab->tab[i])) { - tab->tab[i] = do_purge(reg,i); - if (!tab->tab[i]) tab->npos--; - } - } - - return 0; -} diff --git a/lib/erl_interface/src/registry/reg_resize.c b/lib/erl_interface/src/registry/reg_resize.c deleted file mode 100644 index b451a28348..0000000000 --- a/lib/erl_interface/src/registry/reg_resize.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include "reg.h" - -/* resize a registry - return the new size or -1 on error */ -int ei_reg_resize(ei_reg *reg, int newsize) -{ - ei_hash *newtab=NULL; - - if (!reg) return -1; - if (newsize <= 0) return -1; - - if ((newtab=ei_hash_resize(reg->tab,newsize))) { - reg->tab = newtab; - } - - return reg->tab->size; -} diff --git a/lib/erl_interface/src/registry/reg_restore.c b/lib/erl_interface/src/registry/reg_restore.c deleted file mode 100644 index 030bab19b9..0000000000 --- a/lib/erl_interface/src/registry/reg_restore.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include <string.h> -#include "eidef.h" -#include "eiext.h" -#include "reg.h" -#include "eisend.h" -#include "eirecv.h" -#include "ei_connect_int.h" - -static int mn_start_restore(int fd, const erlang_pid *self, erlang_pid *mnesia, const char *mntab, long *count, long *maxkey,long *maxobj) -{ - char buf[EISMALLBUF]; - char *bufp=buf; - char tmpbuf[64]; - int index = 0; - erlang_msg msg; - int arity; - int version; - int i; - int needlink; - int needmsg; - int msglen; - - /* set up rpc arguments */ - /* { PidFrom, { call, Mod, Fun, Args, user }} */ - ei_encode_version(buf,&index); - ei_encode_tuple_header(buf,&index,2); - ei_encode_pid(buf,&index,self); /* PidFrom */ - ei_encode_tuple_header(buf,&index,5); - ei_encode_atom(buf,&index,"call"); /* call */ - ei_encode_atom(buf,&index,EI_MNESIA_MODULE); /* Mod */ - ei_encode_atom(buf,&index,EI_MNESIA_RESTORE); /* Fun */ - ei_encode_list_header(buf,&index,2); /* Args: [ table, self() ] */ - ei_encode_atom(buf,&index,mntab); - ei_encode_pid(buf,&index,self); - ei_encode_empty_list(buf,&index); - ei_encode_atom(buf,&index,"user"); /* user */ - - /* make the rpc call */ - if (ei_send_reg_encoded(fd,self,"rex",buf,index)) return -1; - - /* get the reply: expect link and message (not sure which will come first though) */ - needlink = needmsg = 1; - while (needlink || needmsg) { - /* get message */ - index = EISMALLBUF; - while (!(i = ei_recv_internal(fd,&bufp,&index,&msg,&msglen,1,0))) index = EISMALLBUF; - - switch (i) { - case ERL_LINK: - /* got link */ - if (!needlink) return -1; - needlink = 0; - break; - - case ERL_SEND: - /* got message - is it the right one? */ - if (!needmsg) return -1; - else { - /* expecting { rex, { size, Pid, Count, MaxKey, MaxObj }} */ - index = 0; - if (ei_decode_version(buf,&index,&version) - || ei_decode_tuple_header(buf,&index,&arity) - || (arity != 2) - || ei_decode_atom(buf,&index,tmpbuf) - || strcmp(tmpbuf,"rex") - || ei_decode_tuple_header(buf,&index,&arity) - || (arity != 5) - || ei_decode_atom(buf,&index,tmpbuf) - || strcmp(tmpbuf,EI_MNESIA_SIZE) - || ei_decode_pid(buf,&index,mnesia) - || ei_decode_long(buf,&index,count) - || ei_decode_long(buf,&index,maxkey) - || ei_decode_long(buf,&index,maxobj)) - return -1; /* bad response from other side */ - - /* got msg */ - needmsg = 0; - } - break; - - default: - return -1; /* wasn't link or pid */ - } - } - return 0; -} - -static int mn_unlink(int fd) -{ - erlang_msg msg; - char buf[EISMALLBUF]; - char *bufp=buf; - int index; - int msglen; - - /* wait for unlink or exit */ - while (1) { - index = EISMALLBUF; - switch (ei_recv_internal(fd,&bufp,&index,&msg,&msglen,1,0)) { - case 0: continue; - case ERL_UNLINK: return 0; - default: return -1; - } - } - return 0; -} - -/* decode an object and insert it into the table */ -static int mn_decode_insert(ei_reg *reg, const char *msgbuf, int *index, char *key) -{ - long keylen; - long objlen; - long objtype; - void *objbuf = NULL; - long i; - double f; - - if (ei_decode_long(msgbuf,index,&keylen) - || ei_decode_long(msgbuf,index,&objlen) - || ei_decode_long(msgbuf,index,&objtype)) - return -1; - - - /* decode key */ - if (ei_decode_string(msgbuf,index,key)) { - if (objbuf) free(objbuf); - return -1; - } - - /* finally! decode object and insert in table */ - /* don't forget to fix attributes (dirty bit for example) */ - - /* FIXME: added cast but 64 bit trouble I think */ - switch ((int)objtype & EI_REG_TYPEMASK) { - case EI_INT: - if (ei_decode_long(msgbuf,index,&i)) return -1; - ei_reg_setival(reg,key,i); - break; - - case EI_FLT: - if (ei_decode_double(msgbuf,index,&f)) return -1; - ei_reg_setfval(reg,key,f); - break; - - case EI_STR: - objbuf = NULL; - if (objlen > 0) { - if (!(objbuf = malloc(objlen))) return -1; - if (ei_decode_string(msgbuf,index,objbuf)) { - free(objbuf); - return -1; - } - ei_reg_setsval(reg,key,objbuf); - } - else { - /* just a pointer to nothing */ - if (ei_decode_long(msgbuf,index,&i)) return -1; - ei_reg_setsval(reg,key,NULL); - } - break; - - case EI_BIN: - objbuf = NULL; - if (objlen > 0) { - if (!(objbuf = malloc(objlen))) return -1; - if (ei_decode_binary(msgbuf,index,objbuf,&i)) { - free(objbuf); - return -1; - } - /* assert(i == objlen) */ - ei_reg_setpval(reg,key,objbuf,objlen); - } - else { - /* just a pointer to nothing */ - if (ei_decode_long(msgbuf,index,&i)) return -1; - ei_reg_setpval(reg,key,(void *)i,0); - } - break; - - default: - /* unknown type */ - if (objbuf) free(objbuf); - return -1; - } /* switch */ - - return 0; -} - -/* help function passed to hash_foreach, to clear dirty bits */ -/* use after successful restore */ -static int clean_obj(const char *key, const void *p) -{ - ei_reg_obj *obj = (ei_reg_obj *)p; - - if (obj) obj->attr &= ~EI_DIRTY; - - return 0; -} - -int ei_reg_restore(int fd, ei_reg *reg, const char *mntab) -{ - int i,j; - char tag[32]; - char sbuf[EISMALLBUF]; - char *dbuf = NULL; - char *msgbuf = NULL; - char *keybuf = NULL; - erlang_pid *self; - erlang_pid mnesia = {"",0,0,0}; - erlang_msg msg; - int index = 0; - int len = 0; - int msglen; - int version = 0; - int arity = 0; - long count = 0; - long maxkey = 0; - long maxobj = 0; - ei_cnode *ec; - - if (!reg || !mntab) return -1; /* return EI_BADARG; */ - - /* make a self pid */ - - if ((ec = ei_fd_to_cnode(fd)) == NULL) { - return -1; - } - - self = ei_self(ec); - - - if (mn_start_restore(fd,self,&mnesia,mntab,&count,&maxkey,&maxobj)) { - /* send exit *only* if we have pid */ - if (mnesia.node[0]) ei_send_exit(fd,self,&mnesia,"bad response from rpc start"); - return -1; - } - - if (count <= 0) { - ei_send_exit(fd,self,&mnesia,"nothing to do"); - return 0; - } - - /* make sure receive buffer can handle largest expected message */ - len = maxkey + maxobj + 512; - if (len > EISMALLBUF) - if (!(dbuf = malloc(len))) { - ei_send_exit(fd,self,&mnesia,"cannot allocate space for incoming data"); - return -1; - } - msgbuf = (dbuf ? dbuf : sbuf); - - /* allocate space for largest key */ - if (!(keybuf = malloc(maxkey+1))) goto restore_failure; - - /* get this ball rolling */ - index = 0; - ei_encode_version(msgbuf,&index); - ei_encode_tuple_header(msgbuf,&index,2); - ei_encode_atom(msgbuf,&index,"send_records"); - ei_encode_pid(msgbuf,&index,self); - if (ei_send_encoded(fd,&mnesia,msgbuf,index)) goto restore_failure; - - /* read as much as possible, until count or EXIT */ - for (i=0; i<count; i++) { - index = len; - while ((j = ei_recv_internal(fd,&msgbuf,&index,&msg,&msglen,1,0)) == 0) index = len; - if (j<0) goto restore_failure; - - /* decode the first part of the message */ - index = 0; - if ((msg.msgtype != ERL_SEND) - || ei_decode_version(msgbuf,&index,&version) - || ei_decode_tuple_header(msgbuf,&index,&arity) - || (arity != 6) - || ei_decode_atom(msgbuf,&index,tag) - || strcmp(tag,EI_MNESIA_RECV)) - goto restore_failure; - - /* decode the rest of the message and insert data into table */ - if (mn_decode_insert(reg,msgbuf,&index,keybuf)) goto restore_failure; - } - - if (keybuf) free(keybuf); - if (dbuf) free(dbuf); - - /* wait for unlink */ - if (mn_unlink(fd)) return -1; - - /* clear all the dirty bits */ - ei_hash_foreach(reg->tab,clean_obj); - - /* success */ - return 0; - -restore_failure: - ei_send_exit(fd,self,&mnesia,"restore failure"); - if (keybuf) free(keybuf); - if (dbuf) free(dbuf); - return -1; -} - diff --git a/lib/erl_interface/src/registry/reg_set.c b/lib/erl_interface/src/registry/reg_set.c deleted file mode 100644 index 3846df1cb5..0000000000 --- a/lib/erl_interface/src/registry/reg_set.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdarg.h> -#include "reg.h" - -int ei_reg_setval(ei_reg *reg, const char *key, int flags, ...) -{ - va_list ap; - int rval = 0; - - if (!key || !reg) return -1; /* return EI_BADARG; */ - - va_start(ap,flags); - - switch (flags & EI_REG_TYPEMASK) { - case EI_INT: { - long i; - - i = va_arg(ap,long); - rval = ei_reg_setival(reg,key,i); - break; - } - case EI_FLT: { - double f; - - f = va_arg(ap,double); - rval = ei_reg_setfval(reg,key,f); - break; - } - case EI_STR: { - char *s; - - s = va_arg(ap,char*); - rval = ei_reg_setsval(reg,key,s); - break; - } - case EI_BIN: { - void *p; - int len; - - p = va_arg(ap,void*); - len = va_arg(ap,int); - rval = ei_reg_setpval(reg,key,p,len); - break; - } - - default: - rval = -1; - /* rval = EI_BADARG; */ - } - - /* clean up & return */ - va_end(ap); - return rval; -} - diff --git a/lib/erl_interface/src/registry/reg_setf.c b/lib/erl_interface/src/registry/reg_setf.c deleted file mode 100644 index e0879cb3d5..0000000000 --- a/lib/erl_interface/src/registry/reg_setf.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include "reg.h" - -int ei_reg_setfval(ei_reg *reg, const char *key, double f) -{ - ei_hash *tab; - ei_reg_obj *obj=NULL; - - if (!key || !reg) return -1; /* return EI_BADARG; */ - tab = reg->tab; - - if ((obj=ei_hash_lookup(tab,key))) { - /* object with same name already exists */ - switch (ei_reg_typeof(obj)) { - case EI_INT: - break; - case EI_FLT: - break; - case EI_STR: - if (obj->size > 0) free(obj->val.s); - break; - case EI_BIN: - if (obj->size > 0) free(obj->val.p); - break; - default: - return -1; - /* return EI_UNKNOWN; */ - } - } - else { - /* object is new */ - if (!(obj=ei_reg_make(reg,EI_FLT))) return -1; /* return EI_NOMEM; */ - ei_hash_insert(tab,key,obj); - } - - obj->attr = EI_FLT | EI_DIRTY; - obj->val.f=f; - obj->size = 0; - - return 0; -} diff --git a/lib/erl_interface/src/registry/reg_seti.c b/lib/erl_interface/src/registry/reg_seti.c deleted file mode 100644 index 507ed9907e..0000000000 --- a/lib/erl_interface/src/registry/reg_seti.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include "reg.h" - -/* set and get values */ -int ei_reg_setival(ei_reg *reg, const char *key, long i) -{ - ei_hash *tab; - ei_reg_obj *obj=NULL; - - if (!key || !reg) return -1; /* return EI_BADARG; */ - tab = reg->tab; - - if ((obj=ei_hash_lookup(tab,key))) { - /* object with same name already exists */ - switch (ei_reg_typeof(obj)) { - case EI_INT: - break; - case EI_FLT: - break; - case EI_STR: - if (obj->size > 0) free(obj->val.s); - break; - case EI_BIN: - if (obj->size > 0) free(obj->val.p); - break; - default: - return -1; - /* return EI_UNKNOWN; */ - } - } - else { - /* object is new */ - if (!(obj=ei_reg_make(reg,EI_INT))) return -1; /* return EI_NOMEM; */ - ei_hash_insert(tab,key,obj); - } - - obj->attr = EI_INT | EI_DIRTY; - obj->val.i=i; - obj->size = 0; - - return 0; -} diff --git a/lib/erl_interface/src/registry/reg_setp.c b/lib/erl_interface/src/registry/reg_setp.c deleted file mode 100644 index 1dd158778a..0000000000 --- a/lib/erl_interface/src/registry/reg_setp.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include "reg.h" - -int ei_reg_setpval(ei_reg *reg, const char *key, const void *p, int size) -{ - ei_hash *tab; - ei_reg_obj *obj=NULL; - - if (size < 0) return -1; - if (!key || !reg) return -1; /* return EI_BADARG; */ - tab = reg->tab; - - if ((obj=ei_hash_lookup(tab,key))) { - /* object with same name already exists */ - switch (ei_reg_typeof(obj)) { - case EI_INT: - break; - case EI_FLT: - break; - case EI_STR: - if (obj->size > 0) free(obj->val.s); - break; - case EI_BIN: - if (obj->size > 0) free(obj->val.p); - break; - default: - return -1; - /* return EI_UNKNOWN; */ - } - } - else { - /* object is new */ - if (!(obj=ei_reg_make(reg,EI_BIN))) return -1; /* return EI_NOMEM; */ - ei_hash_insert(tab,key,obj); - } - - obj->attr = EI_BIN | EI_DIRTY; - obj->val.p=(void *)p; - obj->size=size; - - return 0; -} diff --git a/lib/erl_interface/src/registry/reg_sets.c b/lib/erl_interface/src/registry/reg_sets.c deleted file mode 100644 index d281d732b7..0000000000 --- a/lib/erl_interface/src/registry/reg_sets.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include <stdlib.h> -#include <string.h> -#include "reg.h" - -int ei_reg_setsval(ei_reg *reg, const char *key, const char *s) -{ - ei_hash *tab; - ei_reg_obj *obj=NULL; - int len = 0; - - - if (!key || !reg) return -1; /* return EI_BADARG; */ - tab = reg->tab; - if (s) len = strlen(s) +1; - - if ((obj=ei_hash_lookup(tab,key))) { - /* object with same name already exists */ - switch (ei_reg_typeof(obj)) { - case EI_INT: - break; - case EI_FLT: - break; - case EI_STR: - if (obj->size > 0) free(obj->val.s); - break; - case EI_BIN: - if (obj->size > 0) free(obj->val.p); - break; - default: - return -1; - /* return EI_UNKNOWN; */ - } - } - else { - /* object is new */ - if (!(obj=ei_reg_make(reg,EI_STR))) return -1; /* return EI_NOMEM; */ - ei_hash_insert(tab,key,obj); - } - - obj->attr = EI_STR | EI_DIRTY; - obj->val.s=(char *)s; - obj->size = len; - - return 0; -} diff --git a/lib/erl_interface/src/registry/reg_stat.c b/lib/erl_interface/src/registry/reg_stat.c deleted file mode 100644 index e946199f4a..0000000000 --- a/lib/erl_interface/src/registry/reg_stat.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include "reg.h" - -/* Get object attributes. - * This function returns a COPY of the ei_reg_obj - * struct for an object. - */ -int ei_reg_stat(ei_reg *reg, const char *key, struct ei_reg_stat *obuf) -{ - ei_hash *tab; - ei_reg_obj *obj; - - if (!key || !obuf || !reg) return -1; /* return EI_BADARG; */ - tab = reg->tab; - - if (!(obj=ei_hash_lookup(tab,key))) return -1; /* return EI_NOTFOUND; */ - - obuf->attr = obj->attr; - obuf->size = obj->size; - - return 0; -} diff --git a/lib/erl_interface/src/registry/reg_tabstat.c b/lib/erl_interface/src/registry/reg_tabstat.c deleted file mode 100644 index 1a3e654090..0000000000 --- a/lib/erl_interface/src/registry/reg_tabstat.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 1998-2016. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * %CopyrightEnd% - * - - */ -#include "reg.h" - -/* get table information */ -int ei_reg_tabstat(ei_reg *reg, struct ei_reg_tabstat *obuf) -{ - ei_hash *tab; - - if (!reg || !obuf) return -1; /* return EI_BADARG; */ - tab = reg->tab; - - obuf->npos = tab-> npos; - obuf->size = tab->size; - obuf->nelem = tab->nelem; - obuf->collisions = tab->nelem - tab->npos; - - return 0; -} diff --git a/system/doc/general_info/deprecations_23.inc b/system/doc/general_info/deprecations_23.inc index d71bc4ba69..0d968a537f 100644 --- a/system/doc/general_info/deprecations_23.inc +++ b/system/doc/general_info/deprecations_23.inc @@ -43,12 +43,8 @@ <section> <title>erl_interface registry</title> <p> - As of OTP 23, the - <seecref marker="erl_interface:registry"><c>registry</c></seecref> - functionality part of - <seeapp marker="erl_interface:index"><c>erl_interface</c></seeapp> - has been deprecated and it has also been - <seeguide marker="scheduled_for_removal#otp-24">scheduled for removal</seeguide> - in OTP 24. + As of OTP 23, the <c>registry</c> functionality part of + <c>erl_interface</c> has been deprecated and it has also been + removed in OTP 24. </p> </section> diff --git a/system/doc/general_info/removed_24.inc b/system/doc/general_info/removed_24.inc new file mode 100644 index 0000000000..b5f2eb364f --- /dev/null +++ b/system/doc/general_info/removed_24.inc @@ -0,0 +1,8 @@ + <section> + <title>erl_interface registry</title> + <p> + The <c>registry</c> functionality part of <c>erl_interface</c> was as of + <seeguide marker="deprecations#otp-23">OTP 23 deprecated</seeguide> + and was removed in OTP 24. + </p> + </section> diff --git a/system/doc/general_info/scheduled_for_removal_24.inc b/system/doc/general_info/scheduled_for_removal_24.inc index 3f21e325b7..fd602325ae 100644 --- a/system/doc/general_info/scheduled_for_removal_24.inc +++ b/system/doc/general_info/scheduled_for_removal_24.inc @@ -30,15 +30,3 @@ encoded in Latin-1 but without a <c>%% coding: latin-1</c> comment at the beginning of the file.</p> </section> - <section> - <title>erl_interface registry</title> - <p> - The - <seecref marker="erl_interface:registry"><c>registry</c></seecref> - functionality part of - <seeapp marker="erl_interface:index"><c>erl_interface</c></seeapp> - is as of - <seeguide marker="deprecations#otp-23">OTP 23 deprecated</seeguide> - and will be removed in OTP 24. - </p> - </section> -- 2.26.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor