Back to index

lightning-sunbird  0.9+nobinonly
Classes | Defines | Typedefs | Functions | Variables
nsres.c File Reference
#include "watcomfx.h"
#include "nsres.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

Go to the source code of this file.

Classes

struct  RESDATABASE
struct  STRINGDATA

Defines

#define RES_LOCK   if (hres->threadinfo) hres->threadinfo->fn_lock(hres->threadinfo->lock);
#define RES_UNLOCK   if (hres->threadinfo) hres->threadinfo->fn_unlock(hres->threadinfo->lock);

Typedefs

typedef struct RESDATABASERESHANDLE
typedef struct STRINGDATA STRINGDATA
typedef unsigned int CHARSETTYPE

Functions

int GenKeyData (const char *library, int32 id, DBT *key)
NSRESHANDLE NSResCreateTable (const char *filename, NSRESTHREADINFO *threadinfo)
NSRESHANDLE NSResOpenTable (const char *filename, NSRESTHREADINFO *threadinfo)
void NSResCloseTable (NSRESHANDLE handle)
char * NSResLoadString (NSRESHANDLE handle, const char *library, int32 id, unsigned int charsetid, char *retbuf)
int32 NSResGetSize (NSRESHANDLE handle, const char *library, int32 id)
int32 NSResLoadResource (NSRESHANDLE handle, const char *library, int32 id, char *retbuf)
int NSResAddString (NSRESHANDLE handle, const char *library, int32 id, const char *string, unsigned int charset)

Variables

HASHINFO res_hash_info

Class Documentation

struct RESDATABASE

Definition at line 11 of file nsres.c.

Collaboration diagram for RESDATABASE:
Class Members
DB * hdb
char * pbuf
NSRESTHREADINFO * threadinfo
struct STRINGDATA

Definition at line 19 of file nsres.c.

Class Members
unsigned int charsetid
char * str

Define Documentation

#define RES_LOCK   if (hres->threadinfo) hres->threadinfo->fn_lock(hres->threadinfo->lock);

Definition at line 27 of file nsres.c.

#define RES_UNLOCK   if (hres->threadinfo) hres->threadinfo->fn_unlock(hres->threadinfo->lock);

Definition at line 28 of file nsres.c.


Typedef Documentation

typedef unsigned int CHARSETTYPE

Definition at line 26 of file nsres.c.

typedef struct RESDATABASE* RESHANDLE

Definition at line 17 of file nsres.c.

typedef struct STRINGDATA STRINGDATA

Function Documentation

int GenKeyData ( const char *  library,
int32  id,
DBT key 
)

Definition at line 44 of file nsres.c.

{
       char idstr[10];
       static char * strdata = NULL;
       size_t len;

       if (strdata)
              free (strdata);

       if (id == 0)
              idstr[0] = '\0';
       else
       {
              sprintf(idstr, "%d", id);
              /*     itoa(id, idstr, 10);  */
       }

       if (library == NULL)
              len = strlen(idstr) + 1;
       else
              len = strlen(library) + strlen(idstr) + 1;
       strdata = (char *) malloc (len);
       strcpy(strdata, library);
       strcat(strdata, idstr);

       key->size = len;
       key->data = strdata;

       return 1;
}

Here is the caller graph for this function:

int NSResAddString ( NSRESHANDLE  handle,
const char *  library,
int32  id,
const char *  string,
unsigned int  charset 
)

Definition at line 268 of file nsres.c.

{
       int status;
       RESHANDLE hres;
       DBT key, data;
       char * recdata;

       if (handle == NULL)
              return 0;
       hres = (RESHANDLE) handle;

       GenKeyData(library, id, &key);

       data.size = sizeof(CHARSETTYPE) + (strlen(string) + 1) ;

       recdata = (char *) malloc(data.size) ;

       /* set charset to the first field of record data */
       *((CHARSETTYPE *)recdata) = (CHARSETTYPE)charset;

       /* set data field */
       memcpy(recdata+sizeof(CHARSETTYPE), string, strlen(string) + 1);

       data.data = recdata;

       RES_LOCK

       status = (*hres->hdb->put)(hres->hdb, &key, &data, 0);


       if (recdata)
              free(recdata);

       RES_UNLOCK

       return status;
}

Here is the call graph for this function:

Definition at line 139 of file nsres.c.

{
       RESHANDLE hres;
       int i;

       if (handle == NULL)
              return;
       hres = (RESHANDLE) handle;

       RES_LOCK

       (*hres->hdb->sync)(hres->hdb, 0);
       (*hres->hdb->close)(hres->hdb);

       RES_UNLOCK

       for (i = 0; i < MAXBUFNUM; i++)
       {
              if (hres->pbuf[i])
                     free (hres->pbuf[i]);
       }

       if (hres->threadinfo)
              free (hres->threadinfo);
       free (hres);
}
NSRESHANDLE NSResCreateTable ( const char *  filename,
NSRESTHREADINFO threadinfo 
)

Definition at line 75 of file nsres.c.

