#ifndef FTPPARSE_H
#define FTPPARSE_H
/* a replacement for daniel bernsteins ftpparse library. */
/*
* ftpparse(&fp,buf,len) tries to parse one line of LIST output.
*
* The line is an array of len characters stored in buf.
* It should not include the terminating CR LF; so buf[len] is typically CR.
*
* If ftpparse() can't find a filename, it returns 0.
* If ftpparse() can find a filename, it fills in fp and returns 1.
* fp is a struct ftpparse, defined below.
* The name is an array of fp.namelen characters stored in fp.name;
* fp.name points somewhere within buf.
*/
/* differences between Bernsteins and this version:
* a) use tai, not time_t.
* b) included format flag.
* c) size is now an uint64 (was signed long).
* d) added FTPPARSE_MTIME_REMOTESECOND: time zone is unknown, seconds known
* e) much more formats understood.
* f) much more picky about some details.
* g) there's a function to parse MLSX.
*/
#include "tai.h"
#include "uint64.h"
struct ftpparse {
char *name; /* not necessarily 0-terminated */
unsigned int namelen;
int flagtrycwd; /* 0 if cwd is definitely pointless, 1 otherwise */
int flagtryretr; /* 0 if retr is definitely pointless, 1 otherwise */
int sizetype;
uint64 size; /* number of octets */
int mtimetype;
struct tai mtime; /* modification time */
int idtype;
char *id; /* not necessarily 0-terminated */
unsigned int idlen;
int format;
int flagbrokenmlsx;
char *symlink; /* 0: no symlink. !=0: offset to start of it */
unsigned int symlinklen;
} ;
#define FTPPARSE_FORMAT_UNKNOWN 0
#define FTPPARSE_FORMAT_EPLF 1
#define FTPPARSE_FORMAT_MLSX 2
#define FTPPARSE_FORMAT_LS 3
#define FTPPARSE_SIZE_UNKNOWN 0
#define FTPPARSE_SIZE_BINARY 1 /* size is the number of octets in TYPE I */
#define FTPPARSE_SIZE_ASCII 2 /* size is the number of octets in TYPE A */
/*
* When a time zone is unknown, it is assumed to be GMT. You may want
* to use localtime() for LOCAL times, along with an indication that the
* time is correct in the local time zone, and gmtime() for REMOTE* times.
*/
#define FTPPARSE_MTIME_UNKNOWN 0
#define FTPPARSE_MTIME_LOCAL 1 /* time is correct */
#define FTPPARSE_MTIME_REMOTEMINUTE 2 /* time zone and secs are unknown */
#define FTPPARSE_MTIME_REMOTEDAY 3 /* time zone and time of day are unknown */
#define FTPPARSE_MTIME_REMOTESECOND 4 /* time zone is unknown */
#define FTPPARSE_ID_UNKNOWN 0
#define FTPPARSE_ID_FULL 1 /* unique identifier for files on this FTP server */
extern int ftpparse(struct ftpparse *fp, char *buf,int len,
int eat_leading_spaces);
/* MLST listings start with a space */
extern int ftpparse_mlsx(struct ftpparse *fp, char *buf,int len, int is_mslt);
#endif
syntax highlighted by Code2HTML, v. 0.9.1