Back to index

lightning-sunbird  0.9+nobinonly
Classes | Defines | Typedefs | Functions
nsres.h File Reference
#include "mcom_db.h"
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  NSRESTHREADINFO

Defines

#define NSRESHANDLE   void *
#define MAXBUFNUM   10
#define MAXSTRINGLEN   300
#define NSRES_CREATE   1
#define NSRES_OPEN   2

Typedefs

typedef void(* NSRESTHREADFUNC )(void *)
typedef struct NSRESTHREADINFO NSRESTHREADINFO

Functions

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)

Class Documentation

struct NSRESTHREADINFO

Definition at line 12 of file nsres.h.

Class Members
NSRESTHREADFUNC fn_lock
NSRESTHREADFUNC fn_unlock
void * lock

Define Documentation

#define MAXBUFNUM   10

Definition at line 19 of file nsres.h.

#define MAXSTRINGLEN   300

Definition at line 20 of file nsres.h.

Definition at line 22 of file nsres.h.

#define NSRES_OPEN   2

Definition at line 23 of file nsres.h.

Definition at line 8 of file nsres.h.


Typedef Documentation

typedef void(* NSRESTHREADFUNC)(void *)

Definition at line 10 of file nsres.h.


Function Documentation

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: