[PATCH v2] port ndbm

Aditya Upadhyay aadit0402 at gmail.com
Thu Jun 27 04:38:27 UTC 2019


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.

I appreciate your effort. Have you figured out how would you be going
to write the test cases for ndbm and ftw methods?

> 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