diff options
Diffstat (limited to 'src/cdf.c')
| -rw-r--r-- | src/cdf.c | 32 | 
1 files changed, 22 insertions, 10 deletions
| diff --git a/src/cdf.c b/src/cdf.c index 4ec65b4510d5..d38e793612fc 100644 --- a/src/cdf.c +++ b/src/cdf.c @@ -35,7 +35,7 @@  #include "file.h"  #ifndef lint -FILE_RCSID("@(#)$File: cdf.c,v 1.82 2016/06/01 22:25:25 christos Exp $") +FILE_RCSID("@(#)$File: cdf.c,v 1.85 2016/10/24 18:02:17 christos Exp $")  #endif  #include <assert.h> @@ -266,7 +266,7 @@ cdf_unpack_dir(cdf_directory_t *d, char *buf)  	CDF_UNPACK(d->d_unused0);  } -static int +int  cdf_zero_stream(cdf_stream_t *scn)  {  	scn->sst_len = 0; @@ -731,22 +731,25 @@ cdf_read_short_stream(const cdf_info_t *info, const cdf_header_t *h,  			break;  	/* If the it is not there, just fake it; some docs don't have it */ -	if (i == dir->dir_len) +	if (i == dir->dir_len) { +		DPRINTF(("Cannot find root storage dir\n"));  		goto out; +	}  	d = &dir->dir_tab[i];  	*root = d;  	/* If the it is not there, just fake it; some docs don't have it */ -	if (d->d_stream_first_sector < 0) +	if (d->d_stream_first_sector < 0) { +		DPRINTF(("No first secror in dir\n"));  		goto out; +	}  	return cdf_read_long_sector_chain(info, h, sat,  	    d->d_stream_first_sector, d->d_size, scn);  out:  	scn->sst_tab = NULL;  	(void)cdf_zero_stream(scn); -	errno = EFTYPE; -	return -1; +	return 0;  }  static int @@ -759,6 +762,15 @@ cdf_namecmp(const char *d, const uint16_t *s, size_t l)  }  int +cdf_read_doc_summary_info(const cdf_info_t *info, const cdf_header_t *h, +    const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst, +    const cdf_dir_t *dir, cdf_stream_t *scn) +{ +	return cdf_read_user_stream(info, h, sat, ssat, sst, dir, +	    "\05DocumentSummaryInformation", scn); +} + +int  cdf_read_summary_info(const cdf_info_t *info, const cdf_header_t *h,      const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst,      const cdf_dir_t *dir, cdf_stream_t *scn) @@ -1098,7 +1110,7 @@ cdf_unpack_catalog(const cdf_header_t *h, const cdf_stream_t *sst,  			cep->ce_namlen = rlen;  		np = CAST(const uint16_t *, CAST(const void *, (b + 16))); -		if (CAST(const char *, np + cep->ce_namlen) > eb) { +		if (RCAST(const char *, np + cep->ce_namlen) > eb) {  			cep->ce_namlen = 0;  			break;  		} @@ -1275,7 +1287,7 @@ cdf_dump(const void *v, size_t len)  }  void -cdf_dump_stream(const cdf_header_t *h, const cdf_stream_t *sst) +cdf_dump_stream(const cdf_stream_t *sst)  {  	size_t ss = sst->sst_ss;  	cdf_dump(sst->sst_tab, ss * sst->sst_len); @@ -1331,7 +1343,7 @@ cdf_dump_dir(const cdf_info_t *info, const cdf_header_t *h,  				    name, d->d_stream_first_sector, d->d_size);  				break;  			} -			cdf_dump_stream(h, &scn); +			cdf_dump_stream(&scn);  			free(scn.sst_tab);  			break;  		default: @@ -1507,7 +1519,7 @@ main(int argc, char *argv[])  		    == -1)  			err(1, "Cannot read short stream");  #ifdef CDF_DEBUG -		cdf_dump_stream(&h, &sst); +		cdf_dump_stream(&sst);  #endif  #ifdef CDF_DEBUG | 