{
       RESHANDLE hres;
       int flag;

       flag = O_RDWR | O_CREAT;

       hres = (RESHANDLE) calloc ( 1, sizeof(struct RESDATABASE) );

       if (threadinfo && threadinfo->lock && threadinfo->fn_lock 
         && threadinfo->fn_unlock)
       {
              hres->threadinfo = (NSRESTHREADINFO *) malloc( sizeof(NSRESTHREADINFO) );
              hres->threadinfo->lock = threadinfo->lock;
              hres->threadinfo->fn_lock = threadinfo->fn_lock;
              hres->threadinfo->fn_unlock = threadinfo->fn_unlock;
       }


       RES_LOCK

       hres->hdb = dbopen(filename, flag, 0644, DB_HASH, &res_hash_info);

       RES_UNLOCK

       if(!hres->hdb)
              return NULL;

       return (NSRESHANDLE) hres;
}

Here is the call graph for this function:

int32 NSResGetSize ( NSRESHANDLE  handle,
const char *  library,
int32  id 
)

Definition at line 224 of file nsres.c.

{
       int status;
       RESHANDLE hres;
       DBT key, data;
       if (handle == NULL)
              return 0;
       hres = (RESHANDLE) handle;
       GenKeyData(library, id, &key);

       RES_LOCK

       status = (*hres->hdb->get)(hres->hdb, &key, &data, 0);

       RES_UNLOCK

       return data.size - sizeof(CHARSETTYPE);
}

Here is the call graph for this function:

int32 NSResLoadResource ( NSRESHANDLE  handle,
const char *  library,
int32  id,
char *  retbuf 
)

Definition at line 243 of file nsres.c.

{
       int status;
       RESHANDLE hres;
       DBT key, data;
       if (handle == NULL)
              return 0;
       hres = (RESHANDLE) handle;
       GenKeyData(library, id, &key);

       RES_LOCK

       status = (*hres->hdb->get)(hres->hdb, &key, &data, 0);

       RES_UNLOCK

       if (retbuf)
       {
              memcpy(retbuf, (char *)data.data + sizeof(CHARSETTYPE), data.size - sizeof(CHARSETTYPE));
              return data.size;
       }
       else
              return 0;
}

Here is the call graph for this function:

char* NSResLoadString ( NSRESHANDLE  handle,
const char *  library,
int32  id,
unsigned int  charsetid,
char *  retbuf 
)

Definition at line 167 of file nsres.c.

{
       int status;
       RESHANDLE hres;
       DBT key, data;
       if (handle == NULL)
              return NULL;

       hres = (RESHANDLE) handle;
       GenKeyData(library, id, &key);

       RES_LOCK

       status = (*hres->hdb->get)(hres->hdb, &key, &data, 0);

       RES_UNLOCK

       if (retbuf)
       {
              memcpy(retbuf, (char *)data.data + sizeof(CHARSETTYPE), data.size - sizeof(CHARSETTYPE));
              return retbuf;
       }
       else 
       {
              static int WhichString = 0;
              static int bFirstTime = 1;
              char *szLoadedString;
              int i;

              RES_LOCK

              if (bFirstTime) {
                     for (i = 0; i < MAXBUFNUM; i++)
                            hres->pbuf[i] = (char *) malloc(MAXSTRINGLEN * sizeof(char));
                     bFirstTime = 0; 
              } 

              szLoadedString = hres->pbuf[WhichString];
              WhichString++;

              /* reset to 0, if WhichString reaches to the end */
              if (WhichString == MAXBUFNUM)  
                     WhichString = 0;

              if (status == 0)
                     memcpy(szLoadedString, (char *) data.data + sizeof(CHARSETTYPE), 
                       data.size - sizeof(CHARSETTYPE));
              else
                     szLoadedString[0] = 0; 

              RES_UNLOCK

              return szLoadedString;
       }
}

Here is the call graph for this function:

NSRESHANDLE NSResOpenTable ( const char *  filename,
NSRESTHREADINFO threadinfo 
)

Definition at line 106 of file nsres.c.

{
       RESHANDLE hres;
       int flag;

       flag = O_RDONLY;  /* only open database for reading */

       hres = (RESHANDLE) calloc ( 1, sizeof(struct RESDATABASE) );

       if (threadinfo && threadinfo->lock && threadinfo->fn_lock 
         && threadinfo->fn_unlock)
       {
              hres->threadinfo = (NSRESTHREADINFO *) malloc( sizeof(NSRESTHREADINFO) );
              hres->threadinfo->lock = threadinfo->lock;
              hres->threadinfo->fn_lock = threadinfo->fn_lock;
              hres->threadinfo->fn_unlock = threadinfo->fn_unlock;
       }


       RES_LOCK

       hres->hdb = dbopen(filename, flag, 0644, DB_HASH, &res_hash_info);

       RES_UNLOCK

       if(!hres->hdb)
              return NULL;

       return (NSRESHANDLE) hres;
}

Here is the call graph for this function:


Variable Documentation

Initial value:
 {
        32*1024,
        0,
        0,
        0,
        0,   
        0}

Definition at line 36 of file nsres.c.