dbm/include/winfile.h
author chrisk%netscape.com
Tue, 20 Jun 2000 13:24:01 +0000
changeset 381 d748e5f9526290f415abb5815391bde83c5b45f8
parent 198 97d5b3c59c9b056f9c998f1dae54418f01769d8d
child 2758 ed78200461f827ad68840779fe9acbacfc415b73
child 2874 deb47a3919b69e6b477ea46acb0dcdcf939f8743
child 3345 fa48f8698939e2895f230ad200b41a3d10cbdecd
child 5634 7c3cc2b95cd4bb5530b6744c36917af1c226dec0
permissions -rw-r--r--
Fix bug in decoder: When encoding indefinitely & encountering an optional field at the end of a sequence, right after an IMPLICIT or POINTER template, the decoder was not propagating the optionalness and the end-of-contents condition correctly as it hits the end-of-contents octets instead of the optional field. This is because IMPLICIT and POINTER push TWO states to look for the next tag, not just one. (The first state is "afterImplicit" or "afterPointer", the second one starts with "beforeIdentifier" as usual). This finally makes decoding envelopedData messages in cmsutil work.


/* ---------------------------------------------------------------------------
    Stuff to fake unix file I/O on windows boxes
    ------------------------------------------------------------------------*/

#ifndef WINFILE_H
#define WINFILE_H

#ifdef _WINDOWS
/* hacked out of <dirent.h> on an SGI */
#if defined(XP_WIN32) || defined(_WIN32)
/* 32-bit stuff here */
#include <windows.h>
#include <stdlib.h>
#ifdef __MINGW32__
#include <sys/types.h>
#include <sys/stat.h>
#else
#include <sys\types.h>
#include <sys\stat.h>
#endif

typedef struct DIR_Struct {
    void            * directoryPtr;
    WIN32_FIND_DATA   data;
} DIR;

#define _ST_FSTYPSZ 16

#if !defined(__BORLANDC__) && !defined(__GNUC__)
 typedef unsigned long mode_t;
 typedef          long uid_t;
 typedef          long gid_t;
 typedef          long off_t;
 typedef unsigned long nlink_t;
#endif 

typedef struct timestruc {
    time_t  tv_sec;         /* seconds */
    long    tv_nsec;        /* and nanoseconds */
} timestruc_t;


struct dirent {                                 /* data from readdir() */
        ino_t           d_ino;                  /* inode number of entry */
        off_t           d_off;                  /* offset of disk direntory entry */
        unsigned short  d_reclen;               /* length of this record */
        char            d_name[_MAX_FNAME];     /* name of file */
};

#if !defined(__BORLANDC__) && !defined (__GNUC__)
#define S_ISDIR(s)  ((s) & _S_IFDIR)
#endif

#else /* _WIN32 */
/* 16-bit windows stuff */

#include <sys\types.h>
#include <sys\stat.h>
#include <dos.h>



/*	Getting cocky to support multiple file systems */
typedef struct	dirStruct_tag	{
	struct _find_t	file_data;
	char			c_checkdrive;
} dirStruct;

typedef struct DIR_Struct {
    void            * directoryPtr;
    dirStruct         data;
} DIR;

#define _ST_FSTYPSZ 16
typedef unsigned long mode_t;
typedef          long uid_t;
typedef          long gid_t;
typedef          long off_t;
typedef unsigned long nlink_t;

typedef struct timestruc {
    time_t  tv_sec;         /* seconds */
    long    tv_nsec;        /* and nanoseconds */
} timestruc_t;

struct dirent {                             /* data from readdir() */
        ino_t           d_ino;              /* inode number of entry */
        off_t           d_off;              /* offset of disk direntory entry */
        unsigned short  d_reclen;           /* length of this record */
#ifdef XP_WIN32
        char            d_name[_MAX_FNAME]; /* name of file */
#else
        char            d_name[20]; /* name of file */
#endif
};

#define S_ISDIR(s)  ((s) & _S_IFDIR)

#endif /* 16-bit windows */

#define CONST const

#endif /* _WINDOWS */

#endif /* WINFILE_H */