/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-2000, 2006-2013 Free Software Foundation, Inc.
+ Copyright (C) 1997-2000, 2006-2014 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "data/casewriter.h"
#include "data/dictionary.h"
#include "data/file-handle-def.h"
-#include "data/file-name.h"
#include "data/format.h"
#include "data/make-file.h"
#include "data/missing-values.h"
FILE *file; /* File stream. */
struct replace_file *rf; /* Ticket for replacing output file. */
- enum sfm_compression compression;
+ enum any_compression compression;
casenumber case_cnt; /* Number of cases written so far. */
uint8_t space; /* ' ' in the file's character encoding. */
{
struct sfm_write_options opts;
opts.compression = (settings_get_scompression ()
- ? SFM_COMP_SIMPLE
- : SFM_COMP_NONE);
+ ? ANY_COMP_SIMPLE
+ : ANY_COMP_NONE);
opts.create_writeable = true;
opts.version = 3;
return opts;
files have been observed, so drop back to simple compression for those
files. */
w->compression = opts.compression;
- if (w->compression == SFM_COMP_ZLIB
+ if (w->compression == ANY_COMP_ZLIB
&& is_encoding_ebcdic_compatible (dict_get_encoding (d)))
- w->compression = SFM_COMP_SIMPLE;
+ w->compression = ANY_COMP_SIMPLE;
w->case_cnt = 0;
mode = 0444;
if (opts.create_writeable)
mode |= 0222;
- w->rf = replace_file_start (fh_get_file_name (fh), "wb", mode,
- &w->file, NULL);
+ w->rf = replace_file_start (fh, "wb", mode, &w->file);
if (w->rf == NULL)
{
msg (ME, _("Error opening `%s' for writing as a system file: %s."),
write_int (w, 999);
write_int (w, 0);
- if (w->compression == SFM_COMP_ZLIB)
+ if (w->compression == ANY_COMP_ZLIB)
{
w->zstream.zalloc = Z_NULL;
w->zstream.zfree = Z_NULL;
{
const char *dict_encoding = dict_get_encoding (d);
char prod_name[61];
- char creation_date[10];
- char creation_time[9];
const char *file_label;
struct variable *weight;
/* Record-type code. */
if (is_encoding_ebcdic_compatible (dict_encoding))
write_string (w, EBCDIC_MAGIC, 4);
- else if (w->compression == SFM_COMP_ZLIB)
+ else if (w->compression == ANY_COMP_ZLIB)
write_string (w, ASCII_ZMAGIC, 4);
else
write_string (w, ASCII_MAGIC, 4);
write_int (w, calc_oct_idx (d, NULL));
/* Compressed? */
- write_int (w, (w->compression == SFM_COMP_NONE ? 0
- : w->compression == SFM_COMP_SIMPLE ? 1
+ write_int (w, (w->compression == ANY_COMP_NONE ? 0
+ : w->compression == ANY_COMP_SIMPLE ? 1
: 2));
/* Weight variable. */
write_float (w, COMPRESSION_BIAS);
/* Creation date and time. */
+ char *creation_date, *creation_time;
if (time (&t) == (time_t) -1)
{
- strcpy (creation_date, "01 Jan 70");
- strcpy (creation_time, "00:00:00");
+ creation_date = xstrdup ("01 Jan 70");
+ creation_time = xstrdup ( "00:00:00");
}
else
{
int min = rerange (tmp->tm_min + 1);
int sec = rerange (tmp->tm_sec + 1);
- snprintf (creation_date, sizeof creation_date,
- "%02d %s %02d", day, month_name[mon - 1], year);
- snprintf (creation_time, sizeof creation_time,
- "%02d:%02d:%02d", hour - 1, min - 1, sec - 1);
+ creation_date = xasprintf ("%02d %s %02d",
+ day, month_name[mon - 1], year);
+ creation_time = xasprintf ("%02d:%02d:%02d", hour - 1, min - 1, sec - 1);
}
write_utf8_string (w, dict_encoding, creation_date, 9);
write_utf8_string (w, dict_encoding, creation_time, 8);
+ free (creation_time);
+ free (creation_date);
/* File label. */
file_label = dict_get_label (d);
struct attrset_iterator i;
for (attr = attrset_first (attrs, &i); attr != NULL;
- attr = attrset_next (attrs, &i))
+ attr = attrset_next (attrs, &i))
{
size_t n_values = attribute_get_n_values (attr);
size_t j;
ds_put_cstr (string, attribute_get_name (attr));
ds_put_byte (string, '(');
- for (j = 0; j < n_values; j++)
+ for (j = 0; j < n_values; j++)
ds_put_format (string, "'%s'\n", attribute_get_value (attr, j));
ds_put_byte (string, ')');
}
size_t i;
for (i = 0; i < n_vars; i++)
- {
+ {
struct variable *v = dict_get_var (d, i);
struct attrset attrs;
w->case_cnt++;
- if (w->compression == SFM_COMP_NONE)
+ if (w->compression == ANY_COMP_NONE)
write_case_uncompressed (w, c);
else
write_case_compressed (w, c);
{
/* Flush buffer. */
flush_compressed (w);
- if (w->compression == SFM_COMP_ZLIB)
+ if (w->compression == ANY_COMP_ZLIB)
{
finish_zstream (w);
write_ztrailer (w);
block = &w->blocks[w->n_blocks++];
block->uncompressed_size = w->zstream.total_in;
block->compressed_size = w->zstream.total_out;
+ deflateEnd (&w->zstream);
}
static void
if (w->n_opcodes)
{
unsigned int n = 8 * (1 + w->n_elements);
- if (w->compression == SFM_COMP_SIMPLE)
+ if (w->compression == ANY_COMP_SIMPLE)
write_bytes (w, w->cbuf, n);
else
write_zlib (w, w->cbuf, n);