/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2009 Index Data
+ * Copyright (C) Index Data
* See the file LICENSE for details.
*/
* \brief Implements Nibble Memory
*
* This is a simple and fairly wasteful little module for nibble memory
- * allocation. Evemtually we'll put in something better.
+ * allocation.
*
- * FIXME - it also has some semaphore stuff, and stuff to handle errno.
- * These should be moved to some other place!
*/
#if HAVE_CONFIG_H
#include <config.h>
#include <yaz/nmem.h>
#include <yaz/log.h>
-#ifdef WIN32
-#include <windows.h>
-#endif
-
#define NMEM_CHUNK (4*1024)
struct nmem_block
struct nmem_control
{
- int total;
+ size_t total;
struct nmem_block *blocks;
struct nmem_control *next;
};
static int log_level_initialized = 0;
static void free_block(struct nmem_block *p)
-{
+{
xfree(p->buf);
xfree(p);
if (log_level)
- yaz_log (log_level, "nmem free_block p=%p", p);
+ yaz_log(log_level, "nmem free_block p=%p", p);
}
/*
size_t get = NMEM_CHUNK;
if (log_level)
- yaz_log (log_level, "nmem get_block size=%ld", (long) size);
+ yaz_log(log_level, "nmem get_block size=%ld", (long) size);
-
if (get < size)
get = size;
- if(log_level)
- yaz_log (log_level, "nmem get_block alloc new block size=%ld",
- (long) get);
-
+ if (log_level)
+ yaz_log(log_level, "nmem get_block alloc new block size=%ld",
+ (long) get);
+
r = (struct nmem_block *) xmalloc(sizeof(*r));
r->buf = (char *)xmalloc(r->size = get);
r->top = 0;
void nmem_reset(NMEM n)
{
struct nmem_block *t;
-
- yaz_log (log_level, "nmem_reset p=%p", n);
+
+ yaz_log(log_level, "nmem_reset p=%p", n);
if (!n)
return;
while (n->blocks)
n->total = 0;
}
-void *nmem_malloc(NMEM n, int size)
+void *nmem_malloc(NMEM n, size_t size)
{
struct nmem_block *p;
char *r;
if (!n)
{
- yaz_log (YLOG_FATAL, "calling nmem_malloc with an null pointer");
- abort ();
+ yaz_log(YLOG_FATAL, "calling nmem_malloc with an null pointer");
+ abort();
}
p = n->blocks;
if (!p || p->size < size + p->top)
return r;
}
-int nmem_total(NMEM n)
+size_t nmem_total(NMEM n)
{
return n->total;
}
log_level = yaz_log_module_level("nmem");
log_level_initialized = 1;
}
-
+
r = (struct nmem_control *)xmalloc(sizeof(*r));
r->blocks = 0;
{
if (!n)
return;
-
+
nmem_reset(n);
xfree(n);
}
-void nmem_transfer (NMEM dst, NMEM src)
+void nmem_transfer(NMEM dst, NMEM src)
{
struct nmem_block *t;
while ((t = src->blocks))
src->total = 0;
}
-int yaz_errno(void)
-{
- return errno;
-}
-
-void yaz_set_errno(int v)
-{
- errno = v;
-}
-
-void yaz_strerror(char *buf, int max)
-{
-#ifdef WIN32
- DWORD err;
-#endif
- char *cp;
- if (!log_level_initialized)
- {
- log_level = yaz_log_module_level("nmem");
- log_level_initialized = 1;
- }
-
-#ifdef WIN32
- err = GetLastError();
- if (err)
- {
- FormatMessage(
- FORMAT_MESSAGE_FROM_SYSTEM,
- NULL,
- err,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default lang */
- (LPTSTR) buf,
- max-1,
- NULL);
- }
- else
- *buf = '\0';
-#else
-/* UNIX */
-#if HAVE_STRERROR_R
- *buf = '\0';
- strerror_r(errno, buf, max);
- /* if buffer is unset - use strerror anyway (GLIBC bug) */
- if (*buf == '\0')
- strcpy(buf, strerror(yaz_errno()));
-#else
- strcpy(buf, strerror(yaz_errno()));
-#endif
-/* UNIX */
-#endif
- if ((cp = strrchr(buf, '\n')))
- *cp = '\0';
- if ((cp = strrchr(buf, '\r')))
- *cp = '\0';
-}
/*
* Local variables:
* c-basic-offset: 4