Back to index

lightning-sunbird  0.9+nobinonly
Defines | Functions | Variables
fileio.c File Reference
#include "prinit.h"
#include "prthread.h"
#include "prlock.h"
#include "prcvar.h"
#include "prmon.h"
#include "prmem.h"
#include "prio.h"
#include "prlog.h"
#include <stdio.h>
#include "obsolete/prsem.h"

Go to the source code of this file.

Defines

#define TBSIZE   1024
#define BSIZE   100

Functions

static void InitialSetup (void)
static void VerifyAndCleanup (void)
static void PR_CALLBACK reader (void *arg)
static void PR_CALLBACK writer (void *arg)
int main (int argc, char **argv)
 The Xalan testcases app.

Variables

static PRUint8 tbuf [TBSIZE]
static PRFileDesct1
static PRFileDesct2
PRIntn failed_already = 0
PRIntn debug_mode
PRSemaphoreemptyBufs
PRSemaphorefullBufs
struct {
char data [BSIZE]
PRUintn nbytes
buf [2]

Define Documentation

#define BSIZE   100

Definition at line 151 of file fileio.c.

#define TBSIZE   1024

Definition at line 79 of file fileio.c.


Function Documentation

static void InitialSetup ( void  ) [static]

Definition at line 87 of file fileio.c.

{
       PRUintn       i;
       PRInt32 nWritten, rv;
       
       t1 = PR_Open("t1.tmp", PR_CREATE_FILE | PR_RDWR, 0);
       PR_ASSERT(t1 != NULL);      
       
       for (i=0; i<TBSIZE; i++)
              tbuf[i] = i;
              
       nWritten = PR_Write((PRFileDesc*)t1, tbuf, TBSIZE);
       PR_ASSERT(nWritten == TBSIZE);     
              
       rv = PR_Seek(t1,0,PR_SEEK_SET);
       PR_ASSERT(rv == 0);  

       t2 = PR_Open("t2.tmp", PR_CREATE_FILE | PR_RDWR, 0);
       PR_ASSERT(t2 != NULL);      
}

Here is the caller graph for this function:

int main ( int  argc,
char **  argv 
)

The Xalan testcases app.

Definition at line 190 of file fileio.c.

{
       PRThread *r, *w;


       PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0);
    PR_STDIO_INIT();

#ifdef XP_MAC
       SetupMacPrintfLog("fileio.log");
       debug_mode = 1;
#endif

    emptyBufs = PR_NewSem(2);      /* two empty buffers */

    fullBufs = PR_NewSem(0);       /* zero full buffers */

       /* Create initial temp file setup */
       InitialSetup();
       
       /* create the reader thread */
       
       r = PR_CreateThread(PR_USER_THREAD,
                                  reader, t1, 
                                  PR_PRIORITY_NORMAL,
                                  PR_LOCAL_THREAD,
                              PR_JOINABLE_THREAD,
                                  0);

       w = PR_CreateThread(PR_USER_THREAD,
                                  writer, t2, 
                                  PR_PRIORITY_NORMAL,
                      PR_LOCAL_THREAD,
                      PR_JOINABLE_THREAD,
                      0);

    /* Do the joining for both threads */
    (void) PR_JoinThread(r);
    (void) PR_JoinThread(w);

    /* Do the verification and clean up */
    VerifyAndCleanup();

    PR_DestroySem(emptyBufs);
    PR_DestroySem(fullBufs);

    PR_Cleanup();

    if(failed_already)
    {
        printf("Fail\n");
        return 1;
    }
    else
    {
        printf("PASS\n");
        return 0;
    }


}

Here is the call graph for this function:

static void PR_CALLBACK reader ( void arg) [static]

Definition at line 158 of file fileio.c.

{
       PRUintn       i = 0;
       PRInt32       nbytes;
       
       do {
              (void) PR_WaitSem(emptyBufs);
              nbytes = PR_Read((PRFileDesc*)arg, buf[i].data, BSIZE);
              if (nbytes >= 0) {
                     buf[i].nbytes = nbytes;
                     PR_PostSem(fullBufs);
                     i = (i + 1) % 2;
              }
       } while (nbytes > 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void VerifyAndCleanup ( void  ) [static]

Definition at line 109 of file fileio.c.

{
       PRUintn       i;
       PRInt32 nRead, rv;
       
       for (i=0; i<TBSIZE; i++)
              tbuf[i] = 0;
              
       rv = PR_Seek(t2,0,PR_SEEK_SET);
       PR_ASSERT(rv == 0);  

       nRead = PR_Read((PRFileDesc*)t2, tbuf, TBSIZE);
       PR_ASSERT(nRead == TBSIZE); 
              
       for (i=0; i<TBSIZE; i++)
              if (tbuf[i] != (PRUint8)i) {
                     if (debug_mode) printf("data mismatch for index= %d \n", i);
                     else failed_already=1;
              }
       PR_Close(t1);
       PR_Close(t2);

       PR_Delete("t1.tmp");
       PR_Delete("t2.tmp");

    if (debug_mode) printf("fileio test passed\n");
}

Here is the caller graph for this function:

static void PR_CALLBACK writer ( void arg) [static]

Definition at line 174 of file fileio.c.

{
       PRUintn       i = 0;
       PRInt32       nbytes;
       
       do {
              (void) PR_WaitSem(fullBufs);
              nbytes = buf[i].nbytes;
              if (nbytes > 0) {
                     nbytes = PR_Write((PRFileDesc*)arg, buf[i].data, nbytes);
                     PR_PostSem(emptyBufs);
                     i = (i + 1) % 2;
              }
       } while (nbytes > 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

struct { ... } buf[2]
PRIntn debug_mode

Definition at line 86 of file fileio.c.

Definition at line 148 of file fileio.c.

PRIntn failed_already = 0

Definition at line 85 of file fileio.c.

Definition at line 149 of file fileio.c.

PRFileDesc* t1 [static]

Definition at line 83 of file fileio.c.

PRFileDesc * t2 [static]

Definition at line 83 of file fileio.c.

PRUint8 tbuf[TBSIZE] [static]

Definition at line 81 of file fileio.c.