projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add zlib, libxml2 to optional library dependencies.
[pspp]
/
src
/
data
/
por-file-reader.c
diff --git
a/src/data/por-file-reader.c
b/src/data/por-file-reader.c
index 8e6099f5d8ec5bed03ed9d19aca7b2ce32ac6b34..668a8429d5839d9f8fb810009ef50d24d25eb169 100644
(file)
--- a/
src/data/por-file-reader.c
+++ b/
src/data/por-file-reader.c
@@
-35,15
+35,15
@@
#include <data/missing-values.h>
#include <data/value-labels.h>
#include <data/variable.h>
#include <data/missing-values.h>
#include <data/value-labels.h>
#include <data/variable.h>
-#include <libpspp/alloc.h>
#include <libpspp/compiler.h>
#include <libpspp/hash.h>
#include <libpspp/compiler.h>
#include <libpspp/hash.h>
-#include <libpspp/magic.h>
#include <libpspp/message.h>
#include <libpspp/misc.h>
#include <libpspp/pool.h>
#include <libpspp/str.h>
#include <libpspp/message.h>
#include <libpspp/misc.h>
#include <libpspp/pool.h>
#include <libpspp/str.h>
+#include "xalloc.h"
+
#include "gettext.h"
#define _(msgid) gettext (msgid)
#include "gettext.h"
#define _(msgid) gettext (msgid)
@@
-65,6
+65,7
@@
struct pfm_reader
jmp_buf bail_out; /* longjmp() target for error handling. */
struct file_handle *fh; /* File handle. */
jmp_buf bail_out; /* longjmp() target for error handling. */
struct file_handle *fh; /* File handle. */
+ struct fh_lock *lock; /* Read lock for file. */
FILE *file; /* File stream. */
int line_length; /* Number of characters so far on this line. */
char cc; /* Current character. */
FILE *file; /* File stream. */
int line_length; /* Number of characters so far on this line. */
char cc; /* Current character. */
@@
-157,8
+158,8
@@
close_reader (struct pfm_reader *r)
r->file = NULL;
}
r->file = NULL;
}
- if (r->fh != NULL)
-
fh_close (r->fh, "portable file", "rs"
);
+ fh_unlock (r->lock);
+
fh_unref (r->fh
);
ok = r->ok;
pool_destroy (r->pool);
ok = r->ok;
pool_destroy (r->pool);
@@
-241,15
+242,14
@@
pfm_open_reader (struct file_handle *fh, struct dictionary **dict,
struct pfm_reader *volatile r = NULL;
*dict = dict_create ();
struct pfm_reader *volatile r = NULL;
*dict = dict_create ();
- if (!fh_open (fh, FH_REF_FILE, "portable file", "rs"))
- goto error;
/* Create and initialize reader. */
pool = pool_create ();
r = pool_alloc (pool, sizeof *r);
r->pool = pool;
/* Create and initialize reader. */
pool = pool_create ();
r = pool_alloc (pool, sizeof *r);
r->pool = pool;
- r->fh = fh;
- r->file = fn_open (fh_get_file_name (r->fh), "rb");
+ r->fh = fh_ref (fh);
+ r->lock = NULL;
+ r->file = NULL;
r->line_length = 0;
r->weight_index = -1;
r->trans = NULL;
r->line_length = 0;
r->weight_index = -1;
r->trans = NULL;
@@
-257,11
+257,16
@@
pfm_open_reader (struct file_handle *fh, struct dictionary **dict,
r->widths = NULL;
r->value_cnt = 0;
r->ok = true;
r->widths = NULL;
r->value_cnt = 0;
r->ok = true;
-
if (setjmp (r->bail_out))
goto error;
if (setjmp (r->bail_out))
goto error;
- /* Check that file open succeeded. */
+ /* Lock file. */
+ r->lock = fh_lock (fh, FH_REF_FILE, "portable file", FH_ACC_READ, false);
+ if (r->lock == NULL)
+ goto error;
+
+ /* Open file. */
+ r->file = fn_open (fh_get_file_name (r->fh), "rb");
if (r->file == NULL)
{
msg (ME, _("An error occurred while opening \"%s\" for reading "
if (r->file == NULL)
{
msg (ME, _("An error occurred while opening \"%s\" for reading "
@@
-515,9
+520,9
@@
read_version_data (struct pfm_reader *r, struct pfm_read_info *info)
/* Validate file. */
if (strlen (date) != 8)
/* Validate file. */
if (strlen (date) != 8)
- error (r, _("Bad date string length %
d."), (int)
strlen (date));
+ error (r, _("Bad date string length %
zu."),
strlen (date));
if (strlen (time) != 6)
if (strlen (time) != 6)
- error (r, _("Bad time string length %
d."), (int)
strlen (time));
+ error (r, _("Bad time string length %
zu."),
strlen (time));
/* Save file info. */
if (info != NULL)
/* Save file info. */
if (info != NULL)
@@
-611,7
+616,7
@@
read_variables (struct pfm_reader *r, struct dictionary *dict)
error (r, _("Expected variable count record."));
r->var_cnt = read_int (r);
error (r, _("Expected variable count record."));
r->var_cnt = read_int (r);
- if (r->var_cnt <= 0
|| r->var_cnt == NOT_INT
)
+ if (r->var_cnt <= 0)
error (r, _("Invalid number of variables %d."), r->var_cnt);
r->widths = pool_nalloc (r->pool, r->var_cnt, sizeof *r->widths);
error (r, _("Invalid number of variables %d."), r->var_cnt);
r->widths = pool_nalloc (r->pool, r->var_cnt, sizeof *r->widths);