[PATCH v2] port ndbm
Aditya Upadhyay
aadit0402 at gmail.com
Thu Jun 27 05:54:17 UTC 2019
On Thu, Jun 27, 2019 at 11:14 AM Vaibhav Gupta <vaibhavgupta40 at gmail.com> wrote:
>
>
>
> On Thu, Jun 27, 2019 at 10:08 AM Aditya Upadhyay <aadit0402 at gmail.com> wrote:
>>
>> On Thu, Jun 27, 2019 at 2:11 AM Vaibhav Gupta <vaibhavgupta40 at gmail.com> wrote:
>> >
>> > Hello Gedare,
>> > as you suggested, to use the group name of patch as 'newlib'.
>> > I did that and then removed the line "%patch setup newlib -p1"
>> > It has generated ndbm.h in include directory.
>> >
>>
>> You are applying the patches to RSB just for testing purpose. It would
>> not show your contribution.
>> This will only help you to tests your methods what you will be going
>> to contribute to newlib.
>> So figuring out the solution of this old header replacement or
>> updating headers and submitting the patches to
>> the newlib is recommended.
>
> Sure, I will complete the testsuite as soon as possible and then push the patch to newlib.
>>
First you will have to figure out the dependecies between headers,
only then you would be able to
send the right patches. Otherwise You have to make much changes in your patch.
>>
>> I appreciate your effort. Have you figured out how would you be going
>> to write the test cases for ndbm and ftw methods?
>
> I did tried to check for the ndbm using raw ndbm methods in testsuites/samples/hello/init.c: https://github.com/VARoDeK/rtems/blob/test_ndbm_presence/testsuites/samples/hello/init.c
> .
You will have to write test cases in psxtests directory by following
this open group page:
https://pubs.opengroup.org/onlinepubs/9699919799/functions/dbm_clearerr.html
> It showing the error:
> /home/varodek/development/rtems/5/lib/gcc/sparc-rtems5/7.4.1/../../../../sparc-rtems5/bin/ld: hello/hello-init.o: in function `Init':
> /home/varodek/development/rtems/kernel/rtems/c/src/../../testsuites/samples/hello/init.c:41: undefined reference to `dbm_open'
> /home/varodek/development/rtems/5/lib/gcc/sparc-rtems5/7.4.1/../../../../sparc-rtems5/bin/ld: /home/varodek/development/rtems/kernel/rtems/c/src/../../testsuites/samples/hello/init.c:42: undefined reference to `dbm_store'
> /home/varodek/development/rtems/5/lib/gcc/sparc-rtems5/7.4.1/../../../../sparc-rtems5/bin/ld: /home/varodek/development/rtems/kernel/rtems/c/src/../../testsuites/samples/hello/init.c:45: undefined reference to `dbm_fetch'
> /home/varodek/development/rtems/5/lib/gcc/sparc-rtems5/7.4.1/../../../../sparc-rtems5/bin/ld: /home/varodek/development/rtems/kernel/rtems/c/src/../../testsuites/samples/hello/init.c:49: undefined reference to `dbm_close'
>>
>>
Can you check whether function symbol is getting generated or not?
Like when you compile newlib, You can see that function symbol
using this command:
$sparc-rtems5-nm `find . -name lib_a-ndbm.o` This command will list
the function symbol.
>> > Vaibhav Gupta
>> >
>> > On Wed, Jun 26, 2019 at 8:41 PM Vaibhav Gupta <vaibhavgupta40 at gmail.com> wrote:
>> >>
>> >>
>> >>
>> >> On Wed, Jun 26, 2019 at 8:35 PM Vaibhav Gupta <vaibhavgupta40 at gmail.com> wrote:
>> >>>
>> >>> Hello,
>> >>>
>> >>> Newlib is compiling successfully.
>> >>> But when i applied patch to RSB. It is not generating ndbm.h inside rtems/5/sparc-rtem5/include this time.
>> >>>
>> >>> I am following same steps again which I followed that day when ndbm.h was successfully generated.
>> >>> Below are the log files generated by rsb build.
>> >>
>> >> Although, before testing, I update RSB today (git pull). I figured that the configuration file, used by rsb for newlib, is now changed.
>> >> .
>> >> So i updated my steps accordingly. That is, I added the patch in that new configuration file.
>> >> .
>> >> According to logs, patch is applied I guess, but it is not generating ndbm.h in include directory.
>> >>>
>> >>>
>> >>> On Wed, Jun 26, 2019 at 8:32 PM Vaibhav Gupta <vaibhavgupta40 at gmail.com> wrote:
>> >>>>
>> >>>> ---
>> >>>> newlib/libc/include/ndbm.h | 84 +++++++++++++
>> >>>> newlib/libc/search/Makefile.am | 1 +
>> >>>> newlib/libc/search/ndbm.c | 215 +++++++++++++++++++++++++++++++++
>> >>>> 3 files changed, 300 insertions(+)
>> >>>> create mode 100644 newlib/libc/include/ndbm.h
>> >>>> create mode 100644 newlib/libc/search/ndbm.c
>> >>>>
>> >>>> diff --git a/newlib/libc/include/ndbm.h b/newlib/libc/include/ndbm.h
>> >>>> new file mode 100644
>> >>>> index 000000000..3b42c60b0
>> >>>> --- /dev/null
>> >>>> +++ b/newlib/libc/include/ndbm.h
>> >>>> @@ -0,0 +1,84 @@
>> >>>> +/*-
>> >>>> + * SPDX-License-Identifier: BSD-3-Clause
>> >>>> + *
>> >>>> + * Copyright (c) 1990, 1993
>> >>>> + * The Regents of the University of California. All rights reserved.
>> >>>> + *
>> >>>> + * This code is derived from software contributed to Berkeley by
>> >>>> + * Margo Seltzer.
>> >>>> + *
>> >>>> + * Redistribution and use in source and binary forms, with or without
>> >>>> + * modification, are permitted provided that the following conditions
>> >>>> + * are met:
>> >>>> + * 1. Redistributions of source code must retain the above copyright
>> >>>> + * notice, this list of conditions and the following disclaimer.
>> >>>> + * 2. Redistributions in binary form must reproduce the above copyright
>> >>>> + * notice, this list of conditions and the following disclaimer in the
>> >>>> + * documentation and/or other materials provided with the distribution.
>> >>>> + * 3. Neither the name of the University nor the names of its contributors
>> >>>> + * may be used to endorse or promote products derived from this software
>> >>>> + * without specific prior written permission.
>> >>>> + *
>> >>>> + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
>> >>>> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
>> >>>> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
>> >>>> + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
>> >>>> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
>> >>>> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
>> >>>> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
>> >>>> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
>> >>>> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
>> >>>> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>> >>>> + * SUCH DAMAGE.
>> >>>> + *
>> >>>> + * @(#)ndbm.h 8.1 (Berkeley) 6/2/93
>> >>>> + * $FreeBSD$
>> >>>> + */
>> >>>> +
>> >>>> +#ifndef _NDBM_H_
>> >>>> +#define _NDBM_H_
>> >>>> +
>> >>>> +#define __DBINTERFACE_PRIVATE
>> >>>> +
>> >>>> +/* Map dbm interface onto db(3). */
>> >>>> +#define DBM_RDONLY O_RDONLY
>> >>>> +
>> >>>> +/* Flags to dbm_store(). */
>> >>>> +#define DBM_INSERT 0
>> >>>> +#define DBM_REPLACE 1
>> >>>> +
>> >>>> +/*
>> >>>> + * The db(3) support for ndbm always appends this suffix to the
>> >>>> + * file name to avoid overwriting the user's original database.
>> >>>> + */
>> >>>> +#define DBM_SUFFIX ".db"
>> >>>> +
>> >>>> +typedef struct {
>> >>>> + void *dptr;
>> >>>> + int dsize; /* XXX Should be size_t according to 1003.1-2008. */
>> >>>> +} datum;
>> >>>> +
>> >>>> +struct __db;
>> >>>> +typedef struct __db DB;
>> >>>> +typedef DB DBM;
>> >>>> +#define dbm_pagfno(a) DBM_PAGFNO_NOT_AVAILABLE
>> >>>> +
>> >>>> +__BEGIN_DECLS
>> >>>> +int dbm_clearerr(DBM *);
>> >>>> +void dbm_close(DBM *);
>> >>>> +int dbm_delete(DBM *, datum);
>> >>>> +int dbm_error(DBM *);
>> >>>> +datum dbm_fetch(DBM *, datum);
>> >>>> +datum dbm_firstkey(DBM *);
>> >>>> +#if __BSD_VISIBLE
>> >>>> +long dbm_forder(DBM *, datum);
>> >>>> +#endif
>> >>>> +datum dbm_nextkey(DBM *);
>> >>>> +DBM *dbm_open(const char *, int, mode_t);
>> >>>> +int dbm_store(DBM *, datum, datum, int);
>> >>>> +#if __BSD_VISIBLE
>> >>>> +int dbm_dirfno(DBM *);
>> >>>> +#endif
>> >>>> +__END_DECLS
>> >>>> +
>> >>>> +#endif /* !_NDBM_H_ */
>> >>>> diff --git a/newlib/libc/search/Makefile.am b/newlib/libc/search/Makefile.am
>> >>>> index 98920c3f4..a61107fb9 100644
>> >>>> --- a/newlib/libc/search/Makefile.am
>> >>>> +++ b/newlib/libc/search/Makefile.am
>> >>>> @@ -9,6 +9,7 @@ GENERAL_SOURCES = \
>> >>>> db_local.h \
>> >>>> extern.h \
>> >>>> hash.h \
>> >>>> + ndbm.c \
>> >>>> page.h \
>> >>>> qsort.c
>> >>>>
>> >>>> diff --git a/newlib/libc/search/ndbm.c b/newlib/libc/search/ndbm.c
>> >>>> new file mode 100644
>> >>>> index 000000000..8ac6d1f40
>> >>>> --- /dev/null
>> >>>> +++ b/newlib/libc/search/ndbm.c
>> >>>> @@ -0,0 +1,215 @@
>> >>>> +/*-
>> >>>> + * SPDX-License-Identifier: BSD-3-Clause
>> >>>> + *
>> >>>> + * Copyright (c) 1990, 1993
>> >>>> + * The Regents of the University of California. All rights reserved.
>> >>>> + *
>> >>>> + * This code is derived from software contributed to Berkeley by
>> >>>> + * Margo Seltzer.
>> >>>> + *
>> >>>> + * Redistribution and use in source and binary forms, with or without
>> >>>> + * modification, are permitted provided that the following conditions
>> >>>> + * are met:
>> >>>> + * 1. Redistributions of source code must retain the above copyright
>> >>>> + * notice, this list of conditions and the following disclaimer.
>> >>>> + * 2. Redistributions in binary form must reproduce the above copyright
>> >>>> + * notice, this list of conditions and the following disclaimer in the
>> >>>> + * documentation and/or other materials provided with the distribution.
>> >>>> + * 3. Neither the name of the University nor the names of its contributors
>> >>>> + * may be used to endorse or promote products derived from this software
>> >>>> + * without specific prior written permission.
>> >>>> + *
>> >>>> + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
>> >>>> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
>> >>>> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
>> >>>> + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
>> >>>> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
>> >>>> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
>> >>>> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
>> >>>> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
>> >>>> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
>> >>>> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>> >>>> + * SUCH DAMAGE.
>> >>>> + */
>> >>>> +
>> >>>> +#if defined(LIBC_SCCS) && !defined(lint)
>> >>>> +static char sccsid[] = "@(#)ndbm.c 8.4 (Berkeley) 7/21/94";
>> >>>> +#endif /* LIBC_SCCS and not lint */
>> >>>> +#include <sys/cdefs.h>
>> >>>> +__FBSDID("$FreeBSD$");
>> >>>> +
>> >>>> +/*
>> >>>> + * This package provides a dbm compatible interface to the new hashing
>> >>>> + * package described in db(3).
>> >>>> + */
>> >>>> +
>> >>>> +#include <sys/param.h>
>> >>>> +
>> >>>> +#include <stdio.h>
>> >>>> +#include <string.h>
>> >>>> +#include <errno.h>
>> >>>> +
>> >>>> +#include <ndbm.h>
>> >>>> +#include "db_local.h"
>> >>>> +#include "hash.h"
>> >>>> +
>> >>>> +/*
>> >>>> + * Returns:
>> >>>> + * *DBM on success
>> >>>> + * NULL on failure
>> >>>> + */
>> >>>> +extern DBM *
>> >>>> +dbm_open(const char *file, int flags, mode_t mode)
>> >>>> +{
>> >>>> + HASHINFO info;
>> >>>> + char path[MAXPATHLEN];
>> >>>> +
>> >>>> + info.bsize = 4096;
>> >>>> + info.ffactor = 40;
>> >>>> + info.nelem = 1;
>> >>>> + info.cachesize = 0;
>> >>>> + info.hash = NULL;
>> >>>> + info.lorder = 0;
>> >>>> +
>> >>>> + if( strlen(file) >= sizeof(path) - strlen(DBM_SUFFIX)) {
>> >>>> + errno = ENAMETOOLONG;
>> >>>> + return(NULL);
>> >>>> + }
>> >>>> + (void)strcpy(path, file);
>> >>>> + (void)strcat(path, DBM_SUFFIX);
>> >>>> + return ((DBM *)__hash_open(path, flags, mode, 0, &info));
>> >>>> +}
>> >>>> +
>> >>>> +extern void
>> >>>> +dbm_close(DBM *db)
>> >>>> +{
>> >>>> + (void)(db->close)(db);
>> >>>> +}
>> >>>> +
>> >>>> +/*
>> >>>> + * Returns:
>> >>>> + * DATUM on success
>> >>>> + * NULL on failure
>> >>>> + */
>> >>>> +extern datum
>> >>>> +dbm_fetch(DBM *db, datum key)
>> >>>> +{
>> >>>> + datum retdata;
>> >>>> + int status;
>> >>>> + DBT dbtkey, dbtretdata;
>> >>>> +
>> >>>> + dbtkey.data = key.dptr;
>> >>>> + dbtkey.size = key.dsize;
>> >>>> + status = (db->get)(db, &dbtkey, &dbtretdata, 0);
>> >>>> + if (status) {
>> >>>> + dbtretdata.data = NULL;
>> >>>> + dbtretdata.size = 0;
>> >>>> + }
>> >>>> + retdata.dptr = dbtretdata.data;
>> >>>> + retdata.dsize = dbtretdata.size;
>> >>>> + return (retdata);
>> >>>> +}
>> >>>> +
>> >>>> +/*
>> >>>> + * Returns:
>> >>>> + * DATUM on success
>> >>>> + * NULL on failure
>> >>>> + */
>> >>>> +extern datum
>> >>>> +dbm_firstkey(DBM *db)
>> >>>> +{
>> >>>> + int status;
>> >>>> + datum retkey;
>> >>>> + DBT dbtretkey, dbtretdata;
>> >>>> +
>> >>>> + status = (db->seq)(db, &dbtretkey, &dbtretdata, R_FIRST);
>> >>>> + if (status)
>> >>>> + dbtretkey.data = NULL;
>> >>>> + retkey.dptr = dbtretkey.data;
>> >>>> + retkey.dsize = dbtretkey.size;
>> >>>> + return (retkey);
>> >>>> +}
>> >>>> +
>> >>>> +/*
>> >>>> + * Returns:
>> >>>> + * DATUM on success
>> >>>> + * NULL on failure
>> >>>> + */
>> >>>> +extern datum
>> >>>> +dbm_nextkey(DBM *db)
>> >>>> +{
>> >>>> + int status;
>> >>>> + datum retkey;
>> >>>> + DBT dbtretkey, dbtretdata;
>> >>>> +
>> >>>> + status = (db->seq)(db, &dbtretkey, &dbtretdata, R_NEXT);
>> >>>> + if (status)
>> >>>> + dbtretkey.data = NULL;
>> >>>> + retkey.dptr = dbtretkey.data;
>> >>>> + retkey.dsize = dbtretkey.size;
>> >>>> + return (retkey);
>> >>>> +}
>> >>>> +
>> >>>> +/*
>> >>>> + * Returns:
>> >>>> + * 0 on success
>> >>>> + * <0 failure
>> >>>> + */
>> >>>> +extern int
>> >>>> +dbm_delete(DBM *db, datum key)
>> >>>> +{
>> >>>> + int status;
>> >>>> + DBT dbtkey;
>> >>>> +
>> >>>> + dbtkey.data = key.dptr;
>> >>>> + dbtkey.size = key.dsize;
>> >>>> + status = (db->del)(db, &dbtkey, 0);
>> >>>> + if (status)
>> >>>> + return (-1);
>> >>>> + else
>> >>>> + return (0);
>> >>>> +}
>> >>>> +
>> >>>> +/*
>> >>>> + * Returns:
>> >>>> + * 0 on success
>> >>>> + * <0 failure
>> >>>> + * 1 if DBM_INSERT and entry exists
>> >>>> + */
>> >>>> +extern int
>> >>>> +dbm_store(DBM *db, datum key, datum data, int flags)
>> >>>> +{
>> >>>> + DBT dbtkey, dbtdata;
>> >>>> +
>> >>>> + dbtkey.data = key.dptr;
>> >>>> + dbtkey.size = key.dsize;
>> >>>> + dbtdata.data = data.dptr;
>> >>>> + dbtdata.size = data.dsize;
>> >>>> + return ((db->put)(db, &dbtkey, &dbtdata,
>> >>>> + (flags == DBM_INSERT) ? R_NOOVERWRITE : 0));
>> >>>> +}
>> >>>> +
>> >>>> +extern int
>> >>>> +dbm_error(DBM *db)
>> >>>> +{
>> >>>> + HTAB *hp;
>> >>>> +
>> >>>> + hp = (HTAB *)db->internal;
>> >>>> + return (hp->error);
>> >>>> +}
>> >>>> +
>> >>>> +extern int
>> >>>> +dbm_clearerr(DBM *db)
>> >>>> +{
>> >>>> + HTAB *hp;
>> >>>> +
>> >>>> + hp = (HTAB *)db->internal;
>> >>>> + hp->error = 0;
>> >>>> + return (0);
>> >>>> +}
>> >>>> +
>> >>>> +extern int
>> >>>> +dbm_dirfno(DBM *db)
>> >>>> +{
>> >>>> + return(((HTAB *)db->internal)->fp);
>> >>>> +}
>> >>>> --
>> >>>> 2.21.0
>> >>>>
More information about the devel
mailing list