getdata-commits Mailing List for GetData (Page 12)
Scientific Database Format
Brought to you by:
ketiltrout
This list is closed, nobody may subscribe to it.
| 2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(5) |
Oct
(20) |
Nov
(21) |
Dec
(16) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2011 |
Jan
(1) |
Feb
(1) |
Mar
(56) |
Apr
(20) |
May
(4) |
Jun
(2) |
Jul
(3) |
Aug
(11) |
Sep
(2) |
Oct
(4) |
Nov
(18) |
Dec
(16) |
| 2012 |
Jan
(8) |
Feb
(12) |
Mar
(30) |
Apr
(13) |
May
(10) |
Jun
(17) |
Jul
(18) |
Aug
(19) |
Sep
|
Oct
(1) |
Nov
(1) |
Dec
(9) |
| 2013 |
Jan
(1) |
Feb
(4) |
Mar
(27) |
Apr
(6) |
May
(3) |
Jun
(1) |
Jul
(10) |
Aug
|
Sep
(3) |
Oct
(15) |
Nov
(4) |
Dec
(9) |
| 2014 |
Jan
|
Feb
(3) |
Mar
(4) |
Apr
(10) |
May
(15) |
Jun
|
Jul
(14) |
Aug
|
Sep
(2) |
Oct
(6) |
Nov
|
Dec
(9) |
| 2015 |
Jan
(2) |
Feb
(3) |
Mar
(1) |
Apr
(2) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <ket...@us...> - 2012-02-20 19:02:20
|
Revision: 660
http://getdata.svn.sourceforge.net/getdata/?rev=660&view=rev
Author: ketiltrout
Date: 2012-02-20 19:02:10 +0000 (Mon, 20 Feb 2012)
Log Message:
-----------
add "b" to appropriate f(d)open calls.
Modified Paths:
--------------
trunk/getdata/src/ascii.c
trunk/getdata/src/common.c
trunk/getdata/src/flush.c
trunk/getdata/src/include.c
trunk/getdata/src/internal.h
trunk/getdata/src/open.c
trunk/getdata/src/putdata.c
trunk/getdata/src/sie.c
Modified: trunk/getdata/src/ascii.c
===================================================================
--- trunk/getdata/src/ascii.c 2012-02-20 19:01:29 UTC (rev 659)
+++ trunk/getdata/src/ascii.c 2012-02-20 19:02:10 UTC (rev 660)
@@ -44,7 +44,7 @@
} else
file->idata = fd;
- file->edata = fdopen(file->idata, (mode & GD_FILE_WRITE) ? "r+" : "r");
+ file->edata = fdopen(file->idata, (mode & GD_FILE_WRITE) ? "rb+" : "rb");
if (file->edata == NULL) {
close(file->idata);
@@ -375,7 +375,7 @@
return -1;
}
- stream = fdopen(fd, "r");
+ stream = fdopen(fd, "rb");
if (stream == NULL) {
dreturn("%i", -1);
Modified: trunk/getdata/src/common.c
===================================================================
--- trunk/getdata/src/common.c 2012-02-20 19:01:29 UTC (rev 659)
+++ trunk/getdata/src/common.c 2012-02-20 19:02:10 UTC (rev 660)
@@ -277,7 +277,7 @@
return;
}
- fp = fdopen(fd, "r");
+ fp = fdopen(fd, "rb");
if (fp == NULL) {
_GD_SetError(D, GD_E_OPEN_LINFILE, GD_E_LINFILE_OPEN, NULL, 0,
E->EN(linterp,table));
Modified: trunk/getdata/src/flush.c
===================================================================
--- trunk/getdata/src/flush.c 2012-02-20 19:01:29 UTC (rev 659)
+++ trunk/getdata/src/flush.c 2012-02-20 19:02:10 UTC (rev 660)
@@ -593,7 +593,7 @@
dreturnvoid();
return;
}
- stream = fdopen(fd, "w+");
+ stream = fdopen(fd, "wb+");
if (stream == NULL) {
_GD_SetError(D, GD_E_FLUSH, GD_E_FLUSH_OPEN, NULL, errno, temp_file);
dreturnvoid();
Modified: trunk/getdata/src/include.c
===================================================================
--- trunk/getdata/src/include.c 2012-02-20 19:01:29 UTC (rev 659)
+++ trunk/getdata/src/include.c 2012-02-20 19:02:10 UTC (rev 660)
@@ -176,7 +176,7 @@
return -1;
}
- new_fp = fdopen(i, ((D->flags & GD_ACCMODE) == GD_RDWR) ? "r+" : "r");
+ new_fp = fdopen(i, ((D->flags & GD_ACCMODE) == GD_RDWR) ? "rb+" : "rb");
/* If opening the file failed, set the error code and abort parsing. */
if (new_fp == NULL) {
Modified: trunk/getdata/src/internal.h
===================================================================
--- trunk/getdata/src/internal.h 2012-02-20 19:01:29 UTC (rev 659)
+++ trunk/getdata/src/internal.h 2012-02-20 19:02:10 UTC (rev 660)
@@ -303,9 +303,6 @@
#endif
#ifndef O_TEXT
#define O_TEXT 0
-#define FOPEN_TEXT
-#else
-#define FOPEN_TEXT "t"
#endif
/* The Microsoft CRT appears to treat %hh as %h */
Modified: trunk/getdata/src/open.c
===================================================================
--- trunk/getdata/src/open.c 2012-02-20 19:01:29 UTC (rev 659)
+++ trunk/getdata/src/open.c 2012-02-20 19:02:10 UTC (rev 660)
@@ -227,7 +227,7 @@
}
/* associate a stream with the format file */
- if ((fp = fdopen(fd, "r")) == NULL) {
+ if ((fp = fdopen(fd, "rb")) == NULL) {
char *format_file = (char *)malloc(strlen(dirfile) + 8);
strcat(strcpy(format_file, dirfile), "/format");
_GD_SetError(D, GD_E_CREAT, GD_E_CREAT_FORMAT, format_file, errno, NULL);
Modified: trunk/getdata/src/putdata.c
===================================================================
--- trunk/getdata/src/putdata.c 2012-02-20 19:01:29 UTC (rev 659)
+++ trunk/getdata/src/putdata.c 2012-02-20 19:02:10 UTC (rev 660)
@@ -511,14 +511,14 @@
#define MPLEX(t) \
for (i = 0; i < n; i++) \
if (B[i] == val) \
- ((t*)A)[i] = ((t*)C)[i];
+ ((t*)A)[i] = ((t*)C)[i * spfB / spfA];
#define MPLEXC(t) \
do { \
for (i = 0; i < n; i++) \
if (B[i] == val) { \
- ((t*)A)[i * 2] = ((t*)C)[i * 2]; \
- ((t*)A)[i * 2 + 1] = ((t*)C)[i * 2 + 1]; \
+ ((t*)A)[i * 2] = ((t*)C)[i * spfB / spfA]; \
+ ((t*)A)[i * 2 + 1] = ((t*)C)[i * spfB / spfA + 1]; \
} \
} while (0)
Modified: trunk/getdata/src/sie.c
===================================================================
--- trunk/getdata/src/sie.c 2012-02-20 19:01:29 UTC (rev 659)
+++ trunk/getdata/src/sie.c 2012-02-20 19:02:10 UTC (rev 660)
@@ -48,7 +48,7 @@
} else
fd = fdin;
- stream = fdopen(fd, (mode & GD_FILE_WRITE) ? "r+" : "r");
+ stream = fdopen(fd, (mode & GD_FILE_WRITE) ? "rb+" : "rb");
if (stream == NULL) {
close(fd);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2012-02-20 19:01:35
|
Revision: 659
http://getdata.svn.sourceforge.net/getdata/?rev=659&view=rev
Author: ketiltrout
Date: 2012-02-20 19:01:29 +0000 (Mon, 20 Feb 2012)
Log Message:
-----------
Typos.
Modified Paths:
--------------
trunk/html/dirfile.html
Modified: trunk/html/dirfile.html
===================================================================
--- trunk/html/dirfile.html 2012-02-16 03:16:18 UTC (rev 658)
+++ trunk/html/dirfile.html 2012-02-20 19:01:29 UTC (rev 659)
@@ -579,7 +579,7 @@
type</a> and <i>value0</i>, <i>value1</i>, &c. are the values of
successive elements in the scalar list, interpreted as indicated by
<i>type</i>. GetData is prepared to deal with at least 2<sup>24</sup>
- values. Note: despite being multivalued, this is not considered a
+ elements. Note: despite being multivalued, this is not considered a
vector field since the elements of the <b>CARRAY</b> are not indexed by
frames. A <b>CARRAY</b> with a single element is identical to a
<b>CONST</b> field. Introduced in Standards Version 8.
@@ -616,7 +616,8 @@
<li><span class="syntax"><n></span> indicates the number of
input fields (i.e. 1, 2, or 3). In Standards Version 7 and 8 it is
optional; earlier Standards Versions require it. If omitted, the
- number of input fields will be determined by the number given.
+ number of input fields will be determined by the number of tokens
+ present.
<li><span class="syntax"><field-name></span> will be computed
as:
<div class="syntax"> field-name[n] = (m<sub>1</sub> ×
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2012-02-16 03:16:30
|
Revision: 658
http://getdata.svn.sourceforge.net/getdata/?rev=658&view=rev
Author: ketiltrout
Date: 2012-02-16 03:16:18 +0000 (Thu, 16 Feb 2012)
Log Message:
-----------
* When truncating don't delete and recreate the format file; just truncate it
* use the correct SPF when calculating lincoms.
Modified Paths:
--------------
trunk/getdata/ChangeLog
trunk/getdata/src/getdata.c
trunk/getdata/src/open.c
trunk/getdata/test/Makefile.am
trunk/getdata/test/trunc_rofs.c
Added Paths:
-----------
trunk/getdata/test/get_lincom_spf.c
Property Changed:
----------------
trunk/getdata/test/
Modified: trunk/getdata/ChangeLog
===================================================================
--- trunk/getdata/ChangeLog 2012-02-15 00:09:19 UTC (rev 657)
+++ trunk/getdata/ChangeLog 2012-02-16 03:16:18 UTC (rev 658)
@@ -1,5 +1,14 @@
-2012-02-14 D. V. Wiebe <ge...@ke...> svn:654
+2012-02-16 D. V. Wiebe <ge...@ke...> svn:658
+ * src/getdata.c (_GD_DoLincom): Get the correct SPFs.
+ * test/get_lincom_spf.c: Added.
+
+ * src/open.c (_GD_CreateDirfile): When truncating, don't delete and then
+ recreate the format file; just truncate it. (This helps kst not get
+ confused when monitoring a dirfile which gets truncated.)
+
+2012-02-14 D. V. Wiebe <ge...@ke...> svn:656,657
* src/putdata.c (gd_putdata): Return early if num_samp == 0.
+ * test/put_zero.c: Added.
2012-02-01 D. V. Wiebe <ge...@ke...> svn:652
* configure.ac: Figure out the directory separator (ie. '/' on POSIX).
Modified: trunk/getdata/src/getdata.c
===================================================================
--- trunk/getdata/src/getdata.c 2012-02-15 00:09:19 UTC (rev 657)
+++ trunk/getdata/src/getdata.c 2012-02-16 03:16:18 UTC (rev 658)
@@ -972,7 +972,7 @@
return 0;
}
- spf[i] = _GD_GetSPF(D, E->e->entry[0]);
+ spf[i] = _GD_GetSPF(D, E->e->entry[i]);
if (D->error != GD_E_OK) {
dreturn("%i", 0);
return 0;
Modified: trunk/getdata/src/open.c
===================================================================
--- trunk/getdata/src/open.c 2012-02-15 00:09:19 UTC (rev 657)
+++ trunk/getdata/src/open.c 2012-02-16 03:16:18 UTC (rev 658)
@@ -29,7 +29,7 @@
DIR* dir;
struct dirent* lamb;
int fd = -1;
- int format_error = 0;
+ int format_error = 0, format_trunc = 0;
FILE* fp = NULL;
dtrace("%p, %i, %i, \"%s\"", D, dirfd, dir_error, dirfile);
@@ -154,7 +154,10 @@
#endif
)
{
- if (gd_UnlinkAt(D, dirfd, lamb->d_name, 0)) {
+ /* don't delete the format file; we'll truncate it later */
+ if (strcmp(lamb->d_name, "format") == 0) {
+ format_trunc = 1;
+ } else if (gd_UnlinkAt(D, dirfd, lamb->d_name, 0)) {
char *name = (char *)malloc(strlen(dirfile) + strlen(lamb->d_name)
+ 2);
strcat(strcat(strcpy(name, dirfile), "/"), lamb->d_name);
@@ -205,9 +208,9 @@
#endif
}
- /* create a new, empty format file */
- if ((fd = gd_OpenAt(D, dirfd, "format", O_CREAT | O_EXCL | O_BINARY, 0666))
- < 0)
+ /* create a new, empty format file, or else truncate it */
+ if ((fd = gd_OpenAt(D, dirfd, "format", O_RDWR | O_CREAT | O_BINARY |
+ (format_trunc ? O_TRUNC : O_EXCL), 0666)) < 0)
{
char *format_file = (char *)malloc(strlen(dirfile) + 8);
strcat(strcpy(format_file, dirfile), "/format");
Property changes on: trunk/getdata/test
___________________________________________________________________
Modified: svn:ignore
- Makefile
Makefile.in
*.o
*.odirfile
*.swp
*.exe
.deps
.libs
add
add_affix
add_alias
add_bit
add_bit_bitnum
add_bit_bitsize
add_bit_invalid
add_bit_numbits
add_carray
add_clincom
add_code
add_const
add_cpolynom
add_crecip
add_crecip89
add_divide
add_divide_invalid
add_duplicate
add_format
add_invalid
add_lincom
add_lincom_invalid
add_lincom_nfields
add_linterp
add_linterp_invalid
add_mplex
add_mplex_val
add_multiply
add_multiply_invalid
add_phase
add_phase_invalid
add_polynom
add_protect
add_raw
add_raw_include
add_raw_invalid
add_raw_spf
add_raw_type
add_rdonly
add_recip
add_resolv
add_sbit
add_scalar
add_scalar_carray
add_sort
add_spec
add_spec_directive
add_spec_invalid
add_spec_meta
add_spec_resolv
add_string
add_string_affix
add_type
add_window
add_window_op
alias_list
alias_list_alias
alias_list_missing
alias_num
alias_num_alias
alias_num_missing
alias_target
alias_target_alias
alias_target_missing
alter_bit_bitnum
alter_bit_numbits
alter_carray_len
alter_carray_type
alter_const
alter_cpolynom
alter_crecip
alter_crecip89
alter_crecip_zero
alter_divide
alter_entry
alter_entry_affix
alter_entry_hidden
alter_entry_recode
alter_entry_scalar2a
alter_entry_scalar2n
alter_entry_scalar3
alter_entry_scalar4
alter_lincom_23
alter_lincom_32
alter_lincom_input
alter_lincom_offset
alter_lincom_slope
alter_linterp
alter_linterp_move
alter_mplex
alter_mspec
alter_mspec_affix
alter_multiply
alter_phase
alter_polynom_coeff
alter_polynom_input
alter_polynom_ord
alter_raw_spf
alter_raw_type
alter_recip
alter_recip_zero
alter_spec
alter_spec_affix
alter_spec_meta
alter_window
ascii_add
ascii_get
ascii_get_get
ascii_nframes
ascii_put
bof
bof_lincom
bof_phase
bzip_get
bzip_get_get
bzip_move_from
bzip_nframes
bzip_put
close
close_bad
close_discard
close_null
convert_complex128_complex64
convert_complex128_float64
convert_complex128_int64
convert_complex128_uint64
convert_complex64_complex128
convert_complex64_float64
convert_complex64_int64
convert_complex64_uint64
convert_float32_complex128
convert_float32_complex64
convert_float32_float64
convert_float32_int16
convert_float32_int32
convert_float32_int64
convert_float32_int8
convert_float32_uint16
convert_float32_uint32
convert_float32_uint64
convert_float32_uint8
convert_float64_complex128
convert_float64_complex64
convert_float64_float32
convert_float64_int16
convert_float64_int32
convert_float64_int64
convert_float64_int8
convert_float64_uint16
convert_float64_uint32
convert_float64_uint64
convert_float64_uint8
convert_int16_complex128
convert_int16_complex64
convert_int16_float32
convert_int16_float64
convert_int16_int32
convert_int16_int64
convert_int16_int8
convert_int16_uint16
convert_int16_uint32
convert_int16_uint64
convert_int16_uint8
convert_int32_complex128
convert_int32_complex64
convert_int32_float32
convert_int32_float64
convert_int32_int16
convert_int32_int64
convert_int32_int8
convert_int32_uint16
convert_int32_uint32
convert_int32_uint64
convert_int32_uint8
convert_int64_complex128
convert_int64_complex64
convert_int64_float32
convert_int64_float64
convert_int64_int16
convert_int64_int32
convert_int64_int8
convert_int64_uint16
convert_int64_uint32
convert_int64_uint64
convert_int64_uint8
convert_int8_complex128
convert_int8_complex64
convert_int8_float32
convert_int8_float64
convert_int8_int16
convert_int8_int32
convert_int8_int64
convert_int8_uint16
convert_int8_uint32
convert_int8_uint64
convert_int8_uint8
convert_uint16_complex128
convert_uint16_complex64
convert_uint16_float32
convert_uint16_float64
convert_uint16_int16
convert_uint16_int32
convert_uint16_int64
convert_uint16_int8
convert_uint16_uint32
convert_uint16_uint64
convert_uint16_uint8
convert_uint32_complex128
convert_uint32_complex64
convert_uint32_float32
convert_uint32_float64
convert_uint32_int16
convert_uint32_int32
convert_uint32_int64
convert_uint32_int8
convert_uint32_uint16
convert_uint32_uint64
convert_uint32_uint8
convert_uint64_complex128
convert_uint64_complex64
convert_uint64_float32
convert_uint64_float64
convert_uint64_int16
convert_uint64_int32
convert_uint64_int64
convert_uint64_int8
convert_uint64_uint16
convert_uint64_uint32
convert_uint64_uint8
convert_uint8_complex128
convert_uint8_complex64
convert_uint8_float32
convert_uint8_float64
convert_uint8_int16
convert_uint8_int32
convert_uint8_int64
convert_uint8_int8
convert_uint8_uint16
convert_uint8_uint32
convert_uint8_uint64
creat
creat_excl
creat_rdonly
cvlist
cvlist_array
cvlist_array_hidden
cvlist_array_meta
cvlist_array_meta_hidden
cvlist_hidden
cvlist_invalid
cvlist_meta
cvlist_meta_hidden
cvlist_meta_invalid
del
del_carray
del_carray_deref
del_const
del_const_deref
del_const_force
del_data
del_derived
del_derived_after
del_derived_force
del_meta
del_meta_force
dfes_bit
dfes_divide
dfes_lincom
dfes_linterp
dfes_multiply
dfes_null
dfes_phase
dfes_raw
dfes_recip
dfes_zero
encode_alter
encode_get
encode_move
endian_alter
endian_alter_sie
endian_get
endian_move
entry_bad_code
entry_bit
entry_bit_scalar
entry_divide
entry_invalid
entry_lincom
entry_lincom_scalar
entry_linterp
entry_mplex
entry_mplex_scalar
entry_multiply
entry_phase
entry_phase_scalar
entry_polynom
entry_polynom_scalar
entry_raw
entry_raw_scalar
entry_raw_scalar_code
entry_raw_scalar_type
entry_recip
entry_scalar_repr
entry_type
entry_type_alias
entry_window
entry_window_scalar
eof
eof_index
eof_lincom
eof_phase
error
error_error
error_num
error_short
file
file_code
file_type
flist
flist_hidden
flist_invalid
flist_meta
flist_meta_hidden
flist_meta_invalid
flist_type
flist_type_hidden
flist_type_invalid
flist_type_meta
flist_type_meta_hidden
flist_type_meta_invalid
flush
flush_all
flush_bad_code
flush_invalid
flush_meta
flush_spec
foffs_alter
foffs_get
foffs_move
fragment_affix
fragment_affix_alter
fragment_affix_alter2
fragment_affix_dup
fragment_index
fragment_index_alias
fragment_name
fragment_name_oor
fragment_num
fragment_parent
get64
get_bad_code
get_bit
get_carray
get_carray_len
get_carray_slice
get_char
get_clincom
get_complex128
get_complex64
get_const
get_const_complex
get_const_repr
get_cpolynom
get_divide
get_endian16
get_endian32
get_endian64
get_endian8
get_endian_complex128_arm
get_endian_complex128_big
get_endian_complex128_little
get_endian_complex64_arm
get_endian_complex64_big
get_endian_complex64_little
get_endian_float32_arm
get_endian_float32_big
get_endian_float32_little
get_endian_float64_arm
get_endian_float64_big
get_endian_float64_little
get_ff
get_float32
get_float64
get_foffs
get_fs
get_here
get_here_foffs
get_heres
get_int16
get_int32
get_int64
get_int8
get_invalid
get_lincom1
get_lincom2
get_lincom3
get_lincom_noin
get_lincom_non
get_linterp
get_linterp_noin
get_linterp_notab
get_linterp_sort
get_mplex
get_mplex_lb
get_multiply
get_multiply_noin
get_nonexistent
get_null
get_off64
get_phase
get_phase_affix
get_polynom
get_polynom_noin
get_recip
get_recip_const
get_recurse
get_rofs
get_sbit
get_sf
get_ss
get_type
get_uint16
get_uint32
get_uint64
get_window
get_window_clr
get_window_ge
get_window_gt
get_window_le
get_window_lt
get_window_ne
get_window_set
get_zero
global_name
global_ref
global_ref_empty
global_ref_set
gzip_add
gzip_get
gzip_get_get
gzip_get_put
gzip_move_from
gzip_move_to
gzip_nframes
gzip_put
gzip_put_get
header_complex
hide
hide_hidden
hide_unhide
include
include_accmode
include_affix
include_auto
include_cb
include_creat
include_ignore
include_index
include_invalid
include_nonexistent
include_pc
include_ref
include_syntax
index
index_domain
index_range
legacy_get
legacy_get_put
legacy_get_rofs
legacy_nframes
legacy_nonexistent
legacy_put
legacy_spf
lzma_get
lzma_nframes
madd
madd_affix
madd_alias
madd_bit
madd_bit_invalid
madd_carray
madd_clincom
madd_const
madd_cpolynom
madd_crecip
madd_crecip89
madd_divide
madd_index
madd_lincom
madd_lincom_invalid
madd_linterp
madd_linterp_invalid
madd_mplex
madd_multiply
madd_multiply_invalid
madd_phase
madd_phase_invalid
madd_polynom
madd_recip
madd_sbit
madd_spec
madd_spec_directive
madd_spec_invalid
madd_spec_resolv
madd_string
madd_window
move
move_affix
move_affix_dup
move_alias
move_data_enc_ar
move_data_enc_ra
move_data_endian
move_data_foffs
move_data_nop
move_index
move_meta
move_protect
move_subdir
name
name_affix
name_affix_bad
name_after
name_after_const
name_dup
name_move
name_update
name_update_const
nfields
nfields_hidden
nfields_invalid
nfields_type
nfields_type_hidden
nfields_type_invalid
nfields_vector
nfields_vector_hidden
nfields_vector_invalid
nframes
nframes64
nframes_empty
nframes_invalid
nframes_off64
nframes_spf
nmeta
nmeta_hidden
nmeta_invalid
nmeta_parent
nmeta_type
nmeta_type_hidden
nmeta_type_invalid
nmeta_type_parent
nmeta_vectors
nmeta_vectors_del
nmeta_vectors_hidden
nmeta_vectors_invalid
nmeta_vectors_parent
open
open_cb_abort
open_cb_cont
open_cb_ignore
open_cb_invalid
open_cb_rescan
open_eaccess
open_nonexistent
open_notdirfile
parse_alias
parse_alias_code
parse_alias_dup
parse_alias_meta
parse_alias_missing
parse_badline
parse_bit
parse_bit4
parse_bit_bitnum
parse_bit_bitsize
parse_bit_ncols
parse_bit_numbits
parse_bit_scalar
parse_carray
parse_carray_long
parse_const
parse_const_ncols
parse_divide
parse_duplicate
parse_duplicate_ignore
parse_endian_bad
parse_endian_big
parse_endian_force
parse_endian_little
parse_endian_slash
parse_eol
parse_foffs
parse_foffs_include
parse_foffs_slash
parse_hidden
parse_hidden_field
parse_hidden_meta
parse_include
parse_include_absolute
parse_include_absrel
parse_include_loop
parse_include_nonexistent
parse_include_prefix
parse_include_prefix_dup
parse_include_preprefix
parse_include_relabs
parse_include_relrel
parse_include_slash
parse_include_suffix
parse_include_sufsuffix
parse_index
parse_lincom
parse_lincom_ncols1
parse_lincom_ncols2
parse_lincom_nfields
parse_lincom_nofields
parse_lincom_non
parse_lincom_non_ncols
parse_lincom_scalar
parse_linterp
parse_linterp_ncols
parse_malias
parse_malias_dup
parse_meta
parse_meta_affix
parse_meta_alias
parse_meta_implicit
parse_meta_implicit2
parse_meta_implicit_affix
parse_meta_index
parse_meta_index2
parse_meta_jump
parse_meta_malias
parse_meta_meta
parse_meta_parent
parse_meta_raw
parse_mplex
parse_mplex_ncols
parse_mplex_scalar
parse_multiply
parse_multiply_ncols
parse_name
parse_name_dot
parse_name_ext
parse_name_pedantic
parse_ncols
parse_phase
parse_phase_ncols
parse_phase_scalar
parse_polynom
parse_polynom_ncols1
parse_polynom_ncols2
parse_polynom_scalar
parse_protect_all
parse_protect_bad
parse_protect_data
parse_protect_format
parse_protect_none
parse_quote
parse_quote_mismatch
parse_raw
parse_raw_char
parse_raw_ncols
parse_raw_scalar
parse_raw_spf
parse_raw_type
parse_recip
parse_ref
parse_ref_nonexistent
parse_sbit
parse_sort
parse_string
parse_string_ncols
parse_string_null
parse_version
parse_version_89
parse_version_98
parse_version_include
parse_version_p8
parse_version_p9
parse_version_permissive
parse_version_slash
parse_whitespace
parse_window
parse_window_ncols
parse_window_op
parse_window_scalar
protect_alter
protect_get
put64
put_bad_code
put_bit
put_bof
put_carray
put_carray_slice
put_char
put_complex128
put_complex64
put_const
put_const_protect
put_divide
put_endian16
put_endian32
put_endian64
put_endian8
put_endian_complex128_arm
put_endian_complex128_big
put_endian_complex128_little
put_endian_complex64_arm
put_endian_complex64_big
put_endian_complex64_little
put_endian_float32_arm
put_endian_float32_big
put_endian_float32_little
put_endian_float64_arm
put_endian_float64_big
put_endian_float64_little
put_ff
put_float32
put_float64
put_foffs
put_fs
put_here
put_heres
put_int16
put_int32
put_int64
put_int8
put_invalid
put_lincom1
put_lincom2
put_lincom_noin
put_linterp
put_linterp_noin
put_linterp_nomono
put_linterp_notab
put_linterp_reverse
put_mplex
put_multiply
put_null
put_off64
put_phase
put_phase_noin
put_polynom1
put_polynom2
put_polynom_noin
put_protect
put_rdonly
put_recip
put_recurse
put_repr
put_rofs
put_sbit
put_sf
put_ss
put_string
put_string_protect
put_type
put_uint16
put_uint32
put_uint64
put_window
ref
ref_none
ref_two
repr_a
repr_float32
repr_float64
repr_i
repr_int16
repr_int32
repr_int64
repr_int8
repr_m
repr_r
repr_real_a
repr_real_i
repr_real_m
repr_real_r
repr_uint16
repr_uint32
repr_uint64
repr_uint8
seek64
seek_cur
seek_end
seek_foffs
seek_set
sie_get_big
sie_get_little
sie_move_from
sie_move_to
sie_nframes_big
sie_nframes_little
sie_put_big
sie_put_little
slim_get
slim_nframes
slim_put
spf
spf_alias
spf_alias_meta
spf_alias_missing
spf_divide
spf_lincom
spf_multiply
spf_polynom
spf_recip
spf_recurse
svlist
svlist_hidden
svlist_invalid
svlist_meta
svlist_meta_hidden
svlist_meta_invalid
tell
tell64
trunc
trunc_rdonly
trunc_rofs
unclude
unclude_del
unclude_move
version_0
version_0_write
version_1
version_1_write
version_2
version_2_write
version_3
version_3_write
version_4
version_4_write
version_5
version_5_strict
version_5_write
version_6
version_6_strict
version_6_write
version_7
version_7_strict
version_7_write
version_8
version_8_strict
version_8_write
version_9
version_9_strict
version_9_write
vlist
vlist_alias
vlist_hidden
vlist_invalid
vlist_meta
vlist_meta_hidden
vlist_meta_invalid
xz_get
xz_nframes
zzip_data
zzip_get
zzip_get_get
zzip_nframes
zzslim_get
zzslim_nframes
+ Makefile
Makefile.in
*.o
*.odirfile
*.swp
*.exe
.deps
.libs
add
add_affix
add_alias
add_bit
add_bit_bitnum
add_bit_bitsize
add_bit_invalid
add_bit_numbits
add_carray
add_clincom
add_code
add_const
add_cpolynom
add_crecip
add_crecip89
add_divide
add_divide_invalid
add_duplicate
add_format
add_invalid
add_lincom
add_lincom_invalid
add_lincom_nfields
add_linterp
add_linterp_invalid
add_mplex
add_mplex_val
add_multiply
add_multiply_invalid
add_phase
add_phase_invalid
add_polynom
add_protect
add_raw
add_raw_include
add_raw_invalid
add_raw_spf
add_raw_type
add_rdonly
add_recip
add_resolv
add_sbit
add_scalar
add_scalar_carray
add_sort
add_spec
add_spec_directive
add_spec_invalid
add_spec_meta
add_spec_resolv
add_string
add_string_affix
add_type
add_window
add_window_op
alias_list
alias_list_alias
alias_list_missing
alias_num
alias_num_alias
alias_num_missing
alias_target
alias_target_alias
alias_target_missing
alter_bit_bitnum
alter_bit_numbits
alter_carray_len
alter_carray_type
alter_const
alter_cpolynom
alter_crecip
alter_crecip89
alter_crecip_zero
alter_divide
alter_entry
alter_entry_affix
alter_entry_hidden
alter_entry_recode
alter_entry_scalar2a
alter_entry_scalar2n
alter_entry_scalar3
alter_entry_scalar4
alter_lincom_23
alter_lincom_32
alter_lincom_input
alter_lincom_offset
alter_lincom_slope
alter_linterp
alter_linterp_move
alter_mplex
alter_mspec
alter_mspec_affix
alter_multiply
alter_phase
alter_polynom_coeff
alter_polynom_input
alter_polynom_ord
alter_raw_spf
alter_raw_type
alter_recip
alter_recip_zero
alter_spec
alter_spec_affix
alter_spec_meta
alter_window
ascii_add
ascii_get
ascii_get_get
ascii_nframes
ascii_put
bof
bof_lincom
bof_phase
bzip_get
bzip_get_get
bzip_move_from
bzip_nframes
bzip_put
close
close_bad
close_discard
close_null
convert_complex128_complex64
convert_complex128_float64
convert_complex128_int64
convert_complex128_uint64
convert_complex64_complex128
convert_complex64_float64
convert_complex64_int64
convert_complex64_uint64
convert_float32_complex128
convert_float32_complex64
convert_float32_float64
convert_float32_int16
convert_float32_int32
convert_float32_int64
convert_float32_int8
convert_float32_uint16
convert_float32_uint32
convert_float32_uint64
convert_float32_uint8
convert_float64_complex128
convert_float64_complex64
convert_float64_float32
convert_float64_int16
convert_float64_int32
convert_float64_int64
convert_float64_int8
convert_float64_uint16
convert_float64_uint32
convert_float64_uint64
convert_float64_uint8
convert_int16_complex128
convert_int16_complex64
convert_int16_float32
convert_int16_float64
convert_int16_int32
convert_int16_int64
convert_int16_int8
convert_int16_uint16
convert_int16_uint32
convert_int16_uint64
convert_int16_uint8
convert_int32_complex128
convert_int32_complex64
convert_int32_float32
convert_int32_float64
convert_int32_int16
convert_int32_int64
convert_int32_int8
convert_int32_uint16
convert_int32_uint32
convert_int32_uint64
convert_int32_uint8
convert_int64_complex128
convert_int64_complex64
convert_int64_float32
convert_int64_float64
convert_int64_int16
convert_int64_int32
convert_int64_int8
convert_int64_uint16
convert_int64_uint32
convert_int64_uint64
convert_int64_uint8
convert_int8_complex128
convert_int8_complex64
convert_int8_float32
convert_int8_float64
convert_int8_int16
convert_int8_int32
convert_int8_int64
convert_int8_uint16
convert_int8_uint32
convert_int8_uint64
convert_int8_uint8
convert_uint16_complex128
convert_uint16_complex64
convert_uint16_float32
convert_uint16_float64
convert_uint16_int16
convert_uint16_int32
convert_uint16_int64
convert_uint16_int8
convert_uint16_uint32
convert_uint16_uint64
convert_uint16_uint8
convert_uint32_complex128
convert_uint32_complex64
convert_uint32_float32
convert_uint32_float64
convert_uint32_int16
convert_uint32_int32
convert_uint32_int64
convert_uint32_int8
convert_uint32_uint16
convert_uint32_uint64
convert_uint32_uint8
convert_uint64_complex128
convert_uint64_complex64
convert_uint64_float32
convert_uint64_float64
convert_uint64_int16
convert_uint64_int32
convert_uint64_int64
convert_uint64_int8
convert_uint64_uint16
convert_uint64_uint32
convert_uint64_uint8
convert_uint8_complex128
convert_uint8_complex64
convert_uint8_float32
convert_uint8_float64
convert_uint8_int16
convert_uint8_int32
convert_uint8_int64
convert_uint8_int8
convert_uint8_uint16
convert_uint8_uint32
convert_uint8_uint64
creat
creat_excl
creat_rdonly
cvlist
cvlist_array
cvlist_array_hidden
cvlist_array_meta
cvlist_array_meta_hidden
cvlist_hidden
cvlist_invalid
cvlist_meta
cvlist_meta_hidden
cvlist_meta_invalid
del
del_carray
del_carray_deref
del_const
del_const_deref
del_const_force
del_data
del_derived
del_derived_after
del_derived_force
del_meta
del_meta_force
dfes_bit
dfes_divide
dfes_lincom
dfes_linterp
dfes_multiply
dfes_null
dfes_phase
dfes_raw
dfes_recip
dfes_zero
encode_alter
encode_get
encode_move
endian_alter
endian_alter_sie
endian_get
endian_move
entry_bad_code
entry_bit
entry_bit_scalar
entry_divide
entry_invalid
entry_lincom
entry_lincom_scalar
entry_linterp
entry_mplex
entry_mplex_scalar
entry_multiply
entry_phase
entry_phase_scalar
entry_polynom
entry_polynom_scalar
entry_raw
entry_raw_scalar
entry_raw_scalar_code
entry_raw_scalar_type
entry_recip
entry_scalar_repr
entry_type
entry_type_alias
entry_window
entry_window_scalar
eof
eof_index
eof_lincom
eof_phase
error
error_error
error_num
error_short
file
file_code
file_type
flist
flist_hidden
flist_invalid
flist_meta
flist_meta_hidden
flist_meta_invalid
flist_type
flist_type_hidden
flist_type_invalid
flist_type_meta
flist_type_meta_hidden
flist_type_meta_invalid
flush
flush_all
flush_bad_code
flush_invalid
flush_meta
flush_spec
foffs_alter
foffs_get
foffs_move
fragment_affix
fragment_affix_alter
fragment_affix_alter2
fragment_affix_dup
fragment_index
fragment_index_alias
fragment_name
fragment_name_oor
fragment_num
fragment_parent
get64
get_bad_code
get_bit
get_carray
get_carray_len
get_carray_slice
get_char
get_clincom
get_complex128
get_complex64
get_const
get_const_complex
get_const_repr
get_cpolynom
get_divide
get_endian16
get_endian32
get_endian64
get_endian8
get_endian_complex128_arm
get_endian_complex128_big
get_endian_complex128_little
get_endian_complex64_arm
get_endian_complex64_big
get_endian_complex64_little
get_endian_float32_arm
get_endian_float32_big
get_endian_float32_little
get_endian_float64_arm
get_endian_float64_big
get_endian_float64_little
get_ff
get_float32
get_float64
get_foffs
get_fs
get_here
get_here_foffs
get_heres
get_int16
get_int32
get_int64
get_int8
get_invalid
get_lincom1
get_lincom2
get_lincom3
get_lincom_noin
get_lincom_non
get_linterp
get_linterp_noin
get_linterp_notab
get_lincom_spf
get_linterp_sort
get_mplex
get_mplex_lb
get_multiply
get_multiply_noin
get_nonexistent
get_null
get_off64
get_phase
get_phase_affix
get_polynom
get_polynom_noin
get_recip
get_recip_const
get_recurse
get_rofs
get_sbit
get_sf
get_ss
get_type
get_uint16
get_uint32
get_uint64
get_window
get_window_clr
get_window_ge
get_window_gt
get_window_le
get_window_lt
get_window_ne
get_window_set
get_zero
global_name
global_ref
global_ref_empty
global_ref_set
gzip_add
gzip_get
gzip_get_get
gzip_get_put
gzip_move_from
gzip_move_to
gzip_nframes
gzip_put
gzip_put_get
header_complex
hide
hide_hidden
hide_unhide
include
include_accmode
include_affix
include_auto
include_cb
include_creat
include_ignore
include_index
include_invalid
include_nonexistent
include_pc
include_ref
include_syntax
index
index_domain
index_range
legacy_get
legacy_get_put
legacy_get_rofs
legacy_nframes
legacy_nonexistent
legacy_put
legacy_spf
lzma_get
lzma_nframes
madd
madd_affix
madd_alias
madd_bit
madd_bit_invalid
madd_carray
madd_clincom
madd_const
madd_cpolynom
madd_crecip
madd_crecip89
madd_divide
madd_index
madd_lincom
madd_lincom_invalid
madd_linterp
madd_linterp_invalid
madd_mplex
madd_multiply
madd_multiply_invalid
madd_phase
madd_phase_invalid
madd_polynom
madd_recip
madd_sbit
madd_spec
madd_spec_directive
madd_spec_invalid
madd_spec_resolv
madd_string
madd_window
move
move_affix
move_affix_dup
move_alias
move_data_enc_ar
move_data_enc_ra
move_data_endian
move_data_foffs
move_data_nop
move_index
move_meta
move_protect
move_subdir
name
name_affix
name_affix_bad
name_after
name_after_const
name_dup
name_move
name_update
name_update_const
nfields
nfields_hidden
nfields_invalid
nfields_type
nfields_type_hidden
nfields_type_invalid
nfields_vector
nfields_vector_hidden
nfields_vector_invalid
nframes
nframes64
nframes_empty
nframes_invalid
nframes_off64
nframes_spf
nmeta
nmeta_hidden
nmeta_invalid
nmeta_parent
nmeta_type
nmeta_type_hidden
nmeta_type_invalid
nmeta_type_parent
nmeta_vectors
nmeta_vectors_del
nmeta_vectors_hidden
nmeta_vectors_invalid
nmeta_vectors_parent
open
open_cb_abort
open_cb_cont
open_cb_ignore
open_cb_invalid
open_cb_rescan
open_eaccess
open_nonexistent
open_notdirfile
parse_alias
parse_alias_code
parse_alias_dup
parse_alias_meta
parse_alias_missing
parse_badline
parse_bit
parse_bit4
parse_bit_bitnum
parse_bit_bitsize
parse_bit_ncols
parse_bit_numbits
parse_bit_scalar
parse_carray
parse_carray_long
parse_const
parse_const_ncols
parse_divide
parse_duplicate
parse_duplicate_ignore
parse_endian_bad
parse_endian_big
parse_endian_force
parse_endian_little
parse_endian_slash
parse_eol
parse_foffs
parse_foffs_include
parse_foffs_slash
parse_hidden
parse_hidden_field
parse_hidden_meta
parse_include
parse_include_absolute
parse_include_absrel
parse_include_loop
parse_include_nonexistent
parse_include_prefix
parse_include_prefix_dup
parse_include_preprefix
parse_include_relabs
parse_include_relrel
parse_include_slash
parse_include_suffix
parse_include_sufsuffix
parse_index
parse_lincom
parse_lincom_ncols1
parse_lincom_ncols2
parse_lincom_nfields
parse_lincom_nofields
parse_lincom_non
parse_lincom_non_ncols
parse_lincom_scalar
parse_linterp
parse_linterp_ncols
parse_malias
parse_malias_dup
parse_meta
parse_meta_affix
parse_meta_alias
parse_meta_implicit
parse_meta_implicit2
parse_meta_implicit_affix
parse_meta_index
parse_meta_index2
parse_meta_jump
parse_meta_malias
parse_meta_meta
parse_meta_parent
parse_meta_raw
parse_mplex
parse_mplex_ncols
parse_mplex_scalar
parse_multiply
parse_multiply_ncols
parse_name
parse_name_dot
parse_name_ext
parse_name_pedantic
parse_ncols
parse_phase
parse_phase_ncols
parse_phase_scalar
parse_polynom
parse_polynom_ncols1
parse_polynom_ncols2
parse_polynom_scalar
parse_protect_all
parse_protect_bad
parse_protect_data
parse_protect_format
parse_protect_none
parse_quote
parse_quote_mismatch
parse_raw
parse_raw_char
parse_raw_ncols
parse_raw_scalar
parse_raw_spf
parse_raw_type
parse_recip
parse_ref
parse_ref_nonexistent
parse_sbit
parse_sort
parse_string
parse_string_ncols
parse_string_null
parse_version
parse_version_89
parse_version_98
parse_version_include
parse_version_p8
parse_version_p9
parse_version_permissive
parse_version_slash
parse_whitespace
parse_window
parse_window_ncols
parse_window_op
parse_window_scalar
protect_alter
protect_get
put64
put_bad_code
put_bit
put_bof
put_carray
put_carray_slice
put_char
put_complex128
put_complex64
put_const
put_const_protect
put_divide
put_endian16
put_endian32
put_endian64
put_endian8
put_endian_complex128_arm
put_endian_complex128_big
put_endian_complex128_little
put_endian_complex64_arm
put_endian_complex64_big
put_endian_complex64_little
put_endian_float32_arm
put_endian_float32_big
put_endian_float32_little
put_endian_float64_arm
put_endian_float64_big
put_endian_float64_little
put_ff
put_float32
put_float64
put_foffs
put_fs
put_here
put_heres
put_int16
put_int32
put_int64
put_int8
put_invalid
put_lincom1
put_lincom2
put_lincom_noin
put_linterp
put_linterp_noin
put_linterp_nomono
put_linterp_notab
put_linterp_reverse
put_mplex
put_multiply
put_null
put_off64
put_phase
put_phase_noin
put_polynom1
put_polynom2
put_polynom_noin
put_protect
put_rdonly
put_recip
put_recurse
put_repr
put_rofs
put_sbit
put_sf
put_ss
put_string
put_string_protect
put_type
put_uint16
put_uint32
put_uint64
put_window
put_zero
ref
ref_none
ref_two
repr_a
repr_float32
repr_float64
repr_i
repr_int16
repr_int32
repr_int64
repr_int8
repr_m
repr_r
repr_real_a
repr_real_i
repr_real_m
repr_real_r
repr_uint16
repr_uint32
repr_uint64
repr_uint8
seek64
seek_cur
seek_end
seek_foffs
seek_set
sie_get_big
sie_get_little
sie_move_from
sie_move_to
sie_nframes_big
sie_nframes_little
sie_put_big
sie_put_little
slim_get
slim_nframes
slim_put
spf
spf_alias
spf_alias_meta
spf_alias_missing
spf_divide
spf_lincom
spf_multiply
spf_polynom
spf_recip
spf_recurse
svlist
svlist_hidden
svlist_invalid
svlist_meta
svlist_meta_hidden
svlist_meta_invalid
tell
tell64
trunc
trunc_rdonly
trunc_rofs
unclude
unclude_del
unclude_move
version_0
version_0_write
version_1
version_1_write
version_2
version_2_write
version_3
version_3_write
version_4
version_4_write
version_5
version_5_strict
version_5_write
version_6
version_6_strict
version_6_write
version_7
version_7_strict
version_7_write
version_8
version_8_strict
version_8_write
version_9
version_9_strict
version_9_write
vlist
vlist_alias
vlist_hidden
vlist_invalid
vlist_meta
vlist_meta_hidden
vlist_meta_invalid
xz_get
xz_nframes
zzip_data
zzip_get
zzip_get_get
zzip_nframes
zzslim_get
zzslim_nframes
Modified: trunk/getdata/test/Makefile.am
===================================================================
--- trunk/getdata/test/Makefile.am 2012-02-15 00:09:19 UTC (rev 657)
+++ trunk/getdata/test/Makefile.am 2012-02-16 03:16:18 UTC (rev 658)
@@ -186,14 +186,15 @@
get_endian_float64_big get_endian_float64_little get_ff get_float32 \
get_float64 get_foffs get_fs get_here get_here_foffs get_heres \
get_int8 get_int16 get_int32 get_int64 get_invalid get_lincom1 \
- get_lincom2 get_lincom3 get_lincom_noin get_lincom_non get_linterp \
- get_linterp_noin get_linterp_notab get_linterp_sort get_mplex \
- get_mplex_lb get_multiply get_multiply_noin get_nonexistent get_null \
- $(GET_OFF64) get_phase get_phase_affix get_polynom get_polynom_noin \
- get_recip get_recip_const get_recurse get_rofs get_sbit get_sf \
- get_ss get_type get_uint16 get_uint32 get_uint64 get_window \
- get_window_clr get_window_ge get_window_gt get_window_le \
- get_window_lt get_window_ne get_window_set get_zero
+ get_lincom2 get_lincom3 get_lincom_noin get_lincom_non \
+ get_lincom_spf get_linterp get_linterp_noin get_linterp_notab \
+ get_linterp_sort get_mplex get_mplex_lb get_multiply \
+ get_multiply_noin get_nonexistent get_null $(GET_OFF64) get_phase \
+ get_phase_affix get_polynom get_polynom_noin get_recip \
+ get_recip_const get_recurse get_rofs get_sbit get_sf get_ss get_type \
+ get_uint16 get_uint32 get_uint64 get_window get_window_clr \
+ get_window_ge get_window_gt get_window_le get_window_lt \
+ get_window_ne get_window_set get_zero
GLOBAL_TESTS=global_name global_ref global_ref_empty global_ref_set
Added: trunk/getdata/test/get_lincom_spf.c
===================================================================
--- trunk/getdata/test/get_lincom_spf.c (rev 0)
+++ trunk/getdata/test/get_lincom_spf.c 2012-02-16 03:16:18 UTC (rev 658)
@@ -0,0 +1,82 @@
+/* Copyright (C) 2008-2011 D. V. Wiebe
+ *
+ ***************************************************************************
+ *
+ * This file is part of the GetData project.
+ *
+ * GetData is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * GetData is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with GetData; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+/* Attempt to read LINCOM */
+#include "test.h"
+
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <string.h>
+#include <errno.h>
+
+int main(void)
+{
+ const char *filedir = "dirfile";
+ const char *format = "dirfile/format";
+ const char *data = "dirfile/data";
+ const char *cata = "dirfile/cata";
+ const char *format_data = "lincom LINCOM 2 data 2 3 cata 1 0\n"
+ "data RAW UINT8 2\n"
+ "cata RAW UINT8 3\n";
+ unsigned char c[10];
+ unsigned char data_data[256];
+ int fd, n, error, r = 0;
+ DIRFILE *D;
+
+ memset(c, 0, 10);
+
+ rmdirfile();
+ mkdir(filedir, 0777);
+
+ for (fd = 0; fd < 256; ++fd)
+ data_data[fd] = (unsigned char)fd;
+
+ fd = open(format, O_CREAT | O_EXCL | O_WRONLY, 0666);
+ write(fd, format_data, strlen(format_data));
+ close(fd);
+
+ fd = open(data, O_CREAT | O_EXCL | O_WRONLY | O_BINARY, 0666);
+ write(fd, data_data, 256);
+ close(fd);
+
+ fd = open(cata, O_CREAT | O_EXCL | O_WRONLY | O_BINARY, 0666);
+ write(fd, data_data, 256);
+ close(fd);
+
+ D = gd_open(filedir, GD_RDONLY | GD_VERBOSE);
+ n = gd_getdata(D, "lincom", 5, 0, 5, 0, GD_UINT8, &c);
+ error = gd_error(D);
+
+ gd_close(D);
+
+ unlink(cata);
+ unlink(data);
+ unlink(format);
+ rmdir(filedir);
+
+ CHECKI(error, 0);
+ CHECKI(n, 10);
+ for (n = 0; n < 10; ++n)
+ CHECKUi(n, c[n], 38 + n * 7 / 2);
+
+ return r;
+}
Modified: trunk/getdata/test/trunc_rofs.c
===================================================================
--- trunk/getdata/test/trunc_rofs.c 2012-02-15 00:09:19 UTC (rev 657)
+++ trunk/getdata/test/trunc_rofs.c 2012-02-16 03:16:18 UTC (rev 658)
@@ -32,16 +32,19 @@
{
const char *filedir = "dirfile";
const char *format = "dirfile/format";
+ const char *data = "dirfile/data";
int error, r = 0;
DIRFILE *D;
rmdirfile();
mkdir(filedir, 0777);
close(open(format, O_CREAT | O_EXCL | O_WRONLY, 0666));
+ close(open(data, O_CREAT | O_EXCL | O_WRONLY, 0666));
chmod(filedir, 0555);
/* ensure filesystem honours read-onlyness */
- if (!unlink(format) || errno != EACCES) {
+ if (!unlink(data) || errno != EACCES) {
+ unlink(format);
rmdir(filedir);
return 77;
}
@@ -51,6 +54,7 @@
gd_discard(D);
chmod(filedir, 0777);
+ unlink(data);
unlink(format);
rmdir(filedir);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2012-02-15 00:09:28
|
Revision: 657
http://getdata.svn.sourceforge.net/getdata/?rev=657&view=rev
Author: ketiltrout
Date: 2012-02-15 00:09:19 +0000 (Wed, 15 Feb 2012)
Log Message:
-----------
Commit the correct file.
Added Paths:
-----------
trunk/getdata/test/put_zero.c
Removed Paths:
-------------
trunk/getdata/test/put_zero
Deleted: trunk/getdata/test/put_zero
===================================================================
--- trunk/getdata/test/put_zero 2012-02-14 05:55:25 UTC (rev 656)
+++ trunk/getdata/test/put_zero 2012-02-15 00:09:19 UTC (rev 657)
@@ -1,225 +0,0 @@
-#! /bin/sh
-
-# put_zero - temporary wrapper script for .libs/put_zero
-# Generated by libtool (GNU libtool) 2.4
-#
-# The put_zero program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of the build directory.
-# If it is, it will not operate correctly.
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
-fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-relink_command="(cd /home/dvw/getdata/trunk/getdata/test; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; LD_LIBRARY_PATH=/home/dvw/usr/lib; export LD_LIBRARY_PATH; PATH=/home/dvw/bin:/home/dvw/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/local/rsi/idl/bin:/usr/lib/java/bin:/usr/lib/kde4/libexec:/usr/lib/qt/bin:/usr/share/texmf/bin:.:/usr/local/rsi/idl/bin:/usr/lib/java/bin:/usr/lib/kde4/libexec:/usr/local/rsi/idl/bin:/usr/lib/java/bin:/usr/lib/kde4/libexec; export PATH; gcc -std=gnu99 -g -O2 -o \$progdir/\$file put_zero.o ../src/.libs/libgetdata.so -lbz2 /usr/lib/liblzma.so /usr/lib/libzzip.so -lz -lm -pthread -Wl,-rpath -Wl,/home/dvw/getdata/trunk/getdata/src/.libs)"
-
-# This environment variable determines our operation mode.
-if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then
- # install mode needs the following variables:
- generated_by_libtool_version='2.4'
- notinst_deplibs=' ../src/libgetdata.la'
-else
- # When we are sourced in execute mode, $file and $ECHO are already set.
- if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
- file="$0"
-
-# A function that is used when there is no print builtin or printf.
-func_fallback_echo ()
-{
- eval 'cat <<_LTECHO_EOF
-$1
-_LTECHO_EOF'
-}
- ECHO="printf %s\\n"
- fi
-
-# Very basic option parsing. These options are (a) specific to
-# the libtool wrapper, (b) are identical between the wrapper
-# /script/ and the wrapper /executable/ which is used only on
-# windows platforms, and (c) all begin with the string --lt-
-# (application programs are unlikely to have options which match
-# this pattern).
-#
-# There are only two supported options: --lt-debug and
-# --lt-dump-script. There is, deliberately, no --lt-help.
-#
-# The first argument to this parsing function should be the
-# script's ../libtool value, followed by no.
-lt_option_debug=
-func_parse_lt_options ()
-{
- lt_script_arg0=$0
- shift
- for lt_opt
- do
- case "$lt_opt" in
- --lt-debug) lt_option_debug=1 ;;
- --lt-dump-script)
- lt_dump_D=`$ECHO "X$lt_script_arg0" | /usr/bin/sed -e 's/^X//' -e 's%/[^/]*$%%'`
- test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=.
- lt_dump_F=`$ECHO "X$lt_script_arg0" | /usr/bin/sed -e 's/^X//' -e 's%^.*/%%'`
- cat "$lt_dump_D/$lt_dump_F"
- exit 0
- ;;
- --lt-*)
- $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2
- exit 1
- ;;
- esac
- done
-
- # Print the debug banner immediately:
- if test -n "$lt_option_debug"; then
- echo "put_zero:put_zero:${LINENO}: libtool wrapper (GNU libtool) 2.4" 1>&2
- fi
-}
-
-# Used when --lt-debug. Prints its arguments to stdout
-# (redirection is the responsibility of the caller)
-func_lt_dump_args ()
-{
- lt_dump_args_N=1;
- for lt_arg
- do
- $ECHO "put_zero:put_zero:${LINENO}: newargv[$lt_dump_args_N]: $lt_arg"
- lt_dump_args_N=`expr $lt_dump_args_N + 1`
- done
-}
-
-# Core function for launching the target application
-func_exec_program_core ()
-{
-
- if test -n "$lt_option_debug"; then
- $ECHO "put_zero:put_zero:${LINENO}: newargv[0]: $progdir/$program" 1>&2
- func_lt_dump_args ${1+"$@"} 1>&2
- fi
- exec "$progdir/$program" ${1+"$@"}
-
- $ECHO "$0: cannot exec $program $*" 1>&2
- exit 1
-}
-
-# A function to encapsulate launching the target application
-# Strips options in the --lt-* namespace from $@ and
-# launches target application with the remaining arguments.
-func_exec_program ()
-{
- for lt_wr_arg
- do
- case $lt_wr_arg in
- --lt-*) ;;
- *) set x "$@" "$lt_wr_arg"; shift;;
- esac
- shift
- done
- func_exec_program_core ${1+"$@"}
-}
-
- # Parse options
- func_parse_lt_options "$0" ${1+"$@"}
-
- # Find the directory that this script lives in.
- thisdir=`$ECHO "$file" | /usr/bin/sed 's%/[^/]*$%%'`
- test "x$thisdir" = "x$file" && thisdir=.
-
- # Follow symbolic links until we get to the real thisdir.
- file=`ls -ld "$file" | /usr/bin/sed -n 's/.*-> //p'`
- while test -n "$file"; do
- destdir=`$ECHO "$file" | /usr/bin/sed 's%/[^/]*$%%'`
-
- # If there was a directory component, then change thisdir.
- if test "x$destdir" != "x$file"; then
- case "$destdir" in
- [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;;
- *) thisdir="$thisdir/$destdir" ;;
- esac
- fi
-
- file=`$ECHO "$file" | /usr/bin/sed 's%^.*/%%'`
- file=`ls -ld "$thisdir/$file" | /usr/bin/sed -n 's/.*-> //p'`
- done
-
- # Usually 'no', except on cygwin/mingw when embedded into
- # the cwrapper.
- WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no
- if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then
- # special case for '.'
- if test "$thisdir" = "."; then
- thisdir=`pwd`
- fi
- # remove .libs from thisdir
- case "$thisdir" in
- *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /usr/bin/sed 's%[\\/][^\\/]*$%%'` ;;
- .libs ) thisdir=. ;;
- esac
- fi
-
- # Try to get the absolute directory name.
- absdir=`cd "$thisdir" && pwd`
- test -n "$absdir" && thisdir="$absdir"
-
- program=lt-'put_zero'
- progdir="$thisdir/.libs"
-
- if test ! -f "$progdir/$program" ||
- { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /usr/bin/sed 1q`; \
- test "X$file" != "X$progdir/$program"; }; then
-
- file="$$-$program"
-
- if test ! -d "$progdir"; then
- mkdir "$progdir"
- else
- rm -f "$progdir/$file"
- fi
-
- # relink executable if necessary
- if test -n "$relink_command"; then
- if relink_command_output=`eval $relink_command 2>&1`; then :
- else
- printf %s\n "$relink_command_output" >&2
- rm -f "$progdir/$file"
- exit 1
- fi
- fi
-
- mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null ||
- { rm -f "$progdir/$program";
- mv -f "$progdir/$file" "$progdir/$program"; }
- rm -f "$progdir/$file"
- fi
-
- if test -f "$progdir/$program"; then
- if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
- # Run the actual program with our arguments.
- func_exec_program ${1+"$@"}
- fi
- else
- # The program doesn't exist.
- $ECHO "$0: error: \`$progdir/$program' does not exist" 1>&2
- $ECHO "This script is just a wrapper for $program." 1>&2
- $ECHO "See the libtool documentation for more information." 1>&2
- exit 1
- fi
-fi
Added: trunk/getdata/test/put_zero.c
===================================================================
--- trunk/getdata/test/put_zero.c (rev 0)
+++ trunk/getdata/test/put_zero.c 2012-02-15 00:09:19 UTC (rev 657)
@@ -0,0 +1,61 @@
+/* Copyright (C) 2012 D. V. Wiebe
+ *
+ ***************************************************************************
+ *
+ * This file is part of the GetData project.
+ *
+ * GetData is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * GetData is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with GetData; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+#include "test.h"
+
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdio.h>
+
+int main(void)
+{
+ const char *filedir = "dirfile";
+ const char *format = "dirfile/format";
+ const char *data = "dirfile/data";
+ const char *format_data = "data RAW UINT16 8\n";
+ struct stat buf;
+ int fd, i, n, error, r = 0;
+ DIRFILE *D;
+
+ rmdirfile();
+ mkdir(filedir, 0777);
+
+ fd = open(format, O_CREAT | O_EXCL | O_WRONLY, 0666);
+ write(fd, format_data, strlen(format_data));
+ close(fd);
+
+ D = gd_open(filedir, GD_RDWR | GD_UNENCODED | GD_VERBOSE);
+ n = gd_putdata(D, "data", 0, 0, 0, 0, GD_UINT8, NULL);
+ error = gd_error(D);
+
+ gd_close(D);
+
+ unlink(data);
+ unlink(format);
+ rmdir(filedir);
+
+ CHECKI(n,0);
+ CHECKI(error, 0);
+
+ return r;
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2012-02-14 05:55:32
|
Revision: 656
http://getdata.svn.sourceforge.net/getdata/?rev=656&view=rev
Author: ketiltrout
Date: 2012-02-14 05:55:25 +0000 (Tue, 14 Feb 2012)
Log Message:
-----------
Return success instead of GD_INTERNAL_ERROR from putdata if num_frames == 0 and num_samples == 0.
Modified Paths:
--------------
trunk/getdata/ChangeLog
trunk/getdata/src/putdata.c
trunk/getdata/test/Makefile.am
Added Paths:
-----------
trunk/getdata/test/put_zero
Modified: trunk/getdata/ChangeLog
===================================================================
--- trunk/getdata/ChangeLog 2012-02-08 01:09:18 UTC (rev 655)
+++ trunk/getdata/ChangeLog 2012-02-14 05:55:25 UTC (rev 656)
@@ -1,3 +1,6 @@
+2012-02-14 D. V. Wiebe <ge...@ke...> svn:654
+ * src/putdata.c (gd_putdata): Return early if num_samp == 0.
+
2012-02-01 D. V. Wiebe <ge...@ke...> svn:652
* configure.ac: Figure out the directory separator (ie. '/' on POSIX).
Modified: trunk/getdata/src/putdata.c
===================================================================
--- trunk/getdata/src/putdata.c 2012-02-08 01:09:18 UTC (rev 655)
+++ trunk/getdata/src/putdata.c 2012-02-14 05:55:25 UTC (rev 656)
@@ -843,6 +843,12 @@
return 0;
}
+ /* the easy case */
+ if (num_samp == 0) {
+ dreturn("%u", 0);
+ return 0;
+ }
+
n_wrote = _GD_DoFieldOut(D, entry, repr, first_samp, num_samp, data_type,
data_in);
Modified: trunk/getdata/test/Makefile.am
===================================================================
--- trunk/getdata/test/Makefile.am 2012-02-08 01:09:18 UTC (rev 655)
+++ trunk/getdata/test/Makefile.am 2012-02-14 05:55:25 UTC (rev 656)
@@ -304,7 +304,7 @@
put_polynom2 put_polynom_noin put_protect put_rdonly put_recip \
put_recurse put_repr put_rofs put_sbit put_sf put_ss put_string \
put_string_protect put_type put_uint16 put_uint32 put_uint64 \
- put_window
+ put_window put_zero
REF_TESTS=ref ref_none ref_two
Added: trunk/getdata/test/put_zero
===================================================================
--- trunk/getdata/test/put_zero (rev 0)
+++ trunk/getdata/test/put_zero 2012-02-14 05:55:25 UTC (rev 656)
@@ -0,0 +1,225 @@
+#! /bin/sh
+
+# put_zero - temporary wrapper script for .libs/put_zero
+# Generated by libtool (GNU libtool) 2.4
+#
+# The put_zero program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command="(cd /home/dvw/getdata/trunk/getdata/test; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; LD_LIBRARY_PATH=/home/dvw/usr/lib; export LD_LIBRARY_PATH; PATH=/home/dvw/bin:/home/dvw/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/local/rsi/idl/bin:/usr/lib/java/bin:/usr/lib/kde4/libexec:/usr/lib/qt/bin:/usr/share/texmf/bin:.:/usr/local/rsi/idl/bin:/usr/lib/java/bin:/usr/lib/kde4/libexec:/usr/local/rsi/idl/bin:/usr/lib/java/bin:/usr/lib/kde4/libexec; export PATH; gcc -std=gnu99 -g -O2 -o \$progdir/\$file put_zero.o ../src/.libs/libgetdata.so -lbz2 /usr/lib/liblzma.so /usr/lib/libzzip.so -lz -lm -pthread -Wl,-rpath -Wl,/home/dvw/getdata/trunk/getdata/src/.libs)"
+
+# This environment variable determines our operation mode.
+if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then
+ # install mode needs the following variables:
+ generated_by_libtool_version='2.4'
+ notinst_deplibs=' ../src/libgetdata.la'
+else
+ # When we are sourced in execute mode, $file and $ECHO are already set.
+ if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+ file="$0"
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+ ECHO="printf %s\\n"
+ fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ which is used only on
+# windows platforms, and (c) all begin with the string --lt-
+# (application programs are unlikely to have options which match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's ../libtool value, followed by no.
+lt_option_debug=
+func_parse_lt_options ()
+{
+ lt_script_arg0=$0
+ shift
+ for lt_opt
+ do
+ case "$lt_opt" in
+ --lt-debug) lt_option_debug=1 ;;
+ --lt-dump-script)
+ lt_dump_D=`$ECHO "X$lt_script_arg0" | /usr/bin/sed -e 's/^X//' -e 's%/[^/]*$%%'`
+ test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=.
+ lt_dump_F=`$ECHO "X$lt_script_arg0" | /usr/bin/sed -e 's/^X//' -e 's%^.*/%%'`
+ cat "$lt_dump_D/$lt_dump_F"
+ exit 0
+ ;;
+ --lt-*)
+ $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+
+ # Print the debug banner immediately:
+ if test -n "$lt_option_debug"; then
+ echo "put_zero:put_zero:${LINENO}: libtool wrapper (GNU libtool) 2.4" 1>&2
+ fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+ lt_dump_args_N=1;
+ for lt_arg
+ do
+ $ECHO "put_zero:put_zero:${LINENO}: newargv[$lt_dump_args_N]: $lt_arg"
+ lt_dump_args_N=`expr $lt_dump_args_N + 1`
+ done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+
+ if test -n "$lt_option_debug"; then
+ $ECHO "put_zero:put_zero:${LINENO}: newargv[0]: $progdir/$program" 1>&2
+ func_lt_dump_args ${1+"$@"} 1>&2
+ fi
+ exec "$progdir/$program" ${1+"$@"}
+
+ $ECHO "$0: cannot exec $program $*" 1>&2
+ exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from $@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+ for lt_wr_arg
+ do
+ case $lt_wr_arg in
+ --lt-*) ;;
+ *) set x "$@" "$lt_wr_arg"; shift;;
+ esac
+ shift
+ done
+ func_exec_program_core ${1+"$@"}
+}
+
+ # Parse options
+ func_parse_lt_options "$0" ${1+"$@"}
+
+ # Find the directory that this script lives in.
+ thisdir=`$ECHO "$file" | /usr/bin/sed 's%/[^/]*$%%'`
+ test "x$thisdir" = "x$file" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=`ls -ld "$file" | /usr/bin/sed -n 's/.*-> //p'`
+ while test -n "$file"; do
+ destdir=`$ECHO "$file" | /usr/bin/sed 's%/[^/]*$%%'`
+
+ # If there was a directory component, then change thisdir.
+ if test "x$destdir" != "x$file"; then
+ case "$destdir" in
+ [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;;
+ *) thisdir="$thisdir/$destdir" ;;
+ esac
+ fi
+
+ file=`$ECHO "$file" | /usr/bin/sed 's%^.*/%%'`
+ file=`ls -ld "$thisdir/$file" | /usr/bin/sed -n 's/.*-> //p'`
+ done
+
+ # Usually 'no', except on cygwin/mingw when embedded into
+ # the cwrapper.
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no
+ if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then
+ # special case for '.'
+ if test "$thisdir" = "."; then
+ thisdir=`pwd`
+ fi
+ # remove .libs from thisdir
+ case "$thisdir" in
+ *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /usr/bin/sed 's%[\\/][^\\/]*$%%'` ;;
+ .libs ) thisdir=. ;;
+ esac
+ fi
+
+ # Try to get the absolute directory name.
+ absdir=`cd "$thisdir" && pwd`
+ test -n "$absdir" && thisdir="$absdir"
+
+ program=lt-'put_zero'
+ progdir="$thisdir/.libs"
+
+ if test ! -f "$progdir/$program" ||
+ { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /usr/bin/sed 1q`; \
+ test "X$file" != "X$progdir/$program"; }; then
+
+ file="$$-$program"
+
+ if test ! -d "$progdir"; then
+ mkdir "$progdir"
+ else
+ rm -f "$progdir/$file"
+ fi
+
+ # relink executable if necessary
+ if test -n "$relink_command"; then
+ if relink_command_output=`eval $relink_command 2>&1`; then :
+ else
+ printf %s\n "$relink_command_output" >&2
+ rm -f "$progdir/$file"
+ exit 1
+ fi
+ fi
+
+ mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null ||
+ { rm -f "$progdir/$program";
+ mv -f "$progdir/$file" "$progdir/$program"; }
+ rm -f "$progdir/$file"
+ fi
+
+ if test -f "$progdir/$program"; then
+ if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+ # Run the actual program with our arguments.
+ func_exec_program ${1+"$@"}
+ fi
+ else
+ # The program doesn't exist.
+ $ECHO "$0: error: \`$progdir/$program' does not exist" 1>&2
+ $ECHO "This script is just a wrapper for $program." 1>&2
+ $ECHO "See the libtool documentation for more information." 1>&2
+ exit 1
+ fi
+fi
Property changes on: trunk/getdata/test/put_zero
___________________________________________________________________
Added: svn:executable
+ *
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2012-02-08 01:09:24
|
Revision: 655
http://getdata.svn.sourceforge.net/getdata/?rev=655&view=rev
Author: ketiltrout
Date: 2012-02-08 01:09:18 +0000 (Wed, 08 Feb 2012)
Log Message:
-----------
svn:ignore
Property Changed:
----------------
trunk/getdata/bindings/f77/test/
Property changes on: trunk/getdata/bindings/f77/test
___________________________________________________________________
Modified: svn:ignore
- .deps
.libs
*.exe
Makefile
Makefile.in
gdfget
gdcopn
big_test
big_test95
+ .deps
.libs
*.exe
Makefile
Makefile.in
gdfget
gdcopn
big_test
big_test95
test_getdata.f
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2012-02-08 01:08:46
|
Revision: 654
http://getdata.svn.sourceforge.net/getdata/?rev=654&view=rev
Author: ketiltrout
Date: 2012-02-08 01:08:39 +0000 (Wed, 08 Feb 2012)
Log Message:
-----------
rm debugging macro.
Modified Paths:
--------------
trunk/getdata/src/common.c
Modified: trunk/getdata/src/common.c
===================================================================
--- trunk/getdata/src/common.c 2012-02-01 23:40:38 UTC (rev 653)
+++ trunk/getdata/src/common.c 2012-02-08 01:08:39 UTC (rev 654)
@@ -1129,7 +1129,6 @@
/* the thing doesn't exist. I guess that means we're done;
* copy the rest of the work buffer onto the resul and call it a
* day. */
- dwatch("%s", res);
if (*end) {
len = strlen(end) + 1;
if (res_len + len >= res_size) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2012-02-01 23:40:44
|
Revision: 653
http://getdata.svn.sourceforge.net/getdata/?rev=653&view=rev
Author: ketiltrout
Date: 2012-02-01 23:40:38 +0000 (Wed, 01 Feb 2012)
Log Message:
-----------
More path fixing.
Modified Paths:
--------------
trunk/getdata/src/common.c
trunk/getdata/src/open.c
trunk/getdata/test/test.h
Modified: trunk/getdata/src/common.c
===================================================================
--- trunk/getdata/src/common.c 2012-02-01 19:05:51 UTC (rev 652)
+++ trunk/getdata/src/common.c 2012-02-01 23:40:38 UTC (rev 653)
@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2005 C. Barth Netterfield
- * Copyright (C) 2005-2011 D. V. Wiebe
+ * Copyright (C) 2005-2012 D. V. Wiebe
*
***************************************************************************
*
@@ -1180,11 +1180,11 @@
/* now we have to start all over again */
ptr = target;
if (_GD_AbsPath(target)) {
- _GD_Root(res, target[0]);
- res_len = GD_ABSPATH_LEN;
- ptr += GD_ABSPATH_LEN;
- slen -= GD_ABSPATH_LEN;
- } else if (res_len > 1) {
+ _GD_Root(res, target, res_root);
+ res_len = res_root;
+ ptr += res_root;
+ slen -= res_root;
+ } else if (res_len > res_root) {
/* strip the symlink name from res */
for (ptr = res + res_len - 1; *ptr != GD_DIRSEP; --ptr)
;
Modified: trunk/getdata/src/open.c
===================================================================
--- trunk/getdata/src/open.c 2012-02-01 19:05:51 UTC (rev 652)
+++ trunk/getdata/src/open.c 2012-02-01 23:40:38 UTC (rev 653)
@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2005 C. Barth Netterfield
- * Copyright (C) 2005-2011 D. V. Wiebe
+ * Copyright (C) 2005-2012 D. V. Wiebe
*
***************************************************************************
*
@@ -381,6 +381,7 @@
#ifndef GD_NO_DIR_OPEN
close(dirfd);
#endif
+ D->name = NULL; /* so a subsequent gd_discard() doesn't go awry. */
dreturn("%p", D);
return D; /* errors have already been set */
}
Modified: trunk/getdata/test/test.h
===================================================================
--- trunk/getdata/test/test.h 2012-02-01 19:05:51 UTC (rev 652)
+++ trunk/getdata/test/test.h 2012-02-01 23:40:38 UTC (rev 653)
@@ -34,7 +34,7 @@
#ifdef _MSC_VER
#define rmdirfile() system("rmdir /q/s dirfile");
#else
-#define rmdirfile() system("rm -rf dirfile");
+#define rmdirfile() chmod("dirfile", 0755); system("rm -rf dirfile");
#endif
/* path munging for WIN32/64 */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2012-02-01 19:05:58
|
Revision: 652
http://getdata.svn.sourceforge.net/getdata/?rev=652&view=rev
Author: ketiltrout
Date: 2012-02-01 19:05:51 +0000 (Wed, 01 Feb 2012)
Log Message:
-----------
Windows path malarkey.
Modified Paths:
--------------
trunk/getdata/ChangeLog
trunk/getdata/bindings/cxx/test/big_test.cpp
trunk/getdata/bindings/f77/test/Makefile.am
trunk/getdata/bindings/f77/test/big_test.f
trunk/getdata/bindings/f77/test/big_test95.f90
trunk/getdata/configure.ac
trunk/getdata/src/common.c
trunk/getdata/src/internal.h
trunk/getdata/src/open.c
trunk/getdata/src/spf.c
trunk/getdata/test/file.c
trunk/getdata/test/fragment_name.c
Added Paths:
-----------
trunk/getdata/bindings/f77/test/test_getdata.f.in
Modified: trunk/getdata/ChangeLog
===================================================================
--- trunk/getdata/ChangeLog 2012-01-30 00:27:51 UTC (rev 651)
+++ trunk/getdata/ChangeLog 2012-02-01 19:05:51 UTC (rev 652)
@@ -1,3 +1,21 @@
+2012-02-01 D. V. Wiebe <ge...@ke...> svn:652
+ * configure.ac: Figure out the directory separator (ie. '/' on POSIX).
+
+ * src/open.c (_GD_CreateDirfile): Handle DIRSEP.
+ * src/internal.h (_GD_Root): Added.
+ * src/common.c (_GD_CanonicalPath): Handle WIN32/DOS paths.
+
+ * src/open.c (gd_cbopen): Temporarily store the full path in D->name so that
+ _GD_CreateDirfile can use it when needed.
+
+ * src/spf.c (_GD_GetSPF): De const-ify E.
+
+ * src/common.c (_GD_FindField): Fix buffer length calculation.
+
+ * test/file.c test/fragment_name.c bindings/cxx/test/big_test.cpp
+ bindings/f77/test/big_test.f bindings/f77/test/big_test95.f90: Handle DIRSEP.
+ * bindings/f77/test/test_getdata.f.in: Added.
+
2012-01-18 D. V. Wiebe <ge...@ke...> svn:650
* src/getdata.h.in src/internal.h: Define GD_ENC_ZZSLIM GD_ZZSLIM_ENCODED.
* src/zzslim.c: Added.
Modified: trunk/getdata/bindings/cxx/test/big_test.cpp
===================================================================
--- trunk/getdata/bindings/cxx/test/big_test.cpp 2012-01-30 00:27:51 UTC (rev 651)
+++ trunk/getdata/bindings/cxx/test/big_test.cpp 2012-02-01 19:05:51 UTC (rev 652)
@@ -32,6 +32,7 @@
#include <unistd.h>
#include <iostream>
#include <math.h>
+#include <stdio.h>
#if MKDIR_NO_MODE
#ifdef HAVE__MKDIR
@@ -97,8 +98,8 @@
ne++; cerr << "s(" << i << ")[" << t << "] = \"" << (v) << "\"" << endl; }
#define CHECK_EOSTRING(t,v,g) \
- if (strcmp((v) + strlen(v) - sizeof(g) + 1, (g))) { ne++; cerr << "s[" << t << "] = \"" << (v) << "\"" \
- << endl; }
+ if (strcmp((v) + strlen(v) - strlen(g), (g))) { ne++; cerr << "s[" << t << "] = \"" << (v) << \
+ "\", expected ...\"" << g << "\"" << endl; }
#define CHECK_COMPLEX2(t,m,v,g) \
if (abs((v) - (g)) > 1e-10) { \
@@ -605,7 +606,8 @@
// 39: Fragment check
frag = d->Fragment(0);
CHECK_OK(39);
- CHECK_EOSTRING(39,frag->Name(), "dirfile/format");
+ sprintf(buf, "dirfile%cformat", GD_DIRSEP);
+ CHECK_EOSTRING(39,frag->Name(), buf);
delete frag;
// 40: Dirfile::NFragments check
@@ -993,7 +995,8 @@
// 84: RawEntry::FileName check
str = rep->FileName();
CHECK_OK(84);
- CHECK_EOSTRING(84,str, "dirfile/new1");
+ sprintf(buf, "dirfile%cnew1", GD_DIRSEP);
+ CHECK_EOSTRING(84,str, buf);
delete rep;
// 85: Dirfile::Reference check
@@ -1005,7 +1008,7 @@
// 135: Dirfile::ReferenceFilename check
str = d->ReferenceFilename();
CHECK_OK(135);
- CHECK_EOSTRING(135,str, "dirfile/new1");
+ CHECK_EOSTRING(135,str, buf);
// 87: Fragment::SetEncoding check
frag->SetEncoding(SlimEncoding,0);
Modified: trunk/getdata/bindings/f77/test/Makefile.am
===================================================================
--- trunk/getdata/bindings/f77/test/Makefile.am 2012-01-30 00:27:51 UTC (rev 651)
+++ trunk/getdata/bindings/f77/test/Makefile.am 2012-02-01 19:05:51 UTC (rev 652)
@@ -40,6 +40,8 @@
F95TESTS=big_test95
endif
+BUILT_SOUCES = test_getdata.f
+
FFLAGS += -I.. $(F77_WALL) $(F77_WEXTRA) $(F77_ASSUME)
FCFLAGS += -I.. $(F77_WALL) $(FC_WEXTRA) $(FC_ASSUME)
F95LDADD=../libf95getdata.la $(F77LDADD)
Modified: trunk/getdata/bindings/f77/test/big_test.f
===================================================================
--- trunk/getdata/bindings/f77/test/big_test.f 2012-01-30 00:27:51 UTC (rev 651)
+++ trunk/getdata/bindings/f77/test/big_test.f 2012-02-01 19:05:51 UTC (rev 652)
@@ -169,6 +169,7 @@
PROGRAM BIGTST
INCLUDE "getdata.f"
+ INCLUDE "test_getdata.f"
CHARACTER*12 fildir
PARAMETER (fildir = 'test_dirfile')
@@ -725,7 +726,7 @@
CALL CHKEOK(ne, 39, d)
CALL CHKINT(ne, 39, l, plen)
- CALL CHKEOS(ne, 39, path, 'test_dirfile/format')
+ CALL CHKEOS(ne, 39, path, 'test_dirfile'//DIRSEP//'format')
C 40: GDNFRG check
CALL GDNFRG(n, d)
@@ -1287,7 +1288,7 @@
CALL GDRWFN(path, l, d, "data", 4)
CALL CHKEOK(ne, 84, d)
CALL CHKINT(ne, 84, l, plen)
- CALL CHKEOS(ne, 84, path, 'test_dirfile/data')
+ CALL CHKEOS(ne, 84, path, 'test_dirfile'//DIRSEP//'data')
C 85: GDREFE check
l = slen
Modified: trunk/getdata/bindings/f77/test/big_test95.f90
===================================================================
--- trunk/getdata/bindings/f77/test/big_test95.f90 2012-01-30 00:27:51 UTC (rev 651)
+++ trunk/getdata/bindings/f77/test/big_test95.f90 2012-02-01 19:05:51 UTC (rev 652)
@@ -188,6 +188,7 @@
program big_test
use getdata
+ include "test_getdata.f"
character (len=*), parameter :: fildir = 'test95_dirfile'
character (len=*), parameter :: frmat = 'test95_dirfile/format'
character (len=*), parameter :: frm2 = 'test95_dirfile/form2'
@@ -892,7 +893,7 @@
! 39: fgd_fragmentname check
str = fgd_fragmentname(d, 0)
call check_ok(ne, 39, d)
- call check_eos(ne, 39, str, 'test95_dirfile/format')
+ call check_eos(ne, 39, str, 'test95_dirfile'//DIRSEP//'format')
! 40: fgd_nfragments check
n = fgd_nfragments(d)
@@ -1482,7 +1483,7 @@
! 84: fgd_raw_filename check
str = fgd_raw_filename(d, "data")
call check_ok(ne, 84, d)
- call check_eos(ne, 84, str, 'test95_dirfile/data')
+ call check_eos(ne, 84, str, 'test95_dirfile'//DIRSEP//'data')
! 85: fgd_reference check
str = fgd_reference(d, "new1")
Added: trunk/getdata/bindings/f77/test/test_getdata.f.in
===================================================================
--- trunk/getdata/bindings/f77/test/test_getdata.f.in (rev 0)
+++ trunk/getdata/bindings/f77/test/test_getdata.f.in 2012-02-01 19:05:51 UTC (rev 652)
@@ -0,0 +1,2 @@
+ CHARACTER*1 DIRSEP
+ PARAMETER (DIRSEP="@GD_FDIRSEP@")
Modified: trunk/getdata/configure.ac
===================================================================
--- trunk/getdata/configure.ac 2012-01-30 00:27:51 UTC (rev 651)
+++ trunk/getdata/configure.ac 2012-02-01 19:05:51 UTC (rev 652)
@@ -322,6 +322,17 @@
esac
AC_MSG_RESULT([$gd_unaligned_ok])
+AC_MSG_CHECKING([the directory separator])
+case "${host}" in
+ *-*-djgpp|*-*-mingw32) GD_FDIRSEP=\\; GD_DIRSEP=\\\\ ;;
+ *) GD_FDIRSEP=/; GD_DIRSEP=/ ;;
+esac
+AC_SUBST([GD_FDIRSEP])
+AC_SUBST([GD_DIRSEP])
+AC_DEFINE_UNQUOTED([GD_DIRSEP], ['$GD_DIRSEP'],
+ [ The separator between directory elements ])
+AC_MSG_RESULT([$GD_FDIRSEP])
+
echo
echo "*** Checking C compiler characteristics"
echo
@@ -934,6 +945,7 @@
AC_CONFIG_FILES([bindings/cxx/test/Makefile])
AC_CONFIG_FILES([bindings/f77/Makefile])
AC_CONFIG_FILES([bindings/f77/test/Makefile])
+AC_CONFIG_FILES([bindings/f77/test/test_getdata.f])
AC_CONFIG_FILES([bindings/idl/Makefile])
AC_CONFIG_FILES([bindings/idl/makedlm.sh])
AC_CONFIG_FILES([bindings/idl/test/Makefile])
Modified: trunk/getdata/src/common.c
===================================================================
--- trunk/getdata/src/common.c 2012-01-30 00:27:51 UTC (rev 651)
+++ trunk/getdata/src/common.c 2012-02-01 19:05:51 UTC (rev 652)
@@ -146,7 +146,7 @@
if (E && E->field_type == GD_ALIAS_ENTRY && E->e->entry[0]) {
size_t plen = strlen(E->e->entry[0]->field);
- new_code = malloc(plen + strlen(ptr));
+ new_code = malloc(plen + strlen(ptr) + 2);
if (new_code) {
strcpy(new_code, E->e->entry[0]->field);
new_code[plen] = '/';
@@ -951,7 +951,7 @@
#endif
/* we only get here in the early stages of opening a dirfile */
- dreturn("%p", D->name);
+ dreturn("\"%s\"", D->name);
return D->name;
}
@@ -960,20 +960,23 @@
* path (car) has already been canonicalised */
char *_GD_CanonicalPath(const char *car, const char *cdr)
{
- int last_element = 0, loop_count = 0;
- size_t res_len, res_size, len;
+ int last_element = 0;
+#if defined HAVE_READLINK && defined HAVE_LSTAT64
+ int loop_count = 0;
+#endif
+ size_t res_len, res_root, res_size, len;
char *res = NULL, *ptr, *work, *cur, *end;
dtrace("\"%s\", \"%s\"", car, cdr);
if (car && !_GD_AbsPath(cdr)) {
- if (car[0] != '/') {
+ if (!_GD_AbsPath(car)) {
/* car is not abosulte -- don't bother trying to do anything fancy */
res = malloc(strlen(car) + strlen(cdr) + 2);
if (res == NULL) {
dreturn("%p", NULL);
return NULL;
}
- sprintf(res, "%s/%s", car, cdr);
+ sprintf(res, "%s%c%s", car, GD_DIRSEP, cdr);
dreturn("%s", res);
return res;
}
@@ -985,6 +988,7 @@
return NULL;
}
res_size = (res_len = strlen(car)) + 1;
+ res_root = _GD_RootLen(res);
cur = work = strdup(cdr);
if (work == NULL) {
@@ -992,24 +996,23 @@
dreturn("%p", NULL);
return NULL;
}
- } else if (cdr[0] == '/') {
+ } else if (_GD_AbsPath(cdr)) {
/* cdr is absolute: make res "/" and copy cdr relative to / into work;
* ignore car */
- res_len = 1;
res = (char*)malloc(res_size = PATH_MAX);
if (res == NULL) {
dreturn("%p", NULL);
return NULL;
}
- res[0] = '/';
- res[1] = '\0';
+ _GD_Root(res, cdr, res_root);
+ res_len = res_root;
- if (cdr[0] == '/' && cdr[1] == '\0') {
+ if (cdr[res_len] == '\0') {
dreturn("\"%s\"", res);
return res;
}
- cur = work = strdup(cdr + 1);
+ cur = work = strdup(cdr + res_len);
if (work == NULL) {
free(res);
dreturn("%p", NULL);
@@ -1039,7 +1042,7 @@
return NULL;
}
res[0] = '\0';
- res_len = 0;
+ res_root = res_len = 0;
} else {
if ((len = strlen(work) + 2 + strlen(cdr)) < PATH_MAX) {
ptr = (char*)realloc(work, len);
@@ -1052,17 +1055,16 @@
work = ptr;
}
ptr = work + strlen(work);
- *(ptr++) = '/';
+ *(ptr++) = GD_DIRSEP;
strcpy(ptr, cdr);
- if (work[0] == '/') {
- res[0] = '/';
- res[1] = '\0';
- res_len = 1;
- cur = work + 1;
+ if (_GD_AbsPath(work)) {
+ _GD_Root(res, work, res_root);
+ res_len = res_root;
+ cur = work + res_len;
} else {
res[0] = '\0';
- res_len = 0;
+ res_root = res_len = 0;
cur = work;
}
}
@@ -1070,8 +1072,8 @@
/* now step through work, building up res as appropriate */
for (end = cur ; !last_element; cur = end) {
- /* look for the next '/' or NUL */
- for (; *end != '\0' && *end != '/'; ++end)
+ /* look for the next GD_DIRSEP or NUL */
+ for (; *end != '\0' && *end != GD_DIRSEP; ++end)
;
/* end of string */
@@ -1089,10 +1091,11 @@
/* discard . */
continue;
} else if (cur[0] == '.' && cur[1] == '.' && cur[2] == '\0') {
- /* don't strip the leading '/' */
- if (res_len > 1) {
- /* find the last '/', but don't strip the leading '/' */
- for(ptr = res + res_len - 1; *ptr != '/' && ptr > res + 1; --ptr)
+ /* don't strip the leading GD_DIRSEP */
+ if (res_len > res_root) {
+ /* find the last GD_DIRSEP, but don't strip the leading GD_DIRSEP */
+ for(ptr = res + res_len - 1; *ptr != GD_DIRSEP && ptr > res + res_root;
+ --ptr)
;
/* strip the .. if possible, otherwise append it */
@@ -1112,8 +1115,8 @@
}
res = ptr;
}
- if (res_len > 1 && res[res_len - 1] != '/')
- res[res_len++] = '/';
+ if (res_len > 1 && res[res_len - 1] != GD_DIRSEP)
+ res[res_len++] = GD_DIRSEP;
strcpy(res + res_len, cur);
res_len += len - 1;
#if defined HAVE_READLINK && defined HAVE_LSTAT64
@@ -1139,7 +1142,7 @@
}
res = ptr;
}
- res[res_len++] = '/';
+ res[res_len++] = GD_DIRSEP;
strcpy(res + res_len, end);
res_len += len - 1;
}
@@ -1176,14 +1179,14 @@
/* now we have to start all over again */
ptr = target;
- if (target[0] == '/') {
- res[1] = '\0';
- res_len = 1;
- ptr++;
- slen--;
+ if (_GD_AbsPath(target)) {
+ _GD_Root(res, target[0]);
+ res_len = GD_ABSPATH_LEN;
+ ptr += GD_ABSPATH_LEN;
+ slen -= GD_ABSPATH_LEN;
} else if (res_len > 1) {
/* strip the symlink name from res */
- for (ptr = res + res_len - 1; *ptr != '/'; --ptr)
+ for (ptr = res + res_len - 1; *ptr != GD_DIRSEP; --ptr)
;
*(ptr + 1) = '\0';
res_len = res - ptr + 1;
@@ -1200,10 +1203,10 @@
return NULL;
}
} else {
- char slash[2] = "/";
+ char slash[2] = { GD_DIRSEP, 0 };
len = strlen(end) + slen + 2;
- if (*(ptr + slen - 1) == '/') {
+ if (*(ptr + slen - 1) == GD_DIRSEP) {
slash[0] = '\0';
len--;
}
@@ -1225,7 +1228,9 @@
}
}
+#if defined HAVE_READLINK && defined HAVE_LSTAT64
_GD_CanonicalPath_DONE:
+#endif
free(work);
/* trim */
@@ -1262,7 +1267,7 @@
if (dir) {
filepath = (char*)_GD_Malloc(D, strlen(dir) + strlen(name) + 2);
if (filepath)
- sprintf(filepath, "%s/%s", dir, name);
+ sprintf(filepath, "%s%c%s", dir, GD_DIRSEP, name);
} else
filepath = _GD_Strdup(D, name);
}
@@ -1292,7 +1297,6 @@
unsigned int i;
char *path, *dir = NULL;
void *ptr;
- int abs = _GD_AbsPath(name);
dtrace("%p, %i, \"%s\"", D, dirfd, name);
@@ -1336,7 +1340,7 @@
D->dir[D->ndir].fd = D->ndir;
free(path);
#else
- if (abs) {
+ if (_GD_AbsPath(name)) {
D->dir[D->ndir].fd = open(dir, O_RDONLY);
} else {
free(path);
Modified: trunk/getdata/src/internal.h
===================================================================
--- trunk/getdata/src/internal.h 2012-01-30 00:27:51 UTC (rev 651)
+++ trunk/getdata/src/internal.h 2012-02-01 19:05:51 UTC (rev 652)
@@ -558,11 +558,40 @@
((uint64_t)(x) >> 56)))
#endif
-/* returns true if s is an absolute path */
+/* path malarkey */
#if defined _WIN32 || defined _WIN64
-# define _GD_AbsPath(s) ((s)[0] != '\0' && (s)[1] == ':')
+# define _GD_AbsPath(s) ((s)[0] == '/' || (s)[0] == GD_DIRSEP || \
+ ((s)[0] != '\0' && (s)[1] == ':'))
+# define _GD_Root(s,d,l) \
+ do { \
+ if ((d)[0] == '/' || (d)[0] == GD_DIRSEP) { \
+ (s)[0] = (d)[0]; \
+ l = 1; \
+ if ((d)[1] == '/' || (d)[1] == GD_DIRSEP) { \
+ (s)[1] = (d)[1]; \
+ l = 2; \
+ } \
+ } else { \
+ (s)[0] = (d)[0]; \
+ (s)[1] = ':'; \
+ (s)[2] = '\\'; \
+ (s)[3] = '\0'; \
+ l = 3; \
+ } \
+ } while (0)
+# define _GD_RootLen(d) ( \
+ ((d)[0] == '/' || (d)[0] == GD_DIRSEP) ? \
+ ((d)[1] == '/' || (d)[1] == GD_DIRSEP) ? 2 : 1 : 3 \
+ )
#else
# define _GD_AbsPath(s) ((s)[0] == '/')
+# define _GD_Root(s,d,l) \
+ do { \
+ (s)[0] = '/'; \
+ (s)[1] = '\0'; \
+ l = 1; \
+ } while (0)
+# define _GD_RootLen(d) 1
#endif
/* maximum number of recursions */
@@ -984,7 +1013,7 @@
char *_GD_GetLine(FILE *restrict, size_t *restrict, int *restrict);
int _GD_GetRepr(DIRFILE *restrict, const char *restrict,
char **restrict, int);
-gd_spf_t _GD_GetSPF(DIRFILE*, const gd_entry_t*);
+gd_spf_t _GD_GetSPF(DIRFILE*, gd_entry_t*);
int _GD_GrabDir(DIRFILE*, int, const char *restrict);
int _GD_Include(DIRFILE*, const char *restrict, const char *restrict, int,
char **restrict, int, const char *restrict, const char *restrict,
Modified: trunk/getdata/src/open.c
===================================================================
--- trunk/getdata/src/open.c 2012-01-30 00:27:51 UTC (rev 651)
+++ trunk/getdata/src/open.c 2012-02-01 19:05:51 UTC (rev 652)
@@ -57,7 +57,7 @@
/* unable to read the format file */
if (format_error == EACCES || dir_error == EACCES) {
char *format_file = (char *)malloc(strlen(dirfile) + 8);
- strcat(strcpy(format_file, dirfile), "/format");
+ sprintf(format_file, "%s%cformat", dirfile, GD_DIRSEP);
_GD_SetError(D, GD_E_OPEN, GD_E_OPEN_NO_ACCESS, format_file, 0, NULL);
free(dirfile);
free(format_file);
@@ -289,7 +289,7 @@
gd_stat64_t statbuf;
#endif
- dtrace("\"%s\", 0x%lx, %p, %p", filedir, (unsigned long)flags, sehandler,
+ dtrace("\"%s\", 0x%lX, %p, %p", filedir, (unsigned long)flags, sehandler,
extra);
#ifdef GD_NO_DIR_OPEN
@@ -337,18 +337,12 @@
if (flags & GD_PERMISSIVE && flags & GD_PEDANTIC)
flags &= ~GD_PERMISSIVE;
- D->name = strdup(filedir);
+ D->name = dirfile; /* temporarily store canonicalised path here */
D->flags = (flags | GD_INVALID) & ~GD_IGNORE_REFS;
D->sehandler = sehandler;
D->sehandler_extra = extra;
D->standards = GD_DIRFILE_STANDARDS_VERSION;
- if (D->name == NULL || dirfile == NULL) {
- _GD_SetError(D, GD_E_ALLOC, 0, NULL, 0, NULL);
- dreturn("%p", D);
- return D;
- }
-
/* Add the INDEX entry */
D->n_entries = 1;
D->n[_GD_EntryIndex(GD_INDEX_ENTRY)] = 1;
@@ -391,6 +385,16 @@
return D; /* errors have already been set */
}
+ /* remember back when we temporarily stored the canonicalised path here?
+ * We're over that. Remember the dirfile's name. */
+ D->name = strdup(filedir);
+
+ if (D->name == NULL) {
+ _GD_SetError(D, GD_E_ALLOC, 0, NULL, 0, NULL);
+ dreturn("%p", D);
+ return D;
+ }
+
/* Parse the file. This will take care of any necessary inclusions */
D->n_fragment = 1;
@@ -484,7 +488,7 @@
{
DIRFILE *D;
- dtrace("\"%s\", 0x%lx", filedir, (unsigned long)flags);
+ dtrace("\"%s\", 0x%lX", filedir, (unsigned long)flags);
D = gd_cbopen(filedir, flags, NULL, NULL);
Modified: trunk/getdata/src/spf.c
===================================================================
--- trunk/getdata/src/spf.c 2012-01-30 00:27:51 UTC (rev 651)
+++ trunk/getdata/src/spf.c 2012-02-01 19:05:51 UTC (rev 652)
@@ -23,7 +23,7 @@
/* _GD_GetSPF: Get samples per frame for field
*/
-gd_spf_t _GD_GetSPF(DIRFILE *D, const gd_entry_t *E)
+gd_spf_t _GD_GetSPF(DIRFILE *D, gd_entry_t *E)
{
gd_spf_t spf = 0;
Modified: trunk/getdata/test/file.c
===================================================================
--- trunk/getdata/test/file.c 2012-01-30 00:27:51 UTC (rev 651)
+++ trunk/getdata/test/file.c 2012-02-01 19:05:51 UTC (rev 652)
@@ -67,7 +67,11 @@
/* This only checks whether the end of the returned path is what we expect.
* This should work, since we can guarantee that both "dirfile" and "data"
* aren't symlinks. */
+#if GD_DIRSEP == '/'
CHECKEOS(path,"dirfile/data");
+#else
+ CHECKEOS(path,"dirfile\\data");
+#endif
free(path);
return r;
Modified: trunk/getdata/test/fragment_name.c
===================================================================
--- trunk/getdata/test/fragment_name.c 2012-01-30 00:27:51 UTC (rev 651)
+++ trunk/getdata/test/fragment_name.c 2012-02-01 19:05:51 UTC (rev 652)
@@ -65,8 +65,13 @@
/* This only checks whether the end of the returned path is what we expect.
* This should work, since we can guarantee that both "dirfile" and "format*"
* aren't symlinks. */
+#if GD_DIRSEP == '/'
CHECKEOS(form0,"dirfile/format");
CHECKEOS(form1,"dirfile/format1");
+#else
+ CHECKEOS(form0,"dirfile\\format");
+ CHECKEOS(form1,"dirfile\\format1");
+#endif
free(form0);
free(form1);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2012-01-30 00:27:57
|
Revision: 651
http://getdata.svn.sourceforge.net/getdata/?rev=651&view=rev
Author: ketiltrout
Date: 2012-01-30 00:27:51 +0000 (Mon, 30 Jan 2012)
Log Message:
-----------
Test fixes.
Modified Paths:
--------------
trunk/getdata/bindings/f77/test/big_test.f
Modified: trunk/getdata/bindings/f77/test/big_test.f
===================================================================
--- trunk/getdata/bindings/f77/test/big_test.f 2012-01-18 03:54:15 UTC (rev 650)
+++ trunk/getdata/bindings/f77/test/big_test.f 2012-01-30 00:27:51 UTC (rev 651)
@@ -1861,7 +1861,7 @@
l = flen
i = flen
CALL GDGEWD(fields(1), i, fields(2), l, m, j, dp, n, d, 'new18',
- +6)
+ +5)
CALL CHKOK2(ne, 212, 2, d)
CALL CHKIN2(ne, 212, 1, i, flen)
CALL CHKIN2(ne, 212, 2, l, flen)
@@ -1896,7 +1896,7 @@
l = flen
i = flen
CALL GDGEWD(fields(1), i, fields(2), l, m, j, dp, n, d, 'new18',
- +6)
+ +5)
CALL CHKOK2(ne, 217, 2, d)
CALL CHKIN2(ne, 217, 1, i, flen)
CALL CHKIN2(ne, 217, 2, l, flen)
@@ -1904,7 +1904,7 @@
CALL CHKIN2(ne, 217, 4, m, GDW_GE)
CALL CHKST2(ne, 217, 5, fields(1), 'in3')
CALL CHKST2(ne, 217, 6, fields(2), 'in4')
- CALL CHKIN2(ne, 217, 7, dp, 32d3)
+ CALL CHKDB2(ne, 217, 7, dp, 32d3)
C 218: GDATRG check
l = flen
@@ -2005,7 +2005,7 @@
CALL CHKIN2(ne, 228, 4, m, 1)
CALL CHKST2(ne, 228, 5, fields(1), 'data')
CALL CHKST2(ne, 228, 6, fields(2), 'sbit')
- CALL CHKDB2(ne, 228, 7, j, 10)
+ CALL CHKIN2(ne, 228, 7, j, 10)
C 229: GDADMX check
CALL GDADMX(d, 'new21', 5, 'in1', 3, 'in2', 3, 5, 6, 0)
@@ -2013,7 +2013,7 @@
l = flen
i = flen
- CALL GDGEMX(fields(1), i, fields(2), l, m, j, n, d, 'new21', 6)
+ CALL GDGEMX(fields(1), i, fields(2), l, m, j, n, d, 'new21', 5)
CALL CHKOK2(ne, 229, 2, d)
CALL CHKIN2(ne, 229, 1, i, flen)
CALL CHKIN2(ne, 229, 2, l, flen)
@@ -2046,7 +2046,7 @@
l = flen
i = flen
- CALL GDGEMX(fields(1), i, fields(2), l, m, j, n, d, 'new21', 6)
+ CALL GDGEMX(fields(1), i, fields(2), l, m, j, n, d, 'new21', 5)
CALL CHKOK2(ne, 231, 2, d)
CALL CHKIN2(ne, 231, 1, i, flen)
CALL CHKIN2(ne, 231, 2, l, flen)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2012-01-18 03:54:24
|
Revision: 650
http://getdata.svn.sourceforge.net/getdata/?rev=650&view=rev
Author: ketiltrout
Date: 2012-01-18 03:54:15 +0000 (Wed, 18 Jan 2012)
Log Message:
-----------
zzslim encoding support.
Modified Paths:
--------------
trunk/getdata/ChangeLog
trunk/getdata/bindings/f77/test/big_test.f
trunk/getdata/bindings/make_parameters.c
trunk/getdata/configure.ac
trunk/getdata/m4/encoding.m4
trunk/getdata/src/Makefile.am
trunk/getdata/src/common.c
trunk/getdata/src/encoding.c
trunk/getdata/src/getdata.h.in
trunk/getdata/src/internal.h
trunk/getdata/src/slim.c
trunk/getdata/test/Makefile.am
Added Paths:
-----------
trunk/getdata/src/zzslim.c
trunk/getdata/test/zzslim_get.c
trunk/getdata/test/zzslim_nframes.c
Property Changed:
----------------
trunk/getdata/test/
Modified: trunk/getdata/ChangeLog
===================================================================
--- trunk/getdata/ChangeLog 2012-01-17 01:46:27 UTC (rev 649)
+++ trunk/getdata/ChangeLog 2012-01-18 03:54:15 UTC (rev 650)
@@ -1,3 +1,21 @@
+2012-01-18 D. V. Wiebe <ge...@ke...> svn:650
+ * src/getdata.h.in src/internal.h: Define GD_ENC_ZZSLIM GD_ZZSLIM_ENCODED.
+ * src/zzslim.c: Added.
+ * src/encoding.c: In the initialisation of _gd_ef, differentiate things
+ that are willing to use the Generic functions from those that aren't. Added
+ zzslim.
+
+ * src/common.c (_GD_CanonicalPath): Don't truncate on ENOENT.
+
+ * src/slim.c (_GD_SlimOpen): The slimdopen in slimlib-2.6.5 doesn't interact
+ well with slim's own zzip support, so let's ignore it for now.
+
+ * bindings/make_parameters.c: Convert F77 encoding parameters to the form
+ GDE_xx.
+
+ * configure.ac: zzslim tests. Always look for a C++ compiler.
+ * m4/encoding.m4: Separate LIBS from LDFLAGS; fix some underquoting.
+
2012-01-11 D. V. Wiebe <ge...@ke...> svn:644
* src/getdata.h.in: Added GD_MPLEX_ENTRY. Updated gd_entry_t. Defined
GD_COUNT_MAX.
Modified: trunk/getdata/bindings/f77/test/big_test.f
===================================================================
--- trunk/getdata/bindings/f77/test/big_test.f 2012-01-17 01:46:27 UTC (rev 649)
+++ trunk/getdata/bindings/f77/test/big_test.f 2012-01-18 03:54:15 UTC (rev 650)
@@ -1254,7 +1254,7 @@
C 78: GDGENC check
CALL GDGENC(n, d, 0)
CALL CHKEOK(ne, 78, d)
- CALL CHKINT(ne, 78, n, GD_EN)
+ CALL CHKINT(ne, 78, n, GDE_UN)
C 79: GDGEND check
CALL GDGEND(n, d, 0)
@@ -1297,12 +1297,12 @@
CALL CHKSTR(ne, 85, str, 'new1')
C 87: GDAENC check
- CALL GDAENC(d, GD_ES, 1, 0)
+ CALL GDAENC(d, GDE_TX, 1, 0)
CALL CHKOK2(ne, 87, 1, d)
CALL GDGENC(n, d, 1)
CALL CHKOK2(ne, 87, 2, d)
- CALL CHKINT(ne, 87, n, GD_ES)
+ CALL CHKINT(ne, 87, n, GDE_TX)
C 88: GDAEND check
CALL GDAEND(d, GD_BE, 1, 0)
Modified: trunk/getdata/bindings/make_parameters.c
===================================================================
--- trunk/getdata/bindings/make_parameters.c 2012-01-17 01:46:27 UTC (rev 649)
+++ trunk/getdata/bindings/make_parameters.c 2012-01-18 03:54:15 UTC (rev 650)
@@ -111,14 +111,15 @@
CONSTANT(NOT_ARM_ENDIAN, "GD_NA", 2),
CONSTANT(PERMISSIVE, "GD_PM", 1),
- CONSTANT(AUTO_ENCODED, "GD_EA", 1),
- CONSTANT(BZIP2_ENCODED, "GD_EB", 2),
- CONSTANT(LZMA_ENCODED, "GD_EL", 2),
- CONSTANT(UNENCODED, "GD_EN", 2),
- CONSTANT(GZIP_ENCODED, "GD_EG", 2),
- CONSTANT(TEXT_ENCODED, "GD_ET", 2),
- CONSTANT(SLIM_ENCODED, "GD_ES", 2),
- CONSTANT(ZZIP_ENCODED, "GD_EZ", 2),
+ CONSTANT(AUTO_ENCODED, "GDE_AU", 1),
+ CONSTANT(BZIP2_ENCODED, "GDE_BZ", 2),
+ CONSTANT(LZMA_ENCODED, "GDE_LZ", 2),
+ CONSTANT(UNENCODED, "GDE_UN", 2),
+ CONSTANT(GZIP_ENCODED, "GDE_GZ", 2),
+ CONSTANT(TEXT_ENCODED, "GDE_TX", 2),
+ CONSTANT(SLIM_ENCODED, "GDE_SL", 2),
+ CONSTANT(ZZIP_ENCODED, "GDE_ZZ", 2),
+ CONSTANT(ZZSLIM_ENCODED, "GDE_ZS", 2),
CONSTANT(NO_ENTRY, "GD_NOE", 3),
CONSTANT(RAW_ENTRY, "GD_RWE", 3),
Modified: trunk/getdata/configure.ac
===================================================================
--- trunk/getdata/configure.ac 2012-01-17 01:46:27 UTC (rev 649)
+++ trunk/getdata/configure.ac 2012-01-18 03:54:15 UTC (rev 650)
@@ -345,16 +345,13 @@
AC_HEADER_STDC
AM_PROG_AS
-if test "x$make_cxxbindings" != "xno"; then
- echo
- echo "*** Checking C++ compiler characteristics"
- echo
- AC_PROG_CXX
- AC_PROG_CXX_C_O
-else
- am__fastdepCXX_TRUE=
- am__fastdepCXX_FALSE='#'
-fi
+
+echo
+echo "*** Checking C++ compiler characteristics"
+echo
+AC_PROG_CXX
+AC_PROG_CXX_C_O
+
if test "x$make_f77bindings" != "xno"; then
echo
echo "*** Checking Fortran 77 compiler characteristics"
@@ -466,7 +463,7 @@
GD_PROG_CC_WALL
GD_PROG_CC_WEXTRA
-if test "x$make_c++bindings" != "xno"; then
+if test "x$make_cxxbindings" != "xno"; then
GD_PROG_CXX_WALL
GD_PROG_CXX_WEXTRA
fi
@@ -820,12 +817,95 @@
dnl external encodings
GD_CHECK_ENCODING([bzip2],[bz2],[BZ2_bzReadOpen],[bzlib.h],[bzip2],[bunzip2],[])
+GD_CHECK_ENCODING([gzip],[z],[gzopen],[zlib.h],[gzip],[gunzip],[])
+GD_CHECK_ENCODING([lzma],[lzma],[lzma_auto_decoder],[lzma.h],[xz],[],[])
GD_CHECK_ENCODING([slim],[slim],[slimopen],[slimlib.h], [slim slimdata],
[unslim],[slimdopen])
-GD_CHECK_ENCODING([gzip],[z],[gzopen],[zlib.h],[gzip],[gunzip],[])
-GD_CHECK_ENCODING([lzma],[lzma],[lzma_auto_decoder],[lzma.h],[xz],[],[])
GD_CHECK_ENCODING([zzip],[zzip],[zzip_open],[zzip/lib.h],[zip],[unzip],[])
+dnl zzslim hackery -- there's no easy way to check whether slim supports zzip
+AC_ARG_ENABLE(zzslim, AS_HELP_STRING([--enable-zzslim],
+ [skip probing for zzslim required features and enable the zzslim
+ encoding. The default is to autodetect support. Note: zzslim
+ encoding support requires both slim and zzip encoding support.]),
+ [
+ case "${enableval}" in
+ no) zzslim_override="no" ;;
+ *) zzslim_override="yes" ;;
+ esac
+ ], [ zzslim_override="auto" ])
+m4_divert_once([HELP_ENABLE], AS_HELP_STRING([--disable-zzslim],
+ [disable zzslim encodings support]))
+
+echo
+echo "*** Configuring zzslim support "
+echo
+if test $zzslim_override = "no"; then
+ AC_MSG_CHECKING([for zzslim support])
+ AC_MSG_RESULT([no (forced)])
+ use_zzslim=no
+else
+ AC_MSG_CHECKING([for slim support])
+ AC_MSG_RESULT([$use_slim])
+ AC_MSG_CHECKING([for zzip support])
+ AC_MSG_RESULT([$use_zzip])
+ if test "$use_slim$use_zzip" == "yesyes"; then
+ if test $zzslim_override = "yes"; then
+ AC_MSG_CHECKING([for zzslim support])
+ AC_MSG_RESULT([yes (forced)])
+ use_zzslim=yes
+ elif test "x$CXX" = "x"; then
+ AC_MSG_CHECKING([for zzslim support])
+ AC_MSG_RESULT([no (no C++ compiler available for configure test)])
+ use_zzslim=no
+ else
+ dnl try linking to the slim library to see if it contains the unprototyped
+ dnl ibitstream::ibitstream(ZZIP_FILE *file, int buffersize)
+ dnl given that this function isn't public, this is probably easily broken
+ AC_MSG_CHECKING([whether -lslim contains zzip capability])
+ AC_LANG_PUSH([C++])
+ saved_ldflags=$LDFLAGS
+ saved_libs=$LIBS
+ LDFLAGS="$SLIM_LDFLAGS $LDFLAGS"
+ LIBS="$SLIM_LIBS $LIBS"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM(
+ [[
+ struct zzip_file;
+ typedef struct zzip_file ZZIP_FILE;
+ class ibitstream {
+ public:
+ ibitstream(ZZIP_FILE *file, int buffersize);
+ };
+ ]],
+ [[
+ ZZIP_FILE *file;
+ ibitstream foo(file, 0);
+ ]]
+ )], [slim_zzip="yes"], [slim_zzip="no"])
+ AC_MSG_RESULT([$slim_zzip])
+ LDFLAGS=$saved_ldflags
+ LIBS=$saved_libs
+ AC_LANG_POP
+
+ use_zzslim=$slim_zzip
+ fi
+ else
+ use_zzslim="no"
+ fi
+fi
+
+dnl add to summary and private lib list
+if test "x$use_zzslim" != "xno"; then
+ AC_DEFINE([USE_ZZSLIM], [], [ Define to enable zzslim support ])
+ if test "x$use_modules" != "xno"; then
+ ENCODINGS_MODS="${ENCODINGS_MODS} zzslim";
+ else
+ ENCODINGS_BUILT="${ENCODINGS_BUILT} zzslim";
+ fi
+else
+ ENCODINGS_LEFT="${ENCODINGS_LEFT} zzslim";
+fi
+
if test ! -z "${LIBS}"; then
PRIVATE_LIBS="${LIBS} ${PRIVATE_LIBS}"
fi
@@ -901,8 +981,10 @@
AM_CONDITIONAL(TEST_IDL, [test "x$NO_DLOPEN_TESTS" = "x0"])
AM_CONDITIONAL(TEST_PERL, [test "x$HAVE_Test__Harness" = "xyes"])
AM_CONDITIONAL(HAVE_DIFF, [test "x$DIFF" != "x"])
+AM_CONDITIONAL(USE_ZZSLIM, [test "x$use_zzslim" = "xyes"])
AM_CONDITIONAL(GDIDL_EXTERNAL, [false])
+
dnl we do this here to avoid screwing up other tests
LDFLAGS="${LDFLAGS}${NO_UNDEFINED}"
Modified: trunk/getdata/m4/encoding.m4
===================================================================
--- trunk/getdata/m4/encoding.m4 2012-01-17 01:46:27 UTC (rev 649)
+++ trunk/getdata/m4/encoding.m4 2012-01-18 03:54:15 UTC (rev 650)
@@ -77,13 +77,15 @@
dnl cleanup
AS_TR_CPP(gd_encoding[_CPPFLAGS])=
AS_TR_CPP(gd_encoding[_LDFLAGS])=
+AS_TR_CPP(gd_encoding[_LIBS])=
if test "x$have_this_header" = "xyes" -a "x$have_this_lib" = "xyes"; then
if test "x$gd_encoding[]_prefix" = "x"; then
- AS_TR_CPP(gd_encoding[_LDFLAGS])="-l$2"
+ AS_TR_CPP(gd_encoding[_LIBS])="-l$2"
AS_TR_CPP(gd_encoding[_SEARCHPATH])="$PATH"
else
AS_TR_CPP(gd_encoding[_CPPFLAGS])="-I$gd_encoding[]_prefix/include"
- AS_TR_CPP(gd_encoding[_LDFLAGS])="-L$gd_encoding[]_prefix/lib -l$2"
+ AS_TR_CPP(gd_encoding[_LDFLAGS])="-L$gd_encoding[]_prefix/lib"
+ AS_TR_CPP(gd_encoding[_LIBS])="-l$2"
AS_TR_CPP(gd_encoding[_SEARCHPATH])="$gd_encoding[]_prefix/bin:$PATH"
fi
AC_DEFINE(AS_TR_CPP([USE_]gd_encoding), [], [ Define to enable ]gd_encoding[ support ])
@@ -93,9 +95,10 @@
fi
AC_SUBST(AS_TR_CPP(gd_encoding[_CPPFLAGS]))
AC_SUBST(AS_TR_CPP(gd_encoding[_LDFLAGS]))
+AC_SUBST(AS_TR_CPP(gd_encoding[_LIBS]))
dnl executables needed for tests
-m4_define(gd_progname, regexp([$5 ], [^\([^ ]*\) ], [\1]))
+m4_define([gd_progname], regexp([$5 ], [^\([^ ]*\) ], [\1]))
AC_PATH_PROGS([path_]gd_progname, [$5], [not found], [$AS_TR_CPP(gd_encoding[_SEARCHPATH])])
if test "x$path_[]gd_progname" != "xnot found"; then
@@ -104,7 +107,7 @@
fi
ifelse(`x$6', `x',,[
-m4_define(gd_unprogname, regexp([$6 ], [^\([^ ]*\) ], [\1]))
+m4_define([gd_unprogname], regexp([$6 ], [^\([^ ]*\) ], [\1]))
AC_PATH_PROGS([path_]gd_unprogname, [$6], [not found], [$AS_TR_CPP(gd_encoding[_SEARCHPATH])])
if test "x$path_[]gd_unprogname" != "xnot found"; then
@@ -126,9 +129,9 @@
else
ENCODINGS_BUILT="${ENCODINGS_BUILT} gd_encoding";
if test -z "$PRIVATE_LIBS"; then
- PRIVATE_LIBS="[$]AS_TR_CPP(gd_encoding[_LDFLAGS])"
+ PRIVATE_LIBS="[$]AS_TR_CPP(gd_encoding[_LDFLAGS]) [$]AS_TR_CPP(gd_encoding[_LIBS])"
else
- PRIVATE_LIBS="$PRIVATE_LIBS [$]AS_TR_CPP(gd_encoding[_LDFLAGS])"
+ PRIVATE_LIBS="[$]AS_TR_CPP(gd_encoding[_LDFLAGS]) $PRIVATE_LIBS [$]AS_TR_CPP(gd_encoding[_LIBS])"
fi
fi
else
Modified: trunk/getdata/src/Makefile.am
===================================================================
--- trunk/getdata/src/Makefile.am 2012-01-17 01:46:27 UTC (rev 649)
+++ trunk/getdata/src/Makefile.am 2012-01-18 03:54:15 UTC (rev 650)
@@ -73,7 +73,16 @@
endif
endif
+if USE_ZZSLIM
if USE_MODULES
+LIBGETDATAZZSLIM_LA=libgetdatazzslim.la
+DLOPEN_LIBGETDATAZZSLIM_LA=-dlopen libgetdatazzslim.la
+else
+ZZSLIM_C=zzslim.c
+endif
+endif
+
+if USE_MODULES
EXPORT_DYNAMIC=-export-dynamic
DGETDATA_MODULEDIR=-DGETDATA_MODULEDIR="\"$(moduledir)\""
else
@@ -81,6 +90,7 @@
$(LZMA_CPPFLAGS) $(ZZIP_CPPFLAGS)
EXTERNAL_LDFLAGS=$(SLIM_LDFLAGS) $(GZIP_LDFLAGS) $(BZIP2_LDFLAGS) \
$(LZMA_LDFLAGS) $(ZZIP_LDFLAGS)
+EXTERNAL_LIBS=$(SLIM_LIBS) $(GZIP_LIBS) $(BZIP2_LIBS) $(LZMA_LIBS) $(ZZIP_LIBS)
endif
if INCLUDE_LEGACY_API
@@ -112,7 +122,7 @@
lib_LTLIBRARIES = libgetdata.la
module_LTLIBRARIES = ${LIBGETDATASLIM_LA} ${LIBGETDATAGZIP_LA} \
${LIBGETDATABZIP2_LA} ${LIBGETDATALZMA_LA} \
- ${LIBGETDATAZZIP_LA}
+ ${LIBGETDATAZZIP_LA} ${LIBGETDATAZZSLIM_LA}
libgetdata_la_SOURCES = add.c ascii.c ${BZIP2_C} close.c common.c compat.c \
constant.c ${DEBUG_C} del.c encoding.c endian.c \
entry.c errors.c field_list.c flimits.c flush.c fpos.c \
@@ -120,41 +130,48 @@
include.c ${LEGACY_C} ${LZMA_C} meta_list.c mod.c \
move.c name.c native.c nfields.c nframes.c nmeta.c \
open.c parse.c protect.c putdata.c raw.c sie.c \
- ${SLIM_C} spf.c string.c types.c ${ZZIP_C} \
+ ${SLIM_C} spf.c string.c types.c ${ZZIP_C} ${ZZSLIM_C} \
${GETDATA_LEGACY_H} internal.h nan.h
libgetdata_la_LDFLAGS = $(EXPORT_DYNAMIC) -export-symbols-regex '^[^_]' \
-version-info \
${GETDATA_IFACE_VERSION}:${GETDATA_IMPL_REVISION}:${GETDATA_IFACE_AGE} \
- $(EXTERNAL_LDFLAGS)
+ $(EXTERNAL_LDFLAGS) $(EXTERNAL_LIBS)
libgetdata_la_LIBADD = $(LIBLTDL) $(DLOPEN_LIBGETDATASLIM_LA) \
- $(DLOPEN_LIBGETDATAGZIP_LA) \
+ $(DLOPEN_LIBGETDATAGZIP_LA)
$(DLOPEN_LIBGETDATABZIP2_LA) \
- $(DLOPEN_LIBGETDATALZMA_LA) \
- $(DLOPEN_LIBGETDATAZZIP_LA)
+ $(DLOPEN_LIBGETDATALZMA_LA) $(DLOPEN_LIBGETDATAZZIP_LA) \
+ $(DLOPEN_LIBGETDATAZZSLIM_LA)
libgetdataslim_la_SOURCES = slim.c
libgetdataslim_la_LDFLAGS = $(SLIM_LDFLAGS) -release $(PACKAGE_VERSION) \
- -module
+ -module $(SLIM_LIBS)
libgetdataslim_la_CPPFLAGS = $(AM_CPPFLAGS) $(SLIM_CPPFLAGS)
libgetdatagzip_la_SOURCES = gzip.c
-libgetdatagzip_la_LDFLAGS = $(GZIP_LDFLAGS) -release $(PACKAGE_VERSION) -module
+libgetdatagzip_la_LDFLAGS = $(GZIP_LDFLAGS) -release $(PACKAGE_VERSION) \
+ -module $(GZIP_LIBS)
libgetdatagzip_la_CPPFLAGS = $(AM_CPPFLAGS) $(GZIP_CPPFLAGS)
libgetdatabzip2_la_SOURCES = bzip.c
libgetdatabzip2_la_LDFLAGS = $(BZIP2_LDFLAGS) -release $(PACKAGE_VERSION) \
- -module
+ -module $(BZIP2_LIBS)
libgetdatabzip2_la_CPPFLAGS = $(AM_CPPFLAGS) $(BZIP2_CPPFLAGS)
libgetdatalzma_la_SOURCES = lzma.c
libgetdatalzma_la_LDFLAGS = $(LZMA_LDFLAGS) -release $(PACKAGE_VERSION) \
- -module
+ -module $(LZMA_LIBS)
libgetdatalzma_la_CPPFLAGS = $(AM_CPPFLAGS) $(LZMA_CPPFLAGS)
libgetdatazzip_la_SOURCES = zzip.c
libgetdatazzip_la_LDFLAGS = $(ZZIP_LDFLAGS) -release $(PACKAGE_VERSION) \
- -module
+ -module $(ZZIP_LIBS)
libgetdatazzip_la_CPPFLAGS = $(AM_CPPFLAGS) $(ZZIP_CPPFLAGS)
+libgetdatazzslim_la_SOURCES = zzslim.c
+libgetdatazzslim_la_LDFLAGS = $(SLIM_LDFLAGS) $(ZZIP_LDFLAGS) \
+ -release $(PACKAGE_VERSION) -module \
+ $(SLIM_LIBS) $(ZZIP_LIBS)
+libgetdatazzslim_la_CPPFLAGS = $(AM_CPPFLAGS) $(SLIM_CPPFLAGS) $(ZZIP_CPPFLAGS)
+
clean-local:
rm -rf *~ getdata.pc
Modified: trunk/getdata/src/common.c
===================================================================
--- trunk/getdata/src/common.c 2012-01-17 01:46:27 UTC (rev 649)
+++ trunk/getdata/src/common.c 2012-01-18 03:54:15 UTC (rev 650)
@@ -955,7 +955,7 @@
return D->name;
}
-/* This is effectively the POSIX.1 realpath(3) function, but with some
+/* This is mostly the POSIX.1 realpath(3) function, but with some
* optimisation due to the fact that we know that the front part of the
* path (car) has already been canonicalised */
char *_GD_CanonicalPath(const char *car, const char *cdr)
@@ -1122,11 +1122,30 @@
/* check if it's a symlink */
if (lstat64(res, &statbuf)) {
- if (errno == ENOENT && *end == '\0') {
- /* the leaf doesn't exist. I guess that means we're done. */
+ if (errno == ENOENT) {
+ /* the thing doesn't exist. I guess that means we're done;
+ * copy the rest of the work buffer onto the resul and call it a
+ * day. */
+ dwatch("%s", res);
+ if (*end) {
+ len = strlen(end) + 1;
+ if (res_len + len >= res_size) {
+ ptr = (char*)realloc(res, res_size += len);
+ if (ptr == NULL) {
+ free(res);
+ free(work);
+ dreturn("%p", NULL);
+ return NULL;
+ }
+ res = ptr;
+ }
+ res[res_len++] = '/';
+ strcpy(res + res_len, end);
+ res_len += len - 1;
+ }
goto _GD_CanonicalPath_DONE;
}
- /* doesn't exist */
+ /* lstat error */
free(res);
free(work);
dreturn("%p", NULL);
Modified: trunk/getdata/src/encoding.c
===================================================================
--- trunk/getdata/src/encoding.c 2012-01-17 01:46:27 UTC (rev 649)
+++ trunk/getdata/src/encoding.c 2012-01-18 03:54:15 UTC (rev 650)
@@ -32,13 +32,19 @@
#endif
/* encoding schemas */
-#define GD_EF_NULL_SET &_GD_GenericName, NULL, NULL, NULL, NULL, NULL, \
+#define GD_EF_NULL_SET NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
+ NULL
+#define GD_EF_GENERIC_SET &_GD_GenericName, NULL, NULL, NULL, NULL, NULL, \
NULL, NULL, &_GD_GenericMove, &_GD_GenericUnlink
#ifdef USE_MODULES
-#define GD_EXT_ENCODING(sc,ex,ec,af,ff) \
+#define GD_EXT_ENCODING_NULL(sc,ex,ec,af,ff) \
{ sc,ex,ec,af,ff,GD_EF_PROVIDES,GD_EF_NULL_SET }
+#define GD_EXT_ENCODING_GEN(sc,ex,ec,af,ff) \
+{ sc,ex,ec,af,ff,GD_EF_PROVIDES,GD_EF_GENERIC_SET }
#else
#define GD_EXT_ENCODING(sc,ex,ec,af,ff) { sc,ex,ec,af,ff,0,GD_INT_FUNCS }
+#define GD_EXT_ENCODING_NULL GD_EXT_ENCODING
+#define GD_EXT_ENCODING_GEN GD_EXT_ENCODING
#endif
struct encoding_t _gd_ef[GD_N_SUBENCODINGS] = {
{ GD_UNENCODED, "", GD_EF_ECOR, NULL, "none", 0,
@@ -59,7 +65,7 @@
#define GD_EF_PROVIDES 0
#define GD_INT_FUNCS GD_EF_NULL_SET
#endif
- GD_EXT_ENCODING(GD_GZIP_ENCODED, ".gz", GD_EF_ECOR | GD_EF_OOP, "Gzip",
+ GD_EXT_ENCODING_GEN(GD_GZIP_ENCODED, ".gz", GD_EF_ECOR | GD_EF_OOP, "Gzip",
"gzip"),
#undef GD_INT_FUNCS
#undef GD_EF_PROVIDES
@@ -76,7 +82,7 @@
#define GD_INT_FUNCS GD_EF_NULL_SET
#define GD_EF_PROVIDES 0
#endif
- GD_EXT_ENCODING(GD_BZIP2_ENCODED, ".bz2", GD_EF_ECOR, "Bzip2", "bzip2"),
+ GD_EXT_ENCODING_GEN(GD_BZIP2_ENCODED, ".bz2", GD_EF_ECOR, "Bzip2", "bzip2"),
#undef GD_INT_FUNCS
#undef GD_EF_PROVIDES
@@ -92,7 +98,7 @@
#define GD_INT_FUNCS GD_EF_NULL_SET
#define GD_EF_PROVIDES 0
#endif
- GD_EXT_ENCODING(GD_SLIM_ENCODED, ".slm", GD_EF_ECOR, "Slim", "slim"),
+ GD_EXT_ENCODING_GEN(GD_SLIM_ENCODED, ".slm", GD_EF_ECOR, "Slim", "slim"),
#undef GD_INT_FUNCS
#undef GD_EF_PROVIDES
@@ -108,8 +114,8 @@
#define GD_INT_FUNCS GD_EF_NULL_SET
#define GD_EF_PROVIDES 0
#endif
- GD_EXT_ENCODING(GD_LZMA_ENCODED, ".xz", GD_EF_ECOR, "Lzma", "lzma"),
- GD_EXT_ENCODING(GD_LZMA_ENCODED, ".lzma", GD_EF_ECOR, "Lzma", "lzma"),
+ GD_EXT_ENCODING_GEN(GD_LZMA_ENCODED, ".xz", GD_EF_ECOR, "Lzma", "lzma"),
+ GD_EXT_ENCODING_GEN(GD_LZMA_ENCODED, ".lzma", GD_EF_ECOR, "Lzma", "lzma"),
#undef GD_INT_FUNCS
#undef GD_EF_PROVIDES
@@ -132,21 +138,38 @@
GD_EF_NAME | GD_EF_OPEN | GD_EF_CLOSE | GD_EF_SEEK | GD_EF_READ | GD_EF_SIZE
#define GD_INT_FUNCS \
&_GD_ZzipName, &_GD_ZzipOpen, &_GD_ZzipClose, &_GD_ZzipSeek, &_GD_ZzipRead, \
- &_GD_ZzipSize, NULL /* WRITE */, NULL /* SYNC */, &_GD_GenericMove, \
- &_GD_GenericUnlink
+ &_GD_ZzipSize, NULL /* WRITE */, NULL /* SYNC */, NULL /* MOVE */, \
+ NULL /* UNLINK */
#else
-#define GD_INT_FUNCS GD_EF_NULL_SET
+#define GD_INT_FUNCS NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
#define GD_EF_PROVIDES 0
#endif
- GD_EXT_ENCODING(GD_ZZIP_ENCODED, NULL, GD_EF_ECOR | GD_EF_EDAT, "Zzip",
+ GD_EXT_ENCODING_NULL(GD_ZZIP_ENCODED, NULL, GD_EF_ECOR | GD_EF_EDAT, "Zzip",
"zzip"),
#undef GD_INT_FUNCS
#undef GD_EF_PROVIDES
- { GD_ENC_UNSUPPORTED, "", 0, "", "", 0,
+#ifdef USE_ZZSLIM
+#define GD_EF_PROVIDES \
+ GD_EF_NAME | GD_EF_OPEN | GD_EF_CLOSE | GD_EF_SEEK | GD_EF_READ | GD_EF_SIZE
+#define GD_INT_FUNCS \
+ &_GD_ZzslimName, &_GD_ZzslimOpen, &_GD_ZzslimClose, &_GD_ZzslimSeek, \
+ &_GD_ZzslimRead, &_GD_ZzslimSize, NULL /* WRITE */, NULL /* SYNC */, \
+ NULL /* MOVE */, NULL /* UNLINK */
+#else
+#define GD_INT_FUNCS NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+#define GD_EF_PROVIDES 0
+#endif
+ GD_EXT_ENCODING_NULL(GD_ZZSLIM_ENCODED, NULL, GD_EF_ECOR | GD_EF_EDAT,
+ "Zzslim", "zzslim"),
+#undef GD_INT_FUNCS
+#undef GD_EF_PROVIDES
+
+
+ { GD_ENC_UNSUPPORTED, NULL, 0, "", "", 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
- },
+ }
};
void _GD_InitialiseFramework(void)
Modified: trunk/getdata/src/getdata.h.in
===================================================================
--- trunk/getdata/src/getdata.h.in 2012-01-17 01:46:27 UTC (rev 649)
+++ trunk/getdata/src/getdata.h.in 2012-01-18 03:54:15 UTC (rev 650)
@@ -451,6 +451,7 @@
#define GD_LZMA_ENCODED 0x06000000 /* Data are xz encoded */
#define GD_SIE_ENCODED 0x07000000 /* Data are sample index encoded */
#define GD_ZZIP_ENCODED 0x08000000 /* Data are zzip encoded */
+#define GD_ZZSLIM_ENCODED 0x09000000 /* Data are zzslim encoded */
#define GD_ENC_UNSUPPORTED GD_ENCODING /* Encoding unsupported */
/* delete flags */
Modified: trunk/getdata/src/internal.h
===================================================================
--- trunk/getdata/src/internal.h 2012-01-17 01:46:27 UTC (rev 649)
+++ trunk/getdata/src/internal.h 2012-01-18 03:54:15 UTC (rev 650)
@@ -740,7 +740,8 @@
#define GD_ENC_XZ_RAW 6
#define GD_ENC_SIE 7
#define GD_ENC_ZZIP 8
-#define GD_ENC_UNKNOWN 9
+#define GD_ENC_ZZSLIM 9
+#define GD_ENC_UNKNOWN 10
#define GD_N_SUBENCODINGS (GD_ENC_UNKNOWN + 1)
@@ -1147,6 +1148,18 @@
off64_t _GD_ZzipSize(int, struct _gd_raw_file* file, gd_type_t data_type,
int swap);
+/* zzslim I/O methods */
+int _GD_ZzslimName(DIRFILE *restrict, const char *restrict,
+ struct _gd_raw_file *restrict, const char *restrict, int, int);
+int _GD_ZzslimOpen(int, struct _gd_raw_file* file, int swap, unsigned int);
+off64_t _GD_ZzslimSeek(struct _gd_raw_file* file, off64_t count,
+ gd_type_t data_type, unsigned int);
+ssize_t _GD_ZzslimRead(struct _gd_raw_file *restrict, void *restrict, gd_type_t,
+ size_t);
+int _GD_ZzslimClose(struct _gd_raw_file* file);
+off64_t _GD_ZzslimSize(int, struct _gd_raw_file* file, gd_type_t data_type,
+ int swap);
+
#ifndef __cplusplus
# undef gd_nothrow
# define gd_nothrow
Modified: trunk/getdata/src/slim.c
===================================================================
--- trunk/getdata/src/slim.c 2012-01-17 01:46:27 UTC (rev 649)
+++ trunk/getdata/src/slim.c 2012-01-18 03:54:15 UTC (rev 650)
@@ -38,33 +38,20 @@
int _GD_SlimOpen(int dirfd, struct _gd_raw_file* file, int swap __gd_unused,
unsigned int mode __gd_unused)
{
+ char *filepath;
+
dtrace("%i, %p, <unused>, <unused>", dirfd, file);
- {
-#ifdef HAVE_SLIMDOPEN
- int fd;
- fd = gd_OpenAt(file->D, dirfd, file->name, ((mode & GD_FILE_WRITE) ?
- (O_RDWR | O_CREAT) : O_RDONLY) | O_BINARY, 0666);
-
- if (fd < 0) {
- dreturn("%i", 1);
- return 1;
- }
- file->edata = slimdopen(fd, "r");
-#else
- char *filepath;
- /* this is easily broken, but the best we can do for now... */
- filepath = gd_MakeFullPathOnly(file->D, dirfd, file->name);
- if (filepath == NULL) {
- dreturn("%i", 1);
- return 1;
- }
-
- file->edata = slimopen(filepath, "r");
- free(filepath);
-#endif
+ /* this is easily broken, but the best we can do for now... */
+ filepath = gd_MakeFullPathOnly(file->D, dirfd, file->name);
+ if (filepath == NULL) {
+ dreturn("%i", 1);
+ return 1;
}
+ file->edata = slimopen(filepath, "r");
+ free(filepath);
+
if (file->edata == NULL) {
dreturn("%i", 1);
return 1;
Added: trunk/getdata/src/zzslim.c
===================================================================
--- trunk/getdata/src/zzslim.c (rev 0)
+++ trunk/getdata/src/zzslim.c 2012-01-18 03:54:15 UTC (rev 650)
@@ -0,0 +1,180 @@
+/* Copyright (C) 2008, 2010, 2011, 2012 D. V. Wiebe
+ *
+ ***************************************************************************
+ *
+ * This file is part of the GetData project.
+ *
+ * GetData is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * GetData is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with GetData; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+#include "internal.h"
+
+#ifdef HAVE_SLIMLIB_H
+#include <slimlib.h>
+#endif
+
+#ifdef USE_MODULES
+#define _GD_ZzslimName libgetdatazzslim_LTX_GD_ZzslimName
+#define _GD_ZzslimOpen libgetdatazzslim_LTX_GD_ZzslimOpen
+#define _GD_ZzslimSeek libgetdatazzslim_LTX_GD_ZzslimSeek
+#define _GD_ZzslimRead libgetdatazzslim_LTX_GD_ZzslimRead
+#define _GD_ZzslimClose libgetdatazzslim_LTX_GD_ZzslimClose
+#define _GD_ZzslimSize libgetdatazzslim_LTX_GD_ZzslimSize
+#endif
+
+/* The zzslim encoding scheme uses edata as a slimfile pointer. If a file is
+ * open, idata = 0 otherwise idata = -1. */
+
+int _GD_ZzslimName(DIRFILE *restrict D, const char *restrict enc_data,
+ struct _gd_raw_file *restrict file, const char *restrict base,
+ int temp __gd_unused, int resolv)
+{
+ size_t enc_len;
+
+ dtrace("%p, \"%s\", %p, \"%s\", <unused>, %i", D, enc_data, file, base,
+ resolv);
+
+ if (enc_data == NULL)
+ enc_data = "raw";
+
+ enc_len = strlen(enc_data);
+
+ /* Resolution is degenerate with the zzip encoding; so skip it for now */
+ if (resolv) {
+ dreturn("%i", 1);
+ return 1;
+ }
+
+ if (file->name == NULL) {
+ file->D = D;
+ file->name = (char *)malloc(strlen(base) + strlen(enc_data) + 6);
+ if (file->name == NULL) {
+ _GD_SetError(D, GD_E_ALLOC, 0, NULL, 0, NULL);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ strcpy(file->name, enc_data);
+ file->name[enc_len] = '/';
+ strcat(strcpy(file->name + enc_len + 1, base), ".slm");
+ }
+
+ dreturn("%i (%s)", 0, file->name);
+ return 0;
+}
+int _GD_ZzslimOpen(int dirfd, struct _gd_raw_file* file, int swap __gd_unused,
+ unsigned int mode __gd_unused)
+{
+ char *filepath;
+
+ dtrace("%i, %p, <unused>, <unused>", dirfd, file);
+
+ /* this is easily broken, but the best we can do for now... */
+ filepath = gd_MakeFullPathOnly(file->D, dirfd, file->name);
+ if (filepath == NULL) {
+ dreturn("%i", 1);
+ return 1;
+ }
+
+ file->edata = slimopen(filepath, "r");
+ free(filepath);
+
+ if (file->edata == NULL) {
+ dreturn("%i", 1);
+ return 1;
+ }
+
+ file->mode = GD_RDONLY;
+ file->idata = 0;
+ dreturn("%i", 0);
+ return 0;
+}
+
+off64_t _GD_ZzslimSeek(struct _gd_raw_file* file, off64_t count,
+ gd_type_t data_type, unsigned int mode __gd_unused)
+{
+ off64_t n;
+
+ dtrace("%p, %lli, 0x%X, <unused>", file, (long long)count, data_type);
+
+ n = (off64_t)slimseek((SLIMFILE *)file->edata, (off_t)count *
+ GD_SIZE(data_type), SEEK_SET);
+
+ if (n == -1) {
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ dreturn("%lli", (long long)(n / GD_SIZE(data_type)));
+ return n;
+}
+
+ssize_t _GD_ZzslimRead(struct _gd_raw_file *restrict file, void *restrict ptr,
+ gd_type_t data_type, size_t nmemb)
+{
+ ssize_t n;
+
+ dtrace("%p, %p, 0x%X, %zu", file, ptr, data_type, nmemb);
+
+ n = slimread(ptr, GD_SIZE(data_type), nmemb, (SLIMFILE *)file->edata);
+
+ dreturn("%zu", n);
+ return n;
+}
+
+int _GD_ZzslimClose(struct _gd_raw_file *file)
+{
+ int ret;
+
+ dtrace("%p", file);
+
+ ret = slimclose((SLIMFILE *)file->edata);
+ if (!ret) {
+ file->idata = -1;
+ file->edata = NULL;
+ file->mode = 0;
+ }
+
+ dreturn("%i", ret);
+ return ret;
+}
+
+off64_t _GD_ZzslimSize(int dirfd, struct _gd_raw_file *file,
+ gd_type_t data_type, int swap __gd_unused)
+{
+ char *filepath;
+ off64_t size;
+
+ dtrace("%i, %p, 0x%X", dirfd, file, data_type);
+
+ /* this is easily broken, but the best we can do for now... */
+ filepath = gd_MakeFullPathOnly(file->D, dirfd, file->name);
+ if (filepath == NULL) {
+ dreturn("%i", 1);
+ return 1;
+ }
+
+ size = slimrawsize(filepath);
+ free(filepath);
+
+ if (size < 0) {
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ size /= GD_SIZE(data_type);
+
+ dreturn("%lli", (long long)size);
+ return size;
+}
Property changes on: trunk/getdata/test
___________________________________________________________________
Modified: svn:ignore
- Makefile
Makefile.in
*.o
*.odirfile
*.swp
*.exe
.deps
.libs
add
add_affix
add_alias
add_bit
add_bit_bitnum
add_bit_bitsize
add_bit_invalid
add_bit_numbits
add_carray
add_clincom
add_code
add_const
add_cpolynom
add_crecip
add_crecip89
add_divide
add_divide_invalid
add_duplicate
add_format
add_invalid
add_lincom
add_lincom_invalid
add_lincom_nfields
add_linterp
add_linterp_invalid
add_mplex
add_mplex_val
add_multiply
add_multiply_invalid
add_phase
add_phase_invalid
add_polynom
add_protect
add_raw
add_raw_include
add_raw_invalid
add_raw_spf
add_raw_type
add_rdonly
add_recip
add_resolv
add_sbit
add_scalar
add_scalar_carray
add_sort
add_spec
add_spec_directive
add_spec_invalid
add_spec_meta
add_spec_resolv
add_string
add_string_affix
add_type
add_window
add_window_op
alias_list
alias_list_alias
alias_list_missing
alias_num
alias_num_alias
alias_num_missing
alias_target
alias_target_alias
alias_target_missing
alter_bit_bitnum
alter_bit_numbits
alter_carray_len
alter_carray_type
alter_const
alter_cpolynom
alter_crecip
alter_crecip89
alter_crecip_zero
alter_divide
alter_entry
alter_entry_affix
alter_entry_hidden
alter_entry_recode
alter_entry_scalar2a
alter_entry_scalar2n
alter_entry_scalar3
alter_entry_scalar4
alter_lincom_23
alter_lincom_32
alter_lincom_input
alter_lincom_offset
alter_lincom_slope
alter_linterp
alter_linterp_move
alter_mplex
alter_mspec
alter_mspec_affix
alter_multiply
alter_phase
alter_polynom_coeff
alter_polynom_input
alter_polynom_ord
alter_raw_spf
alter_raw_type
alter_recip
alter_recip_zero
alter_spec
alter_spec_affix
alter_spec_meta
alter_window
ascii_add
ascii_get
ascii_get_get
ascii_nframes
ascii_put
bof
bof_lincom
bof_phase
bzip_get
bzip_get_get
bzip_move_from
bzip_nframes
bzip_put
close
close_bad
close_discard
close_null
convert_complex128_complex64
convert_complex128_float64
convert_complex128_int64
convert_complex128_uint64
convert_complex64_complex128
convert_complex64_float64
convert_complex64_int64
convert_complex64_uint64
convert_float32_complex128
convert_float32_complex64
convert_float32_float64
convert_float32_int16
convert_float32_int32
convert_float32_int64
convert_float32_int8
convert_float32_uint16
convert_float32_uint32
convert_float32_uint64
convert_float32_uint8
convert_float64_complex128
convert_float64_complex64
convert_float64_float32
convert_float64_int16
convert_float64_int32
convert_float64_int64
convert_float64_int8
convert_float64_uint16
convert_float64_uint32
convert_float64_uint64
convert_float64_uint8
convert_int16_complex128
convert_int16_complex64
convert_int16_float32
convert_int16_float64
convert_int16_int32
convert_int16_int64
convert_int16_int8
convert_int16_uint16
convert_int16_uint32
convert_int16_uint64
convert_int16_uint8
convert_int32_complex128
convert_int32_complex64
convert_int32_float32
convert_int32_float64
convert_int32_int16
convert_int32_int64
convert_int32_int8
convert_int32_uint16
convert_int32_uint32
convert_int32_uint64
convert_int32_uint8
convert_int64_complex128
convert_int64_complex64
convert_int64_float32
convert_int64_float64
convert_int64_int16
convert_int64_int32
convert_int64_int8
convert_int64_uint16
convert_int64_uint32
convert_int64_uint64
convert_int64_uint8
convert_int8_complex128
convert_int8_complex64
convert_int8_float32
convert_int8_float64
convert_int8_int16
convert_int8_int32
convert_int8_int64
convert_int8_uint16
convert_int8_uint32
convert_int8_uint64
convert_int8_uint8
convert_uint16_complex128
convert_uint16_complex64
convert_uint16_float32
convert_uint16_float64
convert_uint16_int16
convert_uint16_int32
convert_uint16_int64
convert_uint16_int8
convert_uint16_uint32
convert_uint16_uint64
convert_uint16_uint8
convert_uint32_complex128
convert_uint32_complex64
convert_uint32_float32
convert_uint32_float64
convert_uint32_int16
convert_uint32_int32
convert_uint32_int64
convert_uint32_int8
convert_uint32_uint16
convert_uint32_uint64
convert_uint32_uint8
convert_uint64_complex128
convert_uint64_complex64
convert_uint64_float32
convert_uint64_float64
convert_uint64_int16
convert_uint64_int32
convert_uint64_int64
convert_uint64_int8
convert_uint64_uint16
convert_uint64_uint32
convert_uint64_uint8
convert_uint8_complex128
convert_uint8_complex64
convert_uint8_float32
convert_uint8_float64
convert_uint8_int16
convert_uint8_int32
convert_uint8_int64
convert_uint8_int8
convert_uint8_uint16
convert_uint8_uint32
convert_uint8_uint64
creat
creat_excl
creat_rdonly
cvlist
cvlist_array
cvlist_array_hidden
cvlist_array_meta
cvlist_array_meta_hidden
cvlist_hidden
cvlist_invalid
cvlist_meta
cvlist_meta_hidden
cvlist_meta_invalid
del
del_carray
del_carray_deref
del_const
del_const_deref
del_const_force
del_data
del_derived
del_derived_after
del_derived_force
del_meta
del_meta_force
dfes_bit
dfes_divide
dfes_lincom
dfes_linterp
dfes_multiply
dfes_null
dfes_phase
dfes_raw
dfes_recip
dfes_zero
encode_alter
encode_get
encode_move
endian_alter
endian_alter_sie
endian_get
endian_move
entry_bad_code
entry_bit
entry_bit_scalar
entry_divide
entry_invalid
entry_lincom
entry_lincom_scalar
entry_linterp
entry_mplex
entry_mplex_scalar
entry_multiply
entry_phase
entry_phase_scalar
entry_polynom
entry_polynom_scalar
entry_raw
entry_raw_scalar
entry_raw_scalar_code
entry_raw_scalar_type
entry_recip
entry_scalar_repr
entry_type
entry_type_alias
entry_window
entry_window_scalar
eof
eof_index
eof_lincom
eof_phase
error
error_error
error_num
error_short
file
file_code
file_type
flist
flist_hidden
flist_invalid
flist_meta
flist_meta_hidden
flist_meta_invalid
flist_type
flist_type_hidden
flist_type_invalid
flist_type_meta
flist_type_meta_hidden
flist_type_meta_invalid
flush
flush_all
flush_bad_code
flush_invalid
flush_meta
flush_spec
foffs_alter
foffs_get
foffs_move
fragment_affix
fragment_affix_alter
fragment_affix_alter2
fragment_affix_dup
fragment_index
fragment_index_alias
fragment_name
fragment_name_oor
fragment_num
fragment_parent
get64
get_bad_code
get_bit
get_carray
get_carray_len
get_carray_slice
get_char
get_clincom
get_complex128
get_complex64
get_const
get_const_complex
get_const_repr
get_cpolynom
get_divide
get_endian16
get_endian32
get_endian64
get_endian8
get_endian_complex128_arm
get_endian_complex128_big
get_endian_complex128_little
get_endian_complex64_arm
get_endian_complex64_big
get_endian_complex64_little
get_endian_float32_arm
get_endian_float32_big
get_endian_float32_little
get_endian_float64_arm
get_endian_float64_big
get_endian_float64_little
get_ff
get_float32
get_float64
get_foffs
get_fs
get_here
get_here_foffs
get_heres
get_int16
get_int32
get_int64
get_int8
get_invalid
get_lincom1
get_lincom2
get_lincom3
get_lincom_noin
get_lincom_non
get_linterp
get_linterp_noin
get_linterp_notab
get_linterp_sort
get_mplex
get_mplex_lb
get_multiply
get_multiply_noin
get_nonexistent
get_null
get_off64
get_phase
get_phase_affix
get_polynom
get_polynom_noin
get_recip
get_recip_const
get_recurse
get_rofs
get_sbit
get_sf
get_ss
get_type
get_uint16
get_uint32
get_uint64
get_window
get_window_clr
get_window_ge
get_window_gt
get_window_le
get_window_lt
get_window_ne
get_window_set
get_zero
global_name
global_ref
global_ref_empty
global_ref_set
gzip_add
gzip_get
gzip_get_get
gzip_get_put
gzip_move_from
gzip_move_to
gzip_nframes
gzip_put
gzip_put_get
header_complex
hide
hide_hidden
hide_unhide
include
include_accmode
include_affix
include_auto
include_cb
include_creat
include_ignore
include_index
include_invalid
include_nonexistent
include_pc
include_ref
include_syntax
index
index_domain
index_range
legacy_get
legacy_get_put
legacy_get_rofs
legacy_nframes
legacy_nonexistent
legacy_put
legacy_spf
lzma_get
lzma_nframes
madd
madd_affix
madd_alias
madd_bit
madd_bit_invalid
madd_carray
madd_clincom
madd_const
madd_cpolynom
madd_crecip
madd_crecip89
madd_divide
madd_index
madd_lincom
madd_lincom_invalid
madd_linterp
madd_linterp_invalid
madd_mplex
madd_multiply
madd_multiply_invalid
madd_phase
madd_phase_invalid
madd_polynom
madd_recip
madd_sbit
madd_spec
madd_spec_directive
madd_spec_invalid
madd_spec_resolv
madd_string
madd_window
move
move_affix
move_affix_dup
move_alias
move_data_enc_ar
move_data_enc_ra
move_data_endian
move_data_foffs
move_data_nop
move_index
move_meta
move_protect
move_subdir
name
name_affix
name_affix_bad
name_after
name_after_const
name_dup
name_move
name_update
name_update_const
nfields
nfields_hidden
nfields_invalid
nfields_type
nfields_type_hidden
nfields_type_invalid
nfields_vector
nfields_vector_hidden
nfields_vector_invalid
nframes
nframes64
nframes_empty
nframes_invalid
nframes_off64
nframes_spf
nmeta
nmeta_hidden
nmeta_invalid
nmeta_parent
nmeta_type
nmeta_type_hidden
nmeta_type_invalid
nmeta_type_parent
nmeta_vectors
nmeta_vectors_del
nmeta_vectors_hidden
nmeta_vectors_invalid
nmeta_vectors_parent
open
open_cb_abort
open_cb_cont
open_cb_ignore
open_cb_invalid
open_cb_rescan
open_eaccess
open_nonexistent
open_notdirfile
parse_alias
parse_alias_code
parse_alias_dup
parse_alias_meta
parse_alias_missing
parse_badline
parse_bit
parse_bit4
parse_bit_bitnum
parse_bit_bitsize
parse_bit_ncols
parse_bit_numbits
parse_bit_scalar
parse_carray
parse_carray_long
parse_const
parse_const_ncols
parse_divide
parse_duplicate
parse_duplicate_ignore
parse_endian_bad
parse_endian_big
parse_endian_force
parse_endian_little
parse_endian_slash
parse_eol
parse_foffs
parse_foffs_include
parse_foffs_slash
parse_hidden
parse_hidden_field
parse_hidden_meta
parse_include
parse_include_absolute
parse_include_absrel
parse_include_loop
parse_include_nonexistent
parse_include_prefix
parse_include_prefix_dup
parse_include_preprefix
parse_include_relabs
parse_include_relrel
parse_include_slash
parse_include_suffix
parse_include_sufsuffix
parse_index
parse_lincom
parse_lincom_ncols1
parse_lincom_ncols2
parse_lincom_nfields
parse_lincom_nofields
parse_lincom_non
parse_lincom_non_ncols
parse_lincom_scalar
parse_linterp
parse_linterp_ncols
parse_malias
parse_malias_dup
parse_meta
parse_meta_affix
parse_meta_alias
parse_meta_implicit
parse_meta_implicit2
parse_meta_implicit_affix
parse_meta_index
parse_meta_index2
parse_meta_jump
parse_meta_malias
parse_meta_meta
parse_meta_parent
parse_meta_raw
parse_mplex
parse_mplex_ncols
parse_mplex_scalar
parse_multiply
parse_multiply_ncols
parse_name
parse_name_dot
parse_name_ext
parse_name_pedantic
parse_ncols
parse_phase
parse_phase_ncols
parse_phase_scalar
parse_polynom
parse_polynom_ncols1
parse_polynom_ncols2
parse_polynom_scalar
parse_protect_all
parse_protect_bad
parse_protect_data
parse_protect_format
parse_protect_none
parse_quote
parse_quote_mismatch
parse_raw
parse_raw_char
parse_raw_ncols
parse_raw_scalar
parse_raw_spf
parse_raw_type
parse_recip
parse_ref
parse_ref_nonexistent
parse_sbit
parse_sort
parse_string
parse_string_ncols
parse_string_null
parse_version
parse_version_89
parse_version_98
parse_version_include
parse_version_p8
parse_version_p9
parse_version_permissive
parse_version_slash
parse_whitespace
parse_window
parse_window_ncols
parse_window_op
parse_window_scalar
protect_alter
protect_get
put64
put_bad_code
put_bit
put_bof
put_carray
put_carray_slice
put_char
put_complex128
put_complex64
put_const
put_const_protect
put_divide
put_endian16
put_endian32
put_endian64
put_endian8
put_endian_complex128_arm
put_endian_complex128_big
put_endian_complex128_little
put_endian_complex64_arm
put_endian_complex64_big
put_endian_complex64_little
put_endian_float32_arm
put_endian_float32_big
put_endian_float32_little
put_endian_float64_arm
put_endian_float64_big
put_endian_float64_little
put_ff
put_float32
put_float64
put_foffs
put_fs
put_here
put_heres
put_int16
put_int32
put_int64
put_int8
put_invalid
put_lincom1
put_lincom2
put_lincom_noin
put_linterp
put_linterp_noin
put_linterp_nomono
put_linterp_notab
put_linterp_reverse
put_mplex
put_multiply
put_null
put_off64
put_phase
put_phase_noin
put_polynom1
put_polynom2
put_polynom_noin
put_protect
put_rdonly
put_recip
put_recurse
put_repr
put_rofs
put_sbit
put_sf
put_ss
put_string
put_string_protect
put_type
put_uint16
put_uint32
put_uint64
put_window
ref
ref_none
ref_two
repr_a
repr_float32
repr_float64
repr_i
repr_int16
repr_int32
repr_int64
repr_int8
repr_m
repr_r
repr_real_a
repr_real_i
repr_real_m
repr_real_r
repr_uint16
repr_uint32
repr_uint64
repr_uint8
seek64
seek_cur
seek_end
seek_foffs
seek_set
sie_get_big
sie_get_little
sie_move_from
sie_move_to
sie_nframes_big
sie_nframes_little
sie_put_big
sie_put_little
slim_get
slim_nframes
slim_put
spf
spf_alias
spf_alias_meta
spf_alias_missing
spf_divide
spf_lincom
spf_multiply
spf_polynom
spf_recip
spf_recurse
svlist
svlist_hidden
svlist_invalid
svlist_meta
svlist_meta_hidden
svlist_meta_invalid
tell
tell64
trunc
trunc_rdonly
trunc_rofs
unclude
unclude_del
unclude_move
version_0
version_0_write
version_1
version_1_write
version_2
version_2_write
version_3
version_3_write
version_4
version_4_write
version_5
version_5_strict
version_5_write
version_6
version_6_strict
version_6_write
version_7
version_7_strict
version_7_write
version_8
version_8_strict
version_8_write
version_9
version_9_strict
version_9_write
vlist
vlist_alias
vlist_hidden
vlist_invalid
vlist_meta
vlist_meta_hidden
vlist_meta_invalid
xz_get
xz_nframes
zzip_data
zzip_get
zzip_get_get
zzip_nframes
+ Makefile
Makefile.in
*.o
*.odirfile
*.swp
*.exe
.deps
.libs
add
add_affix
add_alias
add_bit
add_bit_bitnum
add_bit_bitsize
add_bit_invalid
add_bit_numbits
add_carray
add_clincom
add_code
add_const
add_cpolynom
add_crecip
add_crecip89
add_divide
add_divide_invalid
add_duplicate
add_format
add_invalid
add_lincom
add_lincom_invalid
add_lincom_nfields
add_linterp
add_linterp_invalid
add_mplex
add_mplex_val
add_multiply
add_multiply_invalid
add_phase
add_phase_invalid
add_polynom
add_protect
add_raw
add_raw_include
add_raw_invalid
add_raw_spf
add_raw_type
add_rdonly
add_recip
add_resolv
add_sbit
add_scalar
add_scalar_carray
add_sort
add_spec
add_spec_directive
add_spec_invalid
add_spec_meta
add_spec_resolv
add_string
add_string_affix
add_type
add_window
add_window_op
alias_list
alias_list_alias
alias_list_missing
alias_num
alias_num_alias
alias_num_missing
alias_target
alias_target_alias
alias_target_missing
alter_bit_bitnum
alter_bit_numbits
alter_carray_len
alter_carray_type
alter_const
alter_cpolynom
alter_crecip
alter_crecip89
alter_crecip_zero
alter_divide
alter_entry
alter_entry_affix
alter_entry_hidden
alter_entry_recode
alter_entry_scalar2a
alter_entry_scalar2n
alter_entry_scalar3
alter_entry_scalar4
alter_lincom_23
alter_lincom_32
alter_lincom_input
alter_lincom_offset
alter_lincom_slope
alter_linterp
alter_linterp_move
alter_mplex
alter_mspec
alter_mspec_affix
alter_multiply
alter_phase
alter_polynom_coeff
alter_polynom_input
alter_polynom_ord
alter_raw_spf
alter_raw_type
alter_recip
alter_recip_zero
alter_spec
alter_spec_affix
alter_spec_meta
alter_window
ascii_add
ascii_get
ascii_get_get
ascii_nframes
ascii_put
bof
bof_lincom
bof_phase
bzip_get
bzip_get_get
bzip_move_from
bzip_nframes
bzip_put
close
close_bad
close_discard
close_null
convert_complex128_complex64
convert_complex128_float64
convert_complex128_int64
convert_complex128_uint64
convert_complex64_complex128
convert_complex64_float64
convert_complex64_int64
convert_complex64_uint64
convert_float32_complex128
convert_float32_complex64
convert_float32_float64
convert_float32_int16
convert_float32_int32
convert_float32_int64
convert_float32_int8
convert_float32_uint16
convert_float32_uint32
convert_float32_uint64
convert_float32_uint8
convert_float64_complex128
convert_float64_complex64
convert_float64_float32
convert_float64_int16
convert_float64_int32
convert_float64_int64
convert_float64_int8
convert_float64_uint16
convert_float64_uint32
convert_float64_uint64
convert_float64_uint8
convert_int16_complex128
convert_int16_complex64
convert_int16_float32
convert_int16_float64
convert_int16_int32
convert_int16_int64
convert_int16_int8
convert_int16_uint16
convert_int16_uint32
convert_int16_uint64
convert_int16_uint8
convert_int32_complex128
convert_int32_complex64
convert_int32_float32
convert_int32_float64
convert_int32_int16
convert_int32_int64
convert_int32_int8
convert_int32_uint16
convert_int32_uint32
convert_int32_uint64
convert_int32_uint8
convert_int64_complex128
convert_int64_complex64
convert_int64_float32
convert_int64_float64
convert_int64_int16
convert_int64_int32
convert_int64_int8
convert_int64_uint16
convert_int64_uint32
convert_int64_uint64
convert_int64_uint8
convert_int8_complex128
convert_int8_complex64
convert_int8_float32
convert_int8_float64
convert_int8_int16
convert_int8_int32
convert_int8_int64
convert_int8_uint16
convert_int8_uint32
convert_int8_uint64
convert_int8_uint8
convert_uint16_complex128
convert_uint16_complex64
convert_uint16_float32
convert_uint16_float64
convert_uint16_int16
convert_uint16_int32
convert_uint16_int64
convert_uint16_int8
convert_uint16_uint32
convert_uint16_uint64
convert_uint16_uint8
convert_uint32_complex128
convert_uint32_complex64
convert_uint32_float32
convert_uint32_float64
convert_uint32_int16
convert_uint32_int32
convert_uint32_int64
convert_uint32_int8
convert_uint32_uint16
convert_uint32_uint64
convert_uint32_uint8
convert_uint64_complex128
convert_uint64_complex64
convert_uint64_float32
convert_uint64_float64
convert_uint64_int16
convert_uint64_int32
convert_uint64_int64
convert_uint64_int8
convert_uint64_uint16
convert_uint64_uint32
convert_uint64_uint8
convert_uint8_complex128
convert_uint8_complex64
convert_uint8_float32
convert_uint8_float64
convert_uint8_int16
convert_uint8_int32
convert_uint8_int64
convert_uint8_int8
convert_uint8_uint16
convert_uint8_uint32
convert_uint8_uint64
creat
creat_excl
creat_rdonly
cvlist
cvlist_array
cvlist_array_hidden
cvlist_array_meta
cvlist_array_meta_hidden
cvlist_hidden
cvlist_invalid
cvlist_meta
cvlist_meta_hidden
cvlist_meta_invalid
del
del_carray
del_carray_deref
del_const
del_const_deref
del_const_force
del_data
del_derived
del_derived_after
del_derived_force
del_meta
del_meta_force
dfes_bit
dfes_divide
dfes_lincom
dfes_linterp
dfes_multiply
dfes_null
dfes_phase
dfes_raw
dfes_recip
dfes_zero
encode_alter
encode_get
encode_move
endian_alter
endian_alter_sie
endian_get
endian_move
entry_bad_code
entry_bit
entry_bit_scalar
entry_divide
entry_invalid
entry_lincom
entry_lincom_scalar
entry_linterp
entry_mplex
entry_mplex_scalar
entry_multiply
entry_phase
entry_phase_scalar
entry_polynom
entry_polynom_scalar
entry_raw
entry_raw_scalar
entry_raw_scalar_code
entry_raw_scalar_type
entry_recip
entry_scalar_repr
entry_type
entry_type_alias
entry_window
entry_window_scalar
eof
eof_index
eof_lincom
eof_phase
error
error_error
error_num
error_short
file
file_code
file_type
flist
flist_hidden
flist_invalid
flist_meta
flist_meta_hidden
flist_meta_invalid
flist_type
flist_type_hidden
flist_type_invalid
flist_type_meta
flist_type_meta_hidden
flist_type_meta_invalid
flush
flush_all
flush_bad_code
flush_invalid
flush_meta
flush_spec
foffs_alter
foffs_get
foffs_move
fragment_affix
fragment_affix_alter
fragment_affix_alter2
fragment_affix_dup
fragment_index
fragment_index_alias
fragment_name
fragment_name_oor
fragment_num
fragment_parent
get64
get_bad_code
get_bit
get_carray
get_carray_len
get_carray_slice
get_char
get_clincom
get_complex128
get_complex64
get_const
get_const_complex
get_const_repr
get_cpolynom
get_divide
get_endian16
get_endian32
get_endian64
get_endian8
get_endian_complex128_arm
get_endian_complex128_big
get_endian_complex128_little
get_endian_complex64_arm
get_endian_complex64_big
get_endian_complex64_little
get_endian_float32_arm
get_endian_float32_big
get_endian_float32_little
get_endian_float64_arm
get_endian_float64_big
get_endian_float64_little
get_ff
get_float32
get_float64
get_foffs
get_fs
get_here
get_here_foffs
get_heres
get_int16
get_int32
get_int64
get_int8
get_invalid
get_lincom1
get_lincom2
get_lincom3
get_lincom_noin
get_lincom_non
get_linterp
get_linterp_noin
get_linterp_notab
get_linterp_sort
get_mplex
get_mplex_lb
get_multiply
get_multiply_noin
get_nonexistent
get_null
get_off64
get_phase
get_phase_affix
get_polynom
get_polynom_noin
get_recip
get_recip_const
get_recurse
get_rofs
get_sbit
get_sf
get_ss
get_type
get_uint16
get_uint32
get_uint64
get_window
get_window_clr
get_window_ge
get_window_gt
get_window_le
get_window_lt
get_window_ne
get_window_set
get_zero
global_name
global_ref
global_ref_empty
global_ref_set
gzip_add
gzip_get
gzip_get_get
gzip_get_put
gzip_move_from
gzip_move_to
gzip_nframes
gzip_put
gzip_put_get
header_complex
hide
hide_hidden
hide_unhide
include
include_accmode
include_affix
include_auto
include_cb
include_creat
include_ignore
include_index
include_invalid
include_nonexistent
include_pc
include_ref
include_syntax
index
index_domain
index_range
legacy_get
legacy_get_put
legacy_get_rofs
legacy_nframes
legacy_nonexistent
legacy_put
legacy_spf
lzma_get
lzma_nframes
madd
madd_affix
madd_alias
madd_bit
madd_bit_invalid
madd_carray
madd_clincom
madd_const
madd_cpolynom
madd_crecip
madd_crecip89
madd_divide
madd_index
madd_lincom
madd_lincom_invalid
madd_linterp
madd_linterp_invalid
madd_mplex
madd_multiply
madd_multiply_invalid
madd_phase
madd_phase_invalid
madd_polynom
madd_recip
madd_sbit
madd_spec
madd_spec_directive
madd_spec_invalid
madd_spec_resolv
madd_string
madd_window
move
move_affix
move_affix_dup
move_alias
move_data_enc_ar
move_data_enc_ra
move_data_endian
move_data_foffs
move_data_nop
move_index
move_meta
move_protect
move_subdir
name
name_affix
name_affix_bad
name_after
name_after_const
name_dup
name_move
name_update
name_update_const
nfields
nfields_hidden
nfields_invalid
nfields_type
nfields_type_hidden
nfields_type_invalid
nfields_vector
nfields_vector_hidden
nfields_vector_invalid
nframes
nframes64
nframes_empty
nframes_invalid
nframes_off64
nframes_spf
nmeta
nmeta_hidden
nmeta_invalid
nmeta_parent
nmeta_type
nmeta_type_hidden
nmeta_type_invalid
nmeta_type_parent
nmeta_vectors
nmeta_vectors_del
nmeta_vectors_hidden
nmeta_vectors_invalid
nmeta_vectors_parent
open
open_cb_abort
open_cb_cont
open_cb_ignore
open_cb_invalid
open_cb_rescan
open_eaccess
open_nonexistent
open_notdirfile
parse_alias
parse_alias_code
parse_alias_dup
parse_alias_meta
parse_alias_missing
parse_badline
parse_bit
parse_bit4
parse_bit_bitnum
parse_bit_bitsize
parse_bit_ncols
parse_bit_numbits
parse_bit_scalar
parse_carray
parse_carray_long
parse_const
parse_const_ncols
parse_divide
parse_duplicate
parse_duplicate_ignore
parse_endian_bad
parse_endian_big
parse_endian_force
parse_endian_little
parse_endian_slash
parse_eol
parse_foffs
parse_foffs_include
parse_foffs_slash
parse_hidden
parse_hidden_field
parse_hidden_meta
parse_include
parse_include_absolute
parse_include_absrel
parse_include_loop
parse_include_nonexistent
parse_include_prefix
parse_include_prefix_dup
parse_include_preprefix
parse_include_relabs
parse_include_relrel
parse_include_slash
parse_include_suffix
parse_include_sufsuffix
parse_index
parse_lincom
parse_lincom_ncols1
parse_lincom_ncols2
parse_lincom_nfields
parse_lincom_nofields
parse_lincom_non
parse_lincom_non_ncols
parse_lincom_scalar
parse_linterp
parse_linterp_ncols
parse_malias
parse_malias_dup
parse_meta
parse_meta_affix
parse_meta_alias
parse_meta_implicit
parse_meta_implicit2
parse_meta_implicit_affix
parse_meta_index
parse_meta_index2
parse_meta_jump
parse_meta_malias
parse_meta_meta
parse_meta_parent
parse_meta_raw
parse_mplex
parse_mplex_ncols
parse_mplex_scalar
parse_multiply
parse_multiply_ncols
parse_name
parse_name_dot
parse_name_ext
parse_name_pedantic
parse_ncols
parse_phase
parse_phase_ncols
parse_phase_scalar
parse_polynom
parse_polynom_ncols1
parse_polynom_ncols2
parse_polynom_scalar
parse_protect_all
parse_protect_bad
parse_protect_data
parse_protect_format
parse_protect_none
parse_quote
parse_quote_mismatch
parse_raw
parse_raw_char
parse_raw_ncols
parse_raw_scalar
parse_raw_spf
parse_raw_type
parse_recip
parse_ref
parse_ref_nonexistent
parse_sbit
parse_sort
parse_string
parse_string_ncols
parse_string_null
parse_version
parse_version_89
parse_version_98
parse_version_include
parse_version_p8
parse_version_p9
parse_version_permissive
parse_version_slash
parse_whitespace
parse_window
parse_window_ncols
parse_window_op
parse_window_scalar
protect_alter
protect_get
put64
put_bad_code
put_bit
put_bof
put_carray
put_carray_slice
put_char
put_complex128
put_complex64
put_const
put_const_protect
put_divide
put_endian16
put_endian32
put_endian64
put_endian8
put_endian_complex128_arm
put_endian_complex128_big
put_endian_complex128_little
put_endian_complex64_arm
put_endian_complex64_big
put_endian_complex64_little
put_endian_float32_arm
put_endian_float32_big
put_endian_float32_little
put_endian_float64_arm
put_endian_float64_big
put_endian_float64_little
put_ff
put_float32
put_float64
put_foffs
put_fs
put_here
put_heres
put_int16
put_int32
put_int64
put_int8
put_invalid
put_lincom1
put_lincom2
put_lincom_noin
put_linterp
put_linterp_noin
put_linterp_nomono
put_linterp_notab
put_linterp_reverse
put_mplex
put_multiply
put_null
put_off64
put_phase
put_phase_noin
put_polynom1
put_polynom2
put_polynom_noin
put_protect
put_rdonly
put_recip
put_recurse
put_repr
put_rofs
put_sbit
put_sf
put_ss
put_string
put_string_protect
put_type
put_uint16
put_uint32
put_uint64
put_window
ref
ref_none
ref_two
repr_a
repr_float32
repr_float64
repr_i
repr_int16
repr_int32
repr_int64
repr_int8
repr_m
repr_r
repr_real_a
repr_real_i
repr_real_m
repr_real_r
repr_uint16
repr_uint32
repr_uint64
repr_uint8
seek64
seek_cur
seek_end
seek_foffs
seek_set
sie_get_big
sie_get_little
sie_move_from
sie_move_to
sie_nframes_big
sie_nframes_little
sie_put_big
sie_put_little
slim_get
slim_nframes
slim_put
spf
spf_alias
spf_alias_meta
spf_alias_missing
spf_divide
spf_lincom
spf_multiply
spf_polynom
spf_recip
spf_recurse
svlist
svlist_hidden
svlist_invalid
svlist_meta
svlist_meta_hidden
svlist_meta_invalid
tell
tell64
trunc
trunc_rdonly
trunc_rofs
unclude
unclude_del
unclude_move
version_0
version_0_write
version_1
version_1_write
version_2
version_2_write
version_3
version_3_write
version_4
version_4_write
version_5
version_5_strict
version_5_write
version_6
version_6_strict
version_6_write
version_7
version_7_strict
version_7_write
version_8
version_8_strict
version_8_write
version_9
version_9_strict
version_9_write
vlist
vlist_alias
vlist_hidden
vlist_invalid
vlist_meta
vlist_meta_hidden
vlist_meta_invalid
xz_get
xz_nframes
zzip_data
zzip_get
zzip_get_get
zzip_nframes
zzslim_get
zzslim_nframes
Modified: trunk/getdata/test/Makefile.am
===================================================================
--- trunk/getdata/test/Makefile.am 2012-01-17 01:46:27 UTC (rev 649)
+++ trunk/getdata/test/Makefile.am 2012-01-18 03:54:15 UTC (rev 650)
@@ -347,6 +347,8 @@
ZZIP_TESTS=zzip_data zzip_get zzip_get_get zzip_nframes
+ZZSLIM_TESTS=zzslim_get zzslim_nframes
+
TESTS=$(ADD_TESTS) $(ALIAS_TESTS) $(ALTER_TESTS) $(ASCII_TESTS) \
$(BOF_TESTS) $(BZIP_TESTS) $(CLOSE_TESTS) $(CONVERT_TESTS) \
$(CREAT_TESTS) $(CVLIST_TESTS) $(DEL_TESTS) $(DFES_TESTS) \
@@ -360,7 +362,7 @@
$(PUT_TESTS) $(REF_TESTS) $(REPR_TESTS) $(SEEK_TESTS) \
$(SIE_TESTS) $(SLIM_TESTS) $(SPF_TESTS) $(SVLIST_TESTS) \
$(TELL_TESTS) $(TRUNC_TESTS) $(UNCLUDE_TESTS) $(VERSION_TESTS) \
- $(VLIST_TESTS) $(XZ_TESTS) $(ZZIP_TESTS)
+ $(VLIST_TESTS) $(XZ_TESTS) $(ZZIP_TESTS) $(ZZSLIM_TESTS)
check_PROGRAMS=$(TESTS)
Added: trunk/getdata/test/zzslim_get.c
===================================================================
--- trunk/getdata/test/zzslim_get.c (rev 0)
+++ trunk/getdata/test/zzslim_get.c 2012-01-18 03:54:15 UTC (rev 650)
@@ -0,0 +1,95 @@
+/* Copyright (C) 2012 D. V. Wiebe
+ *
+ ***************************************************************************
+ *
+ * This file is part of the GetData project.
+ *
+ * GetData is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * GetData is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with GetData; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+#include "test.h"
+
+int main(void)
+{
+#if !defined(TEST_ZZIP) || !defined(TEST_SLIM)
+ return 77;
+#else
+ const char *filedir = "dirfile";
+ const char *format = "dirfile/format";
+ const char *data = "dirfile/data";
+ const char *dataslm = "dirfile/data.slm";
+ const char *testzip = "dirfile/test.zip";
+ const char *format_data =
+ "data RAW UINT16 8\n"
+ "/ENCODING zzslim test\n";
+ uint16_t c[8];
+ char command[4096];
+ uint16_t data_data[256];
+ int fd, n, error, i, r = 0;
+ DIRFILE *D;
+
+ memset(c, 0, 8);
+ rmdirfile();
+ mkdir(filedir, 0777);
+
+ for (fd = 0; fd < 256; ++fd)
+ data_data[fd] = (unsigned char)fd;
+
+ fd = open(format, O_CREAT | O_EXCL | O_WRONLY, 0666);
+ write(fd, format_data, strlen(format_data));
+ close(fd);
+
+ fd = open(data, O_CREAT | O_EXCL | O_WRONLY | O_BINARY, 0666);
+ write(fd, data_data, 256 * sizeof(uint16_t));
+ close(fd);
+
+ /* compress, twice */
+ snprintf(command, 4096, "%s -k %s > /dev/null", SLIM, data);
+ if (gd_system(command))
+ return 1;
+ chdir(filedir);
+ snprintf(command, 4096, "%s test data.slm > /dev/null", ZIP);
+ if (gd_system(command))
+ return 1;
+ chdir("..");
+ unlink(dataslm);
+ unlink(data);
+
+#ifdef USE_ZZSLIM
+ D = gd_open(filedir, GD_RDONLY | GD_VERBOSE);
+#else
+ D = gd_open(filedir, GD_RDONLY);
+#endif
+ n = gd_getdata(D, "data", 5, 0, 1, 0, GD_UINT16, c);
+ error = gd_error(D);
+
+ gd_close(D);
+
+ unlink(testzip);
+ unlink(format);
+ rmdir(filedir);
+
+#ifdef USE_ZZSLIM
+ CHECKI(error, 0);
+ CHECKI(n, 8);
+ for (i = 0; i < 8; ++i)
+ CHECKIi(i,c[i], 40 + i);
+#else
+ CHECKI(error, GD_E_UNSUPPORTED);
+ CHECKI(n,0);
+#endif
+
+ return r;
+#endif
+}
Added: trunk/getdata/test/zzslim_nframes.c
===================================================================
--- trunk/getdata/test/zzslim_nframes.c (rev 0)
+++ trunk/getdata/test/zzslim_nframes.c 2012-01-18 03:54:15 UTC (rev 650)
@@ -0,0 +1,99 @@
+/* Copyright (C) 2008-2011 D. V. Wiebe
+ *
+ ***************************************************************************
+ *
+ * This file is part of the GetData project.
+ *
+ * GetData is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * GetData is distributed in the hope that it ...
[truncated message content] |
|
From: <ket...@us...> - 2012-01-17 01:46:34
|
Revision: 649
http://getdata.svn.sourceforge.net/getdata/?rev=649&view=rev
Author: ketiltrout
Date: 2012-01-17 01:46:27 +0000 (Tue, 17 Jan 2012)
Log Message:
-----------
This is a half-finished implementation of framefile reading via GetData inspired
by a conversation between Barth and I. In implementing it, I've discovered
deficiencies inherent in the shoehorning of row-wise data manipulation into
GetData (not terribly surprising) which make it unsuited for it's originally
intended task, so we're putting it on the back burner for now. It requires
(relatively benign) changes to the Dirfile Standards above and beyond the
specification of a new encoding scheme.
I think using the (currently vapourware) rewritten defile will be a better
solution for interfacing framefiles and GetData.
We'll leave this code here for now, in case we come up with a reason to add it
after all.
Modified Paths:
--------------
branches/getdata-frame/configure.ac
branches/getdata-frame/src/Makefile.am
branches/getdata-frame/src/close.c
branches/getdata-frame/src/del.c
branches/getdata-frame/src/encoding.c
branches/getdata-frame/src/entry.c
branches/getdata-frame/src/errors.c
branches/getdata-frame/src/flimits.c
branches/getdata-frame/src/flush.c
branches/getdata-frame/src/getdata.h.in
branches/getdata-frame/src/include.c
branches/getdata-frame/src/internal.h
branches/getdata-frame/src/mod.c
branches/getdata-frame/src/move.c
branches/getdata-frame/src/name.c
branches/getdata-frame/src/nframes.c
branches/getdata-frame/src/open.c
branches/getdata-frame/src/parse.c
branches/getdata-frame/src/putdata.c
branches/getdata-frame/src/spf.c
branches/getdata-frame/src/zzip.c
Added Paths:
-----------
branches/getdata-frame/src/frame.c
Modified: branches/getdata-frame/configure.ac
===================================================================
--- branches/getdata-frame/configure.ac 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/configure.ac 2012-01-17 01:46:27 UTC (rev 649)
@@ -51,7 +51,7 @@
dnl Features
BUINDINGS_BUILT=
BINDINGS_LEFT=
-ENCODINGS_BUILT=" raw ascii sie"
+ENCODINGS_BUILT=" raw ascii frame sie"
ENCODINGS_LEFT=
PRIVATE_LIBS=
Modified: branches/getdata-frame/src/Makefile.am
===================================================================
--- branches/getdata-frame/src/Makefile.am 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/Makefile.am 2012-01-17 01:46:27 UTC (rev 649)
@@ -116,10 +116,10 @@
libgetdata_la_SOURCES = add.c ascii.c ${BZIP2_C} close.c common.c compat.c \
constant.c ${DEBUG_C} del.c encoding.c endian.c \
entry.c errors.c field_list.c flimits.c flush.c fpos.c \
- fragment.c getdata.c globals.c ${GZIP_C} index.c \
- include.c ${LEGACY_C} ${LZMA_C} meta_list.c mod.c \
- move.c name.c native.c nfields.c nframes.c nmeta.c \
- open.c parse.c protect.c putdata.c raw.c sie.c \
+ fragment.c frame.c getdata.c globals.c ${GZIP_C} \
+ index.c include.c ${LEGACY_C} ${LZMA_C} meta_list.c \
+ mod.c move.c name.c native.c nfields.c nframes.c \
+ nmeta.c open.c parse.c protect.c putdata.c raw.c sie.c \
${SLIM_C} spf.c string.c types.c ${ZZIP_C} \
${GETDATA_LEGACY_H} internal.h nan.h
libgetdata_la_LDFLAGS = $(EXPORT_DYNAMIC) -export-symbols-regex '^[^_]' \
Modified: branches/getdata-frame/src/close.c
===================================================================
--- branches/getdata-frame/src/close.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/close.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -33,7 +33,9 @@
_GD_FreeE(D, D->entry[i], 1);
for (j = 0; j < D->n_fragment; ++j) {
- free(D->fragment[j].enc_data);
+ for (i = 0; i < D->fragment[j].n_encdata; ++i)
+ free(D->fragment[j].encdata[i]);
+ free(D->fragment[j].encdata);
free(D->fragment[j].prefix);
free(D->fragment[j].suffix);
free(D->fragment[j].bname);
Modified: branches/getdata-frame/src/del.c
===================================================================
--- branches/getdata-frame/src/del.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/del.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -332,8 +332,10 @@
}
if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D,
- D->fragment[E->fragment_index].enc_data, E->e->u.raw.file,
- E->e->u.raw.filebase, 0, 0))
+ D->fragment[E->fragment_index].n_encdata,
+ D->fragment[E->fragment_index].encdata, E->e->u.raw.n_rawform,
+ E->e->u.raw.rawform, E->e->u.raw.file, E->e->u.raw.filebase,
+ E->EN(raw,data_type), E->EN(raw,spf), 0, 0))
{
free(del_list);
dreturn("%i", -1);
Modified: branches/getdata-frame/src/encoding.c
===================================================================
--- branches/getdata-frame/src/encoding.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/encoding.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -35,13 +35,14 @@
#define GD_EF_NULL_SET &_GD_GenericName, NULL, NULL, NULL, NULL, NULL, \
NULL, NULL, &_GD_GenericMove, &_GD_GenericUnlink
#ifdef USE_MODULES
-#define GD_EXT_ENCODING(sc,ex,ec,af,ff) \
-{ sc,ex,ec,af,ff,GD_EF_PROVIDES,GD_EF_NULL_SET }
+#define GD_EXT_ENCODING(sc,ex,fl,gt,ft,af,ff) \
+{ sc,ex,fl,gt,ft,af,ff,GD_EF_PROVIDES,GD_EF_NULL_SET }
#else
-#define GD_EXT_ENCODING(sc,ex,ec,af,ff) { sc,ex,ec,af,ff,0,GD_INT_FUNCS }
+#define GD_EXT_ENCODING(sc,ex,fl,gt,ft,af,ff) \
+{ sc,ex,fl,gt,ft,af,ff,0,GD_INT_FUNCS }
#endif
struct encoding_t _gd_ef[GD_N_SUBENCODINGS] = {
- { GD_UNENCODED, "", GD_EF_ECOR, NULL, "none", 0,
+ { GD_UNENCODED, "", GD_EF_ECOR, 0, 0, NULL, "none", 0,
&_GD_GenericName, &_GD_RawOpen, &_GD_RawClose, &_GD_RawSeek, &_GD_RawRead,
&_GD_RawSize, &_GD_RawWrite, &_GD_RawSync, &_GD_GenericMove,
&_GD_GenericUnlink
@@ -59,7 +60,7 @@
#define GD_EF_PROVIDES 0
#define GD_INT_FUNCS GD_EF_NULL_SET
#endif
- GD_EXT_ENCODING(GD_GZIP_ENCODED, ".gz", GD_EF_ECOR | GD_EF_OOP, "Gzip",
+ GD_EXT_ENCODING(GD_GZIP_ENCODED, ".gz", GD_EF_ECOR | GD_EF_OOP, 0, 0, "Gzip",
"gzip"),
#undef GD_INT_FUNCS
#undef GD_EF_PROVIDES
@@ -76,7 +77,7 @@
#define GD_INT_FUNCS GD_EF_NULL_SET
#define GD_EF_PROVIDES 0
#endif
- GD_EXT_ENCODING(GD_BZIP2_ENCODED, ".bz2", GD_EF_ECOR, "Bzip2", "bzip2"),
+ GD_EXT_ENCODING(GD_BZIP2_ENCODED, ".bz2", GD_EF_ECOR, 0, 0, "Bzip2", "bzip2"),
#undef GD_INT_FUNCS
#undef GD_EF_PROVIDES
@@ -92,7 +93,7 @@
#define GD_INT_FUNCS GD_EF_NULL_SET
#define GD_EF_PROVIDES 0
#endif
- GD_EXT_ENCODING(GD_SLIM_ENCODED, ".slm", GD_EF_ECOR, "Slim", "slim"),
+ GD_EXT_ENCODING(GD_SLIM_ENCODED, ".slm", GD_EF_ECOR, 0, 0, "Slim", "slim"),
#undef GD_INT_FUNCS
#undef GD_EF_PROVIDES
@@ -108,25 +109,24 @@
#define GD_INT_FUNCS GD_EF_NULL_SET
#define GD_EF_PROVIDES 0
#endif
- GD_EXT_ENCODING(GD_LZMA_ENCODED, ".xz", GD_EF_ECOR, "Lzma", "lzma"),
- GD_EXT_ENCODING(GD_LZMA_ENCODED, ".lzma", GD_EF_ECOR, "Lzma", "lzma"),
+ GD_EXT_ENCODING(GD_LZMA_ENCODED, ".xz", GD_EF_ECOR, 0, 0, "Lzma", "lzma"),
+ GD_EXT_ENCODING(GD_LZMA_ENCODED, ".lzma", GD_EF_ECOR, 0, 0, "Lzma", "lzma"),
#undef GD_INT_FUNCS
#undef GD_EF_PROVIDES
- { GD_TEXT_ENCODED, ".txt", 0, NULL, "text", 0,
+ { GD_TEXT_ENCODED, ".txt", 0, 0, 0, NULL, "text", 0,
&_GD_GenericName, &_GD_AsciiOpen, &_GD_AsciiClose, &_GD_AsciiSeek,
&_GD_AsciiRead, &_GD_AsciiSize, &_GD_AsciiWrite, &_GD_AsciiSync,
&_GD_GenericMove, &_GD_GenericUnlink
},
- { GD_SIE_ENCODED, ".sie", GD_EF_ECOR | GD_EF_SWAP, NULL, "sie", 0,
+ { GD_SIE_ENCODED, ".sie", GD_EF_ECOR | GD_EF_SWAP, 0, 0, NULL, "sie", 0,
&_GD_GenericName, &_GD_SampIndOpen, &_GD_SampIndClose, &_GD_SampIndSeek,
&_GD_SampIndRead, &_GD_SampIndSize, &_GD_SampIndWrite, &_GD_SampIndSync,
&_GD_GenericMove, &_GD_GenericUnlink
},
-
#ifdef USE_ZZIP
#define GD_EF_PROVIDES \
GD_EF_NAME | GD_EF_OPEN | GD_EF_CLOSE | GD_EF_SEEK | GD_EF_READ | GD_EF_SIZE
@@ -138,13 +138,17 @@
#define GD_INT_FUNCS GD_EF_NULL_SET
#define GD_EF_PROVIDES 0
#endif
- GD_EXT_ENCODING(GD_ZZIP_ENCODED, NULL, GD_EF_ECOR | GD_EF_EDAT, "Zzip",
- "zzip"),
+ GD_EXT_ENCODING(GD_ZZIP_ENCODED, NULL, GD_EF_ECOR, 1, 0, "Zzip", "zzip"),
#undef GD_INT_FUNCS
#undef GD_EF_PROVIDES
+ { GD_FRAME_ENCODED, NULL, GD_EF_ECOR, 3, 2, NULL, "frame", 0,
+ &_GD_FrameName, &_GD_FrameOpen, &_GD_FrameClose, &_GD_FrameSeek,
+ &_GD_FrameRead, &_GD_FrameSize, NULL /* WRITE */, NULL /* SYNC */,
+ NULL /* MOVE */, NULL /* UNLINK */
+ },
- { GD_ENC_UNSUPPORTED, "", 0, "", "", 0,
+ { GD_ENC_UNSUPPORTED, "", 0, 0, 0, "", "", 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
},
};
@@ -503,8 +507,10 @@
if (mode & GD_FILE_TEMP) {
/* create temporary file in file[1] */
- if ((*enc->name)(D, D->fragment[E->fragment_index].enc_data,
- E->e->u.raw.file + 1, filebase, 1, 0))
+ if ((*enc->name)(D, D->fragment[E->fragment_index].n_encdata,
+ D->fragment[E->fragment_index].encdata, E->e->u.raw.n_rawform,
+ E->e->u.raw.rawform, E->e->u.raw.file + 1, filebase,
+ E->EN(raw,data_type), E->EN(raw,spf), 1, 0))
{
; /* error already set */
} else if ((temp_fd = _GD_MakeTempFile(D, D->fragment[fragment].dirfd,
@@ -528,8 +534,10 @@
if (oop_write) {
/* an out-of-place write requires us to open a temporary file and pass
* in its fd */
- if ((*enc->name)(D, D->fragment[E->fragment_index].enc_data,
- E->e->u.raw.file + 1, filebase, 1, 0))
+ if ((*enc->name)(D, D->fragment[E->fragment_index].n_encdata,
+ D->fragment[E->fragment_index].encdata, E->e->u.raw.n_rawform,
+ E->e->u.raw.rawform, E->e->u.raw.file + 1, filebase,
+ E->EN(raw,data_type), E->EN(raw,spf), 1, 0))
{
dreturn("%i", 1);
return 1;
@@ -551,8 +559,10 @@
/* open a regular file, if necessary */
if (E->e->u.raw.file[0].idata < 0) {
- if ((*enc->name)(D, D->fragment[E->fragment_index].enc_data,
- E->e->u.raw.file, filebase, 0, 0))
+ if ((*enc->name)(D, D->fragment[E->fragment_index].n_encdata,
+ D->fragment[E->fragment_index].encdata, E->e->u.raw.n_rawform,
+ E->e->u.raw.rawform, E->e->u.raw.file, filebase, E->EN(raw,data_type),
+ E->EN(raw,spf), 0, 0))
{
dreturn("%i", 1);
return 1;
@@ -578,16 +588,15 @@
/* Figure out the encoding scheme */
static unsigned long _GD_ResolveEncoding(DIRFILE *restrict D,
- const char *restrict name, const char *restrict enc_data,
- unsigned long scheme, int dirfd, struct _gd_raw_file *restrict file)
+ const char *restrict name, unsigned long scheme, int dirfd,
+ gd_type_t type, gd_spf_t spf, struct _gd_raw_file *restrict file)
{
char *candidate;
int i;
const size_t len = strlen(name);
struct stat statbuf;
- dtrace("%p, \"%s\", \"%s\", 0x%08lx, %i, %p", D, name, enc_data, scheme,
- dirfd, file);
+ dtrace("%p, \"%s\", 0x%08lx, %i, %p", D, name, scheme, dirfd, file);
for (i = 0; _gd_ef[i].scheme != GD_ENC_UNSUPPORTED; i++) {
if (scheme == GD_AUTO_ENCODED || scheme == _gd_ef[i].scheme) {
@@ -601,8 +610,10 @@
if (_GD_MissingFramework(i, GD_EF_NAME))
continue;
- if ((*_gd_ef[i].name)(D, enc_data, file, name, 0, 1))
+ if ((*_gd_ef[i].name)(D, 0, NULL, 0, NULL, file, name, type, spf, 0, 1))
+ {
continue;
+ }
candidate = file->name;
file->name = NULL;
@@ -640,9 +651,9 @@
/* Figure out the dirfile encoding type, if required */
if (D->fragment[E->fragment_index].encoding == GD_AUTO_ENCODED) {
D->fragment[E->fragment_index].encoding =
- _GD_ResolveEncoding(D, E->e->u.raw.filebase,
- D->fragment[E->fragment_index].enc_data, GD_AUTO_ENCODED,
- D->fragment[E->fragment_index].dirfd, E->e->u.raw.file);
+ _GD_ResolveEncoding(D, E->e->u.raw.filebase, GD_AUTO_ENCODED,
+ D->fragment[E->fragment_index].dirfd, E->EN(raw,data_type),
+ E->EN(raw,spf), E->e->u.raw.file);
}
/* If the encoding scheme is unknown, complain */
@@ -655,9 +666,9 @@
/* Figure out the encoding subtype, if required */
if (E->e->u.raw.file[0].subenc == GD_ENC_UNKNOWN)
_GD_ResolveEncoding(D, E->e->u.raw.filebase,
- D->fragment[E->fragment_index].enc_data,
D->fragment[E->fragment_index].encoding,
- D->fragment[E->fragment_index].dirfd, E->e->u.raw.file);
+ D->fragment[E->fragment_index].dirfd, E->EN(raw,data_type),
+ E->EN(raw,spf), E->e->u.raw.file);
/* check for our function(s) */
if (_GD_MissingFramework(E->e->u.raw.file[0].subenc, funcs)) {
@@ -670,12 +681,16 @@
return 1;
}
-int _GD_GenericName(DIRFILE *restrict D,
- const char *restrict enc_data __gd_unused,
- struct _gd_raw_file *restrict file, const char *restrict base, int temp,
+int _GD_GenericName(DIRFILE *restrict D, unsigned int n_encdata __gd_unused,
+ char *const *restrict encdata __gd_unused,
+ unsigned int n_rawform __gd_unused,
+ char *const *restrict rawform __gd_unused,
+ struct _gd_raw_file *restrict file, const char *restrict base,
+ gd_type_t type __gd_unused, gd_spf_t spf __gd_unused, int temp,
int resolv __gd_unused)
{
- dtrace("%p, <unused>, %p, \"%s\", %i, <unused>", D, file, base, temp);
+ dtrace("%p, <unused>, <unused>, <unsued>, <unused>, %p, \"%s\", <unused>,"
+ " <unused>, %i, <unused>", D, file, base, temp);
if (file->name == NULL) {
file->D = D;
@@ -757,9 +772,11 @@
_GD_FiniRawIO(D, raw_entry[i], fragment, GD_FINIRAW_DISCARD);
if ((*_gd_ef[temp.subenc].name)(D,
- D->fragment[raw_entry[i]->fragment_index].enc_data,
- raw_entry[i]->e->u.raw.file, raw_entry[i]->e->u.raw.filebase, 0,
- 0))
+ D->fragment[raw_entry[i]->fragment_index].n_encdata,
+ D->fragment[raw_entry[i]->fragment_index].encdata,
+ raw_entry[i]->e->u.raw.n_rawform, raw_entry[i]->e->u.raw.rawform,
+ raw_entry[i]->e->u.raw.file, raw_entry[i]->e->u.raw.filebase,
+ raw_entry[i]->EN(raw,data_type), raw_entry[i]->EN(raw,spf), 0, 0))
{
raw_entry[i]->e->u.raw.file[0].name = temp.name;
raw_entry[i]->e->u.raw.file[0].subenc = temp.subenc;
@@ -805,8 +822,13 @@
}
}
- free(D->fragment[fragment].enc_data);
- D->fragment[fragment].enc_data = NULL;
+ /* No writable encoding supports encoding data (for now?) */
+ for (i = 0; i < D->fragment[fragment].n_encdata; ++i)
+ free(D->fragment[fragment].encdata[i]);
+ free(D->fragment[fragment].encdata);
+ D->fragment[fragment].n_encdata = 0;
+ D->fragment[fragment].encdata = NULL;
+
D->fragment[fragment].encoding = encoding;
D->fragment[fragment].modified = 1;
D->flags &= ~GD_HAVE_VERSION;
@@ -889,10 +911,10 @@
if (D->entry[i]->fragment_index == fragment &&
D->entry[i]->field_type == GD_RAW_ENTRY)
{
- D->fragment[fragment].encoding =
- _GD_ResolveEncoding(D, D->entry[i]->e->u.raw.filebase,
- D->fragment[fragment].enc_data, GD_AUTO_ENCODED,
- D->fragment[fragment].dirfd, D->entry[i]->e->u.raw.file);
+ D->fragment[fragment].encoding = _GD_ResolveEncoding(D,
+ D->entry[i]->e->u.raw.filebase, GD_AUTO_ENCODED,
+ D->fragment[fragment].dirfd, D->entry[i]->EN(raw,data_type),
+ D->entry[i]->EN(raw,spf), D->entry[i]->e->u.raw.file);
if (D->fragment[fragment].encoding != GD_AUTO_ENCODED)
break;
Modified: branches/getdata-frame/src/entry.c
===================================================================
--- branches/getdata-frame/src/entry.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/entry.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -111,6 +111,12 @@
}
if (priv) {
+ if (entry->field_type == GD_RAW_ENTRY) {
+ unsigned int u;
+ for (u = 0; u < entry->e->u.raw.n_rawform; ++u)
+ free(entry->e->u.raw.rawform[u]);
+ free(entry->e->u.raw.rawform);
+ }
free(entry->e->alias_list);
free(entry->e->field_list);
free(entry->e->vector_list);
@@ -344,8 +350,10 @@
dreturn("%p", NULL);
return NULL;
} else if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D,
- D->fragment[E->fragment_index].enc_data, E->e->u.raw.file,
- E->e->u.raw.filebase, 0, 0))
+ D->fragment[E->fragment_index].n_encdata,
+ D->fragment[E->fragment_index].encdata, E->e->u.raw.n_rawform,
+ E->e->u.raw.rawform, E->e->u.raw.file, E->e->u.raw.filebase,
+ E->EN(raw,data_type), E->EN(raw,spf), 0, 0))
{
dreturn("%p", NULL);
return NULL;
Modified: branches/getdata-frame/src/errors.c
===================================================================
--- branches/getdata-frame/src/errors.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/errors.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -79,6 +79,10 @@
"Cannot use alias {4} as parent to a meta field on line {3} of {2}", 0 },
{ GD_E_FORMAT, GD_E_FORMAT_MPLEXVAL,
"Count value ({4}) exceeds maximum on line {3} of {2}", 0 },
+ { GD_E_FORMAT, GD_E_FORMAT_RAWFORM,
+ "/RAWFORM prohibited without preceding /ENCODING on line {3} of {2}", 0},
+ { GD_E_FORMAT, GD_E_FORMAT_LATEENC,
+ "/ENCODING prohibited after /RAWFORM on line {3} of {2}", 0},
/* GD_E_TRUNC: 1 = suberror, 2 = filename. 3 = errno */
{ GD_E_TRUNC, 0, "Error truncating {2}: ", 1 },
/* GD_E_CREAT: 1 = suberror, 2 = filename, 3 = errno */
@@ -180,6 +184,11 @@
{ GD_E_ARGUMENT, 0, "Bad argument", 0 },
/* GD_E_CALLBACK: 3 = response */
{ GD_E_CALLBACK, 0, "Unrecognised response from callback function: {3}", 0 },
+ /* GD_E_ENCDATA: 2 = field, 3 = item number */
+ { GD_E_ENCDATA, GD_E_ENCDATA_GLOBAL,
+ "Invalid or missing global encoding metadatum #{3} accessing {2}", 0},
+ { GD_E_ENCDATA, GD_E_ENCDATA_FIELD,
+ "Invalid or missing field encoding metadatum #{3} accessing {2}", 0},
/* GD_E_UNCLEAN_DB: 3 = fragment */
{ GD_E_UNCLEAN_DB, 0,
"Unexpected system error processing {3}; database unclean", 0 },
Modified: branches/getdata-frame/src/flimits.c
===================================================================
--- branches/getdata-frame/src/flimits.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/flimits.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -193,8 +193,10 @@
break;
if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D,
- D->fragment[E->fragment_index].enc_data, E->e->u.raw.file,
- E->e->u.raw.filebase, 0, 0))
+ D->fragment[E->fragment_index].n_encdata,
+ D->fragment[E->fragment_index].encdata, E->e->u.raw.n_rawform,
+ E->e->u.raw.rawform, E->e->u.raw.file, E->e->u.raw.filebase,
+ E->EN(raw,data_type), E->EN(raw,spf), 0, 0))
{
break;
}
Modified: branches/getdata-frame/src/flush.c
===================================================================
--- branches/getdata-frame/src/flush.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/flush.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -330,6 +330,7 @@
int me, int meta, size_t max_len, int pretty, int permissive)
{
int i;
+ unsigned int j;
size_t z;
char *ptr;
@@ -554,6 +555,18 @@
fputc('\n', stream);
}
+ if (!D->error && E->field_type == GD_RAW_ENTRY && E->e->u.raw.n_rawform > 0) {
+ fputs("/RAWFORM ", stream);
+ _GD_PadField(D, stream, D->fragment[me].prefix, D->fragment[me].suffix,
+ E->field, 0, permissive, D->standards);
+ for (j = 0; j < E->e->u.raw.n_rawform; ++j) {
+ fputc(' ', stream);
+ _GD_StringEscapeise(stream, E->e->u.raw.rawform[j], 0, permissive,
+ D->standards);
+ }
+ fputc('\n', stream);
+ }
+
dreturnvoid();
}
Added: branches/getdata-frame/src/frame.c
===================================================================
--- branches/getdata-frame/src/frame.c (rev 0)
+++ branches/getdata-frame/src/frame.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -0,0 +1,350 @@
+/* Copyright (C) 2012 D. V. Wiebe
+ *
+ ***************************************************************************
+ *
+ * This file is part of the GetData project.
+ *
+ * GetData is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * GetData is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with GetData; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+#include "internal.h"
+
+struct gd_frame_data_t {
+ uint64_t frame_size;
+ uint64_t chunk_size;
+ uint64_t offset;
+ int have_format;
+ int chunk_num;
+ int dirfd;
+ uint32_t cadence;
+ gd_spf_t spf;
+ FILE *fp;
+};
+
+int _GD_FrameName(DIRFILE *restrict D, unsigned int n_encdata,
+ char *const *restrict encdata, unsigned int n_rawform,
+ char *const *restrict rawform, struct _gd_raw_file *restrict file,
+ const char *restrict base, gd_type_t type, gd_spf_t spf,
+ int temp __gd_unused, int resolv)
+{
+ int int_len = 0;
+ int have_format = 0;
+ struct gd_frame_data_t *f;
+ char *ptr;
+ dtrace("%p, %u, %p, %u, %p, %p, \"%s\", 0x%X, %u, <unused>, %i", D, n_encdata,
+ encdata, n_rawform, rawform, file, base, type, spf, resolv);
+
+ /* Automatic detection of frame encoded data is not supported */
+ if (resolv) {
+ dreturn("%i", 1);
+ return 1;
+ }
+
+ if (file->name == NULL) {
+ if (n_encdata < 1)
+ /* no filename specified */
+ _GD_SetError(D, GD_E_ENCDATA, GD_E_ENCDATA_GLOBAL, base, 0, NULL);
+ else if (n_encdata < 2)
+ /* no framelength specified */
+ _GD_SetError(D, GD_E_ENCDATA, GD_E_ENCDATA_GLOBAL, base, 1, NULL);
+
+ if (D->error) {
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ /* Check for invalid filename form */
+ ptr = encdata[0];
+ for (;;) {
+ ptr = strchr(ptr, '%');
+ if (ptr == NULL)
+ break;
+ ptr++;
+ if (*ptr == '%')
+ continue;
+ else if (have_format) {
+ _GD_SetError(D, GD_E_ENCDATA, GD_E_ENCDATA_GLOBAL, base, 0, NULL);
+ break;
+ } else if (*ptr >= '0' && *ptr <= '9') {
+ int_len = *ptr++ - '0';
+ if (*ptr >= '0' && *ptr <= '9') {
+ int_len = 10 * int_len + *ptr++ - '0';
+ if (*ptr >= '0' && *ptr <= '9') {
+ int_len *= 10 * int_len + *ptr++ - '0';
+ if (*ptr >= '0' && *ptr <= '9')
+ int_len = -1;
+ }
+ }
+
+ if (int_len > 20 || int_len < 1) {
+ _GD_SetError(D, GD_E_ENCDATA, GD_E_ENCDATA_GLOBAL, base, 0, NULL);
+ break;
+ }
+ }
+
+ if (*ptr == 'x' || *ptr == 'u' || *ptr == 'X' || *ptr == 'o') {
+ have_format = 1;
+ continue;
+ } else {
+ _GD_SetError(D, GD_E_ENCDATA, GD_E_ENCDATA_GLOBAL, base, 0, NULL);
+ break;
+ }
+ }
+
+ if (D->error) {
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ file->D = D;
+ file->name = strdup(encdata[0]);
+ file->edata = malloc(sizeof(struct gd_frame_data_t));
+ if (file->name == NULL || file->edata == NULL) {
+ free(file->name);
+ _GD_SetError(D, GD_E_ALLOC, 0, NULL, 0, NULL);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ /* save the metadata */
+ f = (struct gd_frame_data_t*)file->edata;
+ f->frame_size = gd_strtoll(encdata[1], &ptr, 0);
+ if (*ptr)
+ _GD_SetError(D, GD_E_ENCDATA, GD_E_ENCDATA_GLOBAL, base, 1, NULL);
+
+ if (n_rawform > 1) {
+ f->chunk_size = gd_strtoll(rawform[2], &ptr, 0);
+ if (*ptr || (!have_format && f->chunk_size > 0))
+ _GD_SetError(D, GD_E_ENCDATA, GD_E_ENCDATA_GLOBAL, base, 2, NULL);
+ } else if (have_format)
+ _GD_SetError(D, GD_E_ENCDATA, GD_E_ENCDATA_GLOBAL, base, 2, NULL);
+ else
+ f->chunk_size = 0;
+
+ if (n_rawform > 0) {
+ f->offset = gd_strtoll(rawform[0], &ptr, 0);
+ if (*ptr)
+ _GD_SetError(D, GD_E_ENCDATA, GD_E_ENCDATA_FIELD, base, 0, NULL);
+ } else
+ f->offset = 0;
+
+ if (n_rawform > 1) {
+ f->cadence = strtol(rawform[1], &ptr, 0);
+ if (*ptr)
+ _GD_SetError(D, GD_E_ENCDATA, GD_E_ENCDATA_FIELD, base, 1, NULL);
+ } else
+ f->cadence = GD_SIZE(type);
+
+ f->have_format = have_format;
+ f->spf = spf;
+
+ if (D->error) {
+ free(file->name);
+ free(file->edata);
+ dreturn("%i", -1);
+ return -1;
+ }
+ }
+
+ dreturn("%i (%s)", 0, file->name);
+ return 0;
+}
+
+static int _GD_FrameOpenChunk(int dirfd, struct _gd_raw_file *file,
+ struct gd_frame_data_t *f, int n)
+{
+ char *filename;
+ int fd;
+ size_t len = strlen(file->name) + 20;
+ dtrace("%i, %p, %p, %i", dirfd, file, f, n);
+
+ if (f->have_format) {
+ filename = (char *)malloc(len);
+ if (filename == NULL) {
+ dreturn("%i", -1);
+ return -1;
+ }
+ if (snprintf(filename, len, file->name, n) < 0) {
+ free(filename);
+ dreturn("%i", -1);
+ return -1;
+ }
+ } else
+ filename = file->name;
+
+ fd = gd_OpenAt(file->D, dirfd, filename, O_RDONLY | O_BINARY, 0666);
+
+ if (f->have_format)
+ free(filename);
+
+ if (fd >= 0) {
+ f->chunk_num = n;
+ f->dirfd = dirfd;
+ }
+
+ dreturn("%i", fd);
+ return fd;
+}
+
+int _GD_FrameOpen(int dirfd, struct _gd_raw_file *file, int swap __gd_unused,
+ unsigned int mode __gd_unused)
+{
+ struct gd_frame_data_t *f = file->edata;
+ dtrace("%i, %p, <unused>, <unused>", dirfd, file);
+
+ /* opening chunk zero is probably the wrong thing to do, but we've got to
+ * start somewhere. */
+ file->idata = _GD_FrameOpenChunk(dirfd, file, f, 0);
+
+ if (file->idata < 0) {
+ dreturn("%i", 1);
+ return 1;
+ }
+
+ file->mode = GD_FILE_READ;
+ dreturn("%i", 0);
+ return 0;
+}
+
+off64_t _GD_FrameSeek(struct _gd_raw_file *file, off64_t count,
+ gd_type_t data_type, unsigned int mode __gd_unused)
+{
+ off64_t frame_num, n;
+ struct gd_frame_data_t *f = file->edata;
+
+ dtrace("%p, %lli, 0x%X, <unused>", file, (long long)count, data_type);
+
+ /* calculate chunk number */
+ if (f->chunk_size > 0) {
+ int chunk_num = count / (f->spf * f->chunk_size);
+ if (chunk_num != f->chunk_num) {
+ int old_fd = file->idata;
+ file->idata = _GD_FrameOpenChunk(f->dirfd, file, f, 0);
+ if (file->idata < 0) {
+ dreturn("%i", 0);
+ return 0;
+ }
+ close(old_fd);
+ }
+ }
+
+ /* find the frame we're interested in */
+ frame_num = count / f->spf - f->chunk_num * f->chunk_size;
+
+ n = lseek64(file->idata, frame_num * f->frame_size, SEEK_SET);
+
+ if (n < 0) {
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ /* if we ended up in the middle of a frame, go back to the beginning */
+ if (n % f->frame_size) {
+ n = lseek64(file->idata, -(n % f->frame_size), SEEK_CUR);
+ /* don't put up with flakey I/O */
+ if (n < 0 || n % f->frame_size) {
+ dreturn("%i", -1);
+ return -1;
+ }
+ }
+
+ /* calculate resultant sample number */
+ file->pos = (n / f->frame_size) * f->spf;
+
+
+ dreturn("%lli", (long long)file->pos);
+ return file->pos;
+}
+
+ssize_t _GD_FrameRead(struct _gd_raw_file *restrict file, void *restrict data,
+ gd_type_t data_type, size_t nmemb)
+{
+ ssize_t n;
+
+ dtrace("%p, %p, 0x%X, %zu", file, data, data_type, nmemb);
+
+ n = zzip_read(file->edata, data, GD_SIZE(data_type) * nmemb);
+
+ if (n >= 0)
+ n /= GD_SIZE(data_type);
+
+ dreturn("%lli", (long long)n);
+ return n;
+}
+
+int _GD_FrameClose(struct _gd_raw_file *file)
+{
+ int ret;
+
+ dtrace("%p", file);
+
+ ret = zzip_close(file->edata);
+
+ if (!ret) {
+ file->idata = -1;
+ file->edata = NULL;
+ }
+
+ dreturn("%i", ret);
+ return ret;
+}
+
+off64_t _GD_FrameSize(int dirfd, struct _gd_raw_file *file, gd_type_t data_type,
+ int swap __gd_unused)
+{
+ ssize_t len;
+ char *ptr1, *ptr2;
+ ZZIP_FILE *fp;
+ off64_t size = 0;
+
+ dtrace("%i, %p, 0x%X, <unused>", dirfd, file, data_type);
+
+ /* zziplib doesn't seem to have a way to do these path shenannigans nicely */
+ ptr1 = gd_MakeFullPathOnly(file->D, dirfd, "");
+ if (ptr1 == NULL) {
+ dreturn("%i", 1);
+ return 1;
+ }
+
+ len = strlen(ptr1);
+ ptr2 = realloc(ptr1, len + strlen(file->name) + 2);
+ if (ptr2 == NULL) {
+ dreturn("%i", 1);
+ return 1;
+ }
+
+ ptr2[len] = '/';
+ strcpy(ptr2 + len + 1, file->name);
+
+ fp = zzip_open(ptr2, O_RDONLY);
+ free(ptr2);
+
+ if (fp == NULL) {
+ file->idata = -1;
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ if ((size = (off64_t)zzip_seek(fp, 0, SEEK_END)) == -1) {
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ zzip_close(fp);
+
+ size /= GD_SIZE(data_type);
+
+ dreturn("%lli", (long long)size);
+ return size;
+}
Modified: branches/getdata-frame/src/getdata.h.in
===================================================================
--- branches/getdata-frame/src/getdata.h.in 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/getdata.h.in 2012-01-17 01:46:27 UTC (rev 649)
@@ -144,7 +144,7 @@
#define GD_E_DELETE 26
#define GD_E_ARGUMENT 27
#define GD_E_CALLBACK 28
-/* unused 29 */
+#define GD_E_ENCDATA 29
#define GD_E_UNCLEAN_DB 30
#define GD_E_DOMAIN 31
#define GD_E_BAD_REPR 32
@@ -189,6 +189,8 @@
#define GD_E_FORMAT_META_META 21
#define GD_E_FORMAT_ALIAS 22
#define GD_E_FORMAT_MPLEXVAL 23
+#define GD_E_FORMAT_RAWFORM 24
+#define GD_E_FORMAT_LATEENC 25
/* deprecated names */
#define GD_E_FORMAT_NO_PARENT GD_E_FORMAT_NO_FIELD
@@ -450,7 +452,8 @@
#define GD_BZIP2_ENCODED 0x05000000 /* Data are bzip2 encoded */
#define GD_LZMA_ENCODED 0x06000000 /* Data are xz encoded */
#define GD_SIE_ENCODED 0x07000000 /* Data are sample index encoded */
-#define GD_ZZIP_ENCODED 0x08000000 /* Data are zzip encoded */
+#define GD_FRAME_ENCODED 0x08000000 /* Data are frame encoded */
+#define GD_ZZIP_ENCODED 0x09000000 /* Data are zzip encoded */
#define GD_ENC_UNSUPPORTED GD_ENCODING /* Encoding unsupported */
/* delete flags */
Modified: branches/getdata-frame/src/include.c
===================================================================
--- branches/getdata-frame/src/include.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/include.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -208,7 +208,8 @@
D->fragment[D->n_fragment - 1].bname = base;
D->fragment[D->n_fragment - 1].cname = temp_buf1;
D->fragment[D->n_fragment - 1].ename = _GD_Strdup(D, ename);
- D->fragment[D->n_fragment - 1].enc_data = NULL;
+ D->fragment[D->n_fragment - 1].n_encdata = 0;
+ D->fragment[D->n_fragment - 1].encdata = NULL;
D->fragment[D->n_fragment - 1].modified = 0;
D->fragment[D->n_fragment - 1].parent = me;
D->fragment[D->n_fragment - 1].dirfd = dirfd;
Modified: branches/getdata-frame/src/internal.h
===================================================================
--- branches/getdata-frame/src/internal.h 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/internal.h 2012-01-17 01:46:27 UTC (rev 649)
@@ -654,6 +654,10 @@
#define GD_E_ARG_ENDIANNESS 2
#define GD_E_ARG_PROTECTION 3
+#define GD_E_ENCDATA_GLOBAL 1
+#define GD_E_ENCDATA_FIELD 2
+
+/* IO operation flags */
#define GD_FILE_READ 0x1
#define GD_FILE_WRITE 0x2
#define GD_FILE_RDWR ( GD_FILE_READ | GD_FILE_WRITE )
@@ -706,6 +710,8 @@
struct { /* RAW */
char* filebase;
size_t size;
+ unsigned int n_rawform;
+ char **rawform; /* encoding specific raw formatting data */
struct _gd_raw_file file[2]; /* encoding framework data */
} raw;
struct { /* LINTERP */
@@ -740,7 +746,8 @@
#define GD_ENC_XZ_RAW 6
#define GD_ENC_SIE 7
#define GD_ENC_ZZIP 8
-#define GD_ENC_UNKNOWN 9
+#define GD_ENC_FRAME 9
+#define GD_ENC_UNKNOWN 10
#define GD_N_SUBENCODINGS (GD_ENC_UNKNOWN + 1)
@@ -768,8 +775,9 @@
# define SCREWY_FLOATS
#endif
-typedef int (*gd_ef_name_t)(DIRFILE *D, const char *, struct _gd_raw_file*,
- const char*, int, int);
+typedef int (*gd_ef_name_t)(DIRFILE *D, unsigned int, char *const *,
+ unsigned int, char *const *, struct _gd_raw_file*, const char*, gd_type_t,
+ gd_spf_t, int, int);
typedef int (*gd_ef_open_t)(int, struct _gd_raw_file*, int, unsigned int);
typedef off64_t (*gd_ef_seek_t)(struct _gd_raw_file*, off64_t, gd_type_t,
unsigned int);
@@ -786,12 +794,13 @@
#define GD_EF_ECOR 0x1 /* post-framework byte-sex correction required */
#define GD_EF_SWAP 0x2 /* in-framework byte-sex metadata correction required */
#define GD_EF_OOP 0x4 /* writes occur out-of-place */
-#define GD_EF_EDAT 0x8 /* The /ENCODING datum is used */
/* Encoding schemes */
extern struct encoding_t {
unsigned long int scheme;
const char* ext;
- int flags; /* flags */
+ unsigned int flags; /* flags */
+ unsigned int gtok; /* number of global tokens (at the end of /ENCODING) */
+ unsigned int ftok; /* number of field tokens (apeparing in /RAWFORM) */
const char* affix;
const char* ffname;
unsigned int provides;
@@ -817,7 +826,10 @@
char *bname;
/* External name (the one that appears in the format file) */
char* ename;
- void *enc_data;
+
+ unsigned int n_encdata;
+ char **encdata; /* encoding specific data (from the format file) */
+
int modified;
int parent;
int dirfd;
@@ -983,7 +995,7 @@
char *_GD_GetLine(FILE *restrict, size_t *restrict, int *restrict);
int _GD_GetRepr(DIRFILE *restrict, const char *restrict,
char **restrict, int);
-gd_spf_t _GD_GetSPF(DIRFILE*, const gd_entry_t*);
+gd_spf_t _GD_GetSPF(DIRFILE *restrict, gd_entry_t *restrict);
int _GD_GrabDir(DIRFILE*, int, const char *restrict);
int _GD_Include(DIRFILE*, const char *restrict, const char *restrict, int,
char **restrict, int, const char *restrict, const char *restrict,
@@ -1048,8 +1060,9 @@
/* generic I/O methods */
int _GD_GenericMove(int, struct _gd_raw_file *restrict, int, char *restrict);
-int _GD_GenericName(DIRFILE *restrict, const char *restrict,
- struct _gd_raw_file *restrict, const char *restrict, int, int);
+int _GD_GenericName(DIRFILE *restrict, unsigned int, char *const *restrict,
+ unsigned int, char *const *restrict, struct _gd_raw_file *restrict,
+ const char *restrict, gd_type_t, gd_spf_t, int, int);
int _GD_GenericUnlink(int, struct _gd_raw_file* file);
/* unencoded I/O methods */
@@ -1088,6 +1101,19 @@
off64_t _GD_Bzip2Size(int, struct _gd_raw_file* file, gd_type_t data_type,
int swap);
+/* frame I/O methods */
+int _GD_FrameName(DIRFILE *restrict, unsigned int, char *const *restrict,
+ unsigned int, char *const *restrict, struct _gd_raw_file *restrict,
+ const char *restrict, gd_type_t, gd_spf_t, int, int);
+int _GD_FrameOpen(int, struct _gd_raw_file* file, int swap, unsigned int);
+off64_t _GD_FrameSeek(struct _gd_raw_file* file, off64_t count,
+ gd_type_t data_type, unsigned int);
+ssize_t _GD_FrameRead(struct _gd_raw_file *restrict, void *restrict, gd_type_t,
+ size_t);
+int _GD_FrameClose(struct _gd_raw_file* file);
+off64_t _GD_FrameSize(int, struct _gd_raw_file* file, gd_type_t data_type,
+ int swap);
+
/* gzip I/O methods */
int _GD_GzipOpen(int, struct _gd_raw_file* file, int swap, unsigned int);
off64_t _GD_GzipSeek(struct _gd_raw_file* file, off64_t count,
@@ -1136,8 +1162,9 @@
int swap);
/* zzip I/O methods */
-int _GD_ZzipName(DIRFILE *restrict, const char *restrict,
- struct _gd_raw_file *restrict, const char *restrict, int, int);
+int _GD_ZzipName(DIRFILE *restrict, unsigned int, char *const *restrict,
+ unsigned int, char *const *restrict, struct _gd_raw_file *restrict,
+ const char *restrict, gd_type_t, gd_spf_t, int, int);
int _GD_ZzipOpen(int, struct _gd_raw_file* file, int swap, unsigned int);
off64_t _GD_ZzipSeek(struct _gd_raw_file* file, off64_t count,
gd_type_t data_type, unsigned int);
Modified: branches/getdata-frame/src/mod.c
===================================================================
--- branches/getdata-frame/src/mod.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/mod.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -369,10 +369,16 @@
_GD_FiniRawIO(D, E, E->fragment_index,
GD_FINIRAW_CLOTEMP | GD_FINIRAW_DISCARD);
else {
+ unsigned int u;
/* discard the old file and move the temporary file into place */
if (_GD_FiniRawIO(D, E, E->fragment_index, GD_FINIRAW_DISCARD) == 0)
_GD_FiniRawIO(D, E, E->fragment_index,
GD_FINIRAW_KEEP | GD_FINIRAW_CLOTEMP);
+
+ /* delete the old raw form -- no writeable encoding has these */
+ for (u = 0; u < E->e->u.raw.n_rawform; ++u)
+ free(E->e->u.raw.rawform[u]);
+ free(E->e->u.raw.rawform);
}
}
memcpy(Qe.u.raw.file, E->e->u.raw.file, sizeof(struct _gd_raw_file));
Modified: branches/getdata-frame/src/move.c
===================================================================
--- branches/getdata-frame/src/move.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/move.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -234,6 +234,7 @@
_GD_FiniRawIO(D, E, new_fragment, GD_FINIRAW_CLOTEMP
| GD_FINIRAW_DISCARD);
} else {
+ unsigned int u;
struct _gd_raw_file temp;
memcpy(&temp, E->e->u.raw.file, sizeof(temp));
@@ -244,8 +245,9 @@
E->e->u.raw.file[0].subenc = subencoding;
if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D,
- D->fragment[E->fragment_index].enc_data, E->e->u.raw.file,
- new_filebase, 0, 0))
+ D->fragment[E->fragment_index].n_encdata,
+ D->fragment[E->fragment_index].encdata, E->e->u.raw.n_rawform,
+ E->e->u.raw.rawform, E->e->u.raw.file, new_filebase, 0, 0))
{
E->e->u.raw.file[0].name = temp.name;
E->e->u.raw.file[0].subenc = temp.subenc;
@@ -267,6 +269,13 @@
free(E->e->u.raw.filebase);
E->e->u.raw.filebase = new_filebase;
}
+
+ /* delete the old raw form -- no writeable encoding has these */
+ for (u = 0; u < E->e->u.raw.n_rawform; ++u)
+ free(E->e->u.raw.rawform[u]);
+ free(E->e->u.raw.rawform);
+ E->e->u.raw.n_rawform = 0;
+ E->e->u.raw.rawform = NULL;
}
} else {
free(new_filebase);
Modified: branches/getdata-frame/src/name.c
===================================================================
--- branches/getdata-frame/src/name.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/name.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -509,7 +509,9 @@
memcpy(&temp, E->e->u.raw.file, sizeof(struct _gd_raw_file));
temp.name = NULL;
if ((*_gd_ef[temp.subenc].name)(D,
- D->fragment[E->fragment_index].enc_data, &temp, filebase, 0, 0))
+ D->fragment[E->fragment_index].n_encdata,
+ D->fragment[E->fragment_index].encdata, E->e->u.raw.n_rawform,
+ E->e->u.raw.rawform, &temp, filebase, 0, 0))
{
free(name);
free(filebase);
@@ -518,8 +520,9 @@
}
if ((*_gd_ef[temp.subenc].name)(D,
- D->fragment[E->fragment_index].enc_data, E->e->u.raw.file,
- E->e->u.raw.filebase, 0, 0))
+ D->fragment[E->fragment_index].n_encdata,
+ D->fragment[E->fragment_index].encdata, E->e->u.raw.n_rawform,
+ E->e->u.raw.rawform, E->e->u.raw.file, E->e->u.raw.filebase, 0, 0))
{
free(name);
free(filebase);
Modified: branches/getdata-frame/src/nframes.c
===================================================================
--- branches/getdata-frame/src/nframes.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/nframes.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -47,8 +47,10 @@
}
if ((*_gd_ef[D->reference_field->e->u.raw.file[0].subenc].name)(D,
- D->fragment[D->reference_field->fragment_index].enc_data,
- D->reference_field->e->u.raw.file,
+ D->fragment[D->reference_field->fragment_index].n_encdata,
+ D->fragment[D->reference_field->fragment_index].encdata,
+ D->reference_field->e->u.raw.n_rawform,
+ D->reference_field->e->u.raw.rawform, D->reference_field->e->u.raw.file,
D->reference_field->e->u.raw.filebase, 0, 0))
{
dreturn("%i", 0);
Modified: branches/getdata-frame/src/open.c
===================================================================
--- branches/getdata-frame/src/open.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/open.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -418,7 +418,8 @@
D->fragment[0].sname = NULL;
/* The root format file needs no external name */
D->fragment[0].ename = NULL;
- D->fragment[0].enc_data = NULL;
+ D->fragment[0].n_encdata = 0;
+ D->fragment[0].encdata = NULL;
D->fragment[0].modified = 0;
D->fragment[0].parent = -1;
D->fragment[0].dirfd = D->dir[0].fd;
Modified: branches/getdata-frame/src/parse.c
===================================================================
--- branches/getdata-frame/src/parse.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/parse.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -1955,7 +1955,8 @@
*/
static int _GD_ParseDirective(DIRFILE *restrict D, char **in_cols, int n_cols,
int me, int *restrict standards, int linenum, char **restrict ref_name,
- unsigned long *restrict flags, char **outstring, const char *tok_pos)
+ unsigned long *restrict flags, int *restrict rawform, char **outstring,
+ const char *tok_pos)
{
const char* ptr;
char *munged_code;
@@ -1963,8 +1964,8 @@
int pedantic = *flags & GD_PEDANTIC;
gd_entry_t *E = NULL;
- dtrace("%p, %p, %i, %u, %p, %i, %p, %p, %p, %p", D, in_cols, n_cols, me,
- standards, linenum, ref_name, flags, outstring, tok_pos);
+ dtrace("%p, %p, %i, %u, %p, %i, %p, %p, %p, %p, %p", D, in_cols, n_cols, me,
+ standards, linenum, ref_name, flags, rawform, outstring, tok_pos);
/* Starting with Standards Version 8, the forward slash is required. */
if (*standards >= 8 && pedantic && in_cols[0][0] != '/') {
@@ -2013,15 +2014,50 @@
if (strcmp(ptr, "ENCODING") == 0 && (!pedantic || *standards >= 6)) {
matched = 1;
if (!(*flags & GD_FORCE_ENCODING)) {
+ if (*rawform) {
+ _GD_SetError(D, GD_E_FORMAT, GD_E_FORMAT_LATEENC,
+ D->fragment[me].cname, linenum, NULL);
+ break;
+ }
D->fragment[me].encoding = GD_ENC_UNSUPPORTED;
for (i = 0; i < GD_N_SUBENCODINGS - 1; ++i)
if (strcmp(in_cols[1], _gd_ef[i].ffname) == 0) {
+ unsigned int j;
D->fragment[me].encoding = _gd_ef[i].scheme;
- free(D->fragment[me].enc_data);
- if (n_cols > 2 && _gd_ef[i].flags & GD_EF_EDAT)
- D->fragment[me].enc_data = _GD_Strdup(D, in_cols[2]);
- else
- D->fragment[me].enc_data = NULL;
+
+ /* free any old encoding data recorded */
+ for (j = 0; j < D->fragment[me].n_encdata; ++j)
+ free(D->fragment[me].encdata[j]);
+ free(D->fragment[me].encdata);
+
+ /* record the new encoding data */
+ if (n_cols > 2 && _gd_ef[i].gtok > 0) {
+ unsigned int n = ((unsigned int)n_cols - 2 < _gd_ef[i].gtok) ?
+ (unsigned int)n_cols - 2 : _gd_ef[i].gtok;
+ D->fragment[me].encdata = _GD_Malloc(D, sizeof(char*) * n);
+
+ if (D->error) {
+ D->fragment[me].n_encdata = 0;
+ break;
+ }
+
+ memset(D->fragment[me].encdata, 0, sizeof(char*) * n);
+
+ for (j = 0; j < n; ++j)
+ D->fragment[me].encdata[j] = _GD_Strdup(D, in_cols[j + 2]);
+
+ if (D->error) {
+ for (j = 0; j < n; ++j)
+ free(D->fragment[me].encdata[j]);
+ free(D->fragment[me].encdata);
+ D->fragment[me].encdata = NULL;
+ n = 0;
+ }
+ D->fragment[me].n_encdata = (unsigned int)n;
+ } else {
+ D->fragment[me].n_encdata = 0;
+ D->fragment[me].encdata = NULL;
+ }
break;
}
}
@@ -2034,7 +2070,7 @@
D->fragment[me].byte_sex = GD_LITTLE_ENDIAN;
else
_GD_SetError(D, GD_E_FORMAT, GD_E_FORMAT_ENDIAN,
- D->fragment[me].cname, linenum, NULL);
+ D->fragment[me].cname, linenum, NULL);
if (n_cols > 2 && (!pedantic || *standards >= 8)) {
if (strcmp(in_cols[2], "arm") == 0) {
#if ! defined(ARM_ENDIAN_DOUBLES)
@@ -2152,8 +2188,75 @@
}
break;
case 'R':
- if (strcmp(ptr, "REFERENCE") == 0 && (!pedantic || *standards >= 6)) {
+ if (strcmp(ptr, "RAWFORM") == 0 && (!pedantic || *standards >= 9)) {
+ unsigned int j, n = n_cols - 2;
+
matched = 1;
+ /* Must specify encoding before /RAWFORM */
+ if (D->fragment[me].encoding == GD_AUTO_ENCODED) {
+ _GD_SetError(D, GD_E_FORMAT, GD_E_FORMAT_RAWFORM,
+ D->fragment[me].cname, linenum, in_cols[1]);
+ break;
+ } else if (n_cols < 2) {
+ _GD_SetError(D, GD_E_FORMAT, GD_E_FORMAT_N_TOK, D->fragment[me].cname,
+ linenum, NULL);
+ break;
+ }
+
+ munged_code = _GD_MungeFromFrag(D, NULL, me, in_cols[1], &dummy);
+ if (munged_code)
+ E = _GD_FindField(D, munged_code, D->entry, D->n_entries, 0, NULL);
+ free(munged_code);
+
+ if (E == NULL) {
+ _GD_SetError(D, GD_E_FORMAT, GD_E_FORMAT_NO_FIELD,
+ D->fragment[me].cname, linenum, in_cols[1]);
+ break;
+ } else if (E->fragment_index != me) {
+ _GD_SetError(D, GD_E_FORMAT, GD_E_FORMAT_LOCATION,
+ D->fragment[me].cname, linenum, in_cols[1]);
+ break;
+ } else if (E->e->u.raw.n_rawform > 0) {
+ /* ignore a RAWFORM if we've already seen one for this field */
+ *rawform = 1;
+ break;
+ }
+ *rawform = 1;
+
+ for (i = 0; i < GD_N_SUBENCODINGS - 1; ++i)
+ if (D->fragment[me].encoding == _gd_ef[i].scheme)
+ break;
+
+ /* This shouldn't happen? */
+ if (i == GD_N_SUBENCODINGS) {
+ _GD_InternalError(D);
+ break;
+ }
+
+ if (n > _gd_ef[i].ftok)
+ n = _gd_ef[i].ftok;
+
+ if (n == 0)
+ break;
+
+ E->e->u.raw.n_rawform = n;
+ E->e->u.raw.rawform = _GD_Malloc(D, sizeof(char*) * n);
+ if (D->error)
+ break;
+ memset(E->e->u.raw.rawform, 0, sizeof(char*) * n);
+
+ for (j = 0; j < n; ++j)
+ E->e->u.raw.rawform[j] = _GD_Strdup(D, in_cols[i + 2]);
+
+ if (D->error) {
+ for (j = 0; j < n; ++j)
+ free(E->e->u.raw.rawform[j]);
+ free(E->e->u.raw.rawform);
+ }
+ } else if (strcmp(ptr, "REFERENCE") == 0 && (!pedantic ||
+ *standards >= 6))
+ {
+ matched = 1;
free(*ref_name);
*ref_name = _GD_MungeFromFrag(D, NULL, me, in_cols[1], &dummy);
}
@@ -2249,6 +2352,7 @@
char* ref_name = NULL;
int n_cols;
size_t n;
+ int rawform = 0;
int match = 0;
int rescan = 0;
int se_action = GD_SYNTAX_ABORT;
@@ -2278,7 +2382,7 @@
if (D->error == GD_E_OK)
match = _GD_ParseDirective(D, in_cols, n_cols, me, standards, linenum,
- &ref_name, flags, &outstring, tok_pos);
+ &ref_name, flags, &rawform, &outstring, tok_pos);
if (D->error == GD_E_OK && !match)
first_raw = _GD_ParseFieldSpec(D, n_cols, in_cols, NULL,
Modified: branches/getdata-frame/src/putdata.c
===================================================================
--- branches/getdata-frame/src/putdata.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/putdata.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -510,13 +510,13 @@
#define MPLEX(t) \
for (i = 0; i < n; i++) \
- if (B[i] == val) \
+ if (B[i * spfB / spfA] == val) \
((t*)A)[i] = ((t*)C)[i];
#define MPLEXC(t) \
do { \
for (i = 0; i < n; i++) \
- if (B[i] == val) { \
+ if (B[i * spfB / spfA] == val) { \
((t*)A)[i * 2] = ((t*)C)[i * 2]; \
((t*)A)[i * 2 + 1] = ((t*)C)[i * 2 + 1]; \
} \
Modified: branches/getdata-frame/src/spf.c
===================================================================
--- branches/getdata-frame/src/spf.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/spf.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -23,7 +23,7 @@
/* _GD_GetSPF: Get samples per frame for field
*/
-gd_spf_t _GD_GetSPF(DIRFILE *D, const gd_entry_t *E)
+gd_spf_t _GD_GetSPF(DIRFILE *restrict D, gd_entry_t *restrict E)
{
gd_spf_t spf = 0;
Modified: branches/getdata-frame/src/zzip.c
===================================================================
--- branches/getdata-frame/src/zzip.c 2012-01-17 01:38:07 UTC (rev 648)
+++ branches/getdata-frame/src/zzip.c 2012-01-17 01:46:27 UTC (rev 649)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011 D. V. Wiebe
+/* Copyright (C) 2011-2012 D. V. Wiebe
*
***************************************************************************
*
@@ -35,19 +35,22 @@
/* The zzip encoding scheme looks just like the regular ol' C IO. */
-int _GD_ZzipName(DIRFILE *restrict D, const char *restrict enc_data,
+int _GD_ZzipName(DIRFILE *restrict D, unsigned int n_encdata,
+ char *const *restrict encdata, unsigned int n_rawform __gd_unused,
+ char *const *restrict rawform __gd_unused,
struct _gd_raw_file *restrict file, const char *restrict base,
int temp __gd_unused, int resolv)
{
size_t enc_len;
+ const char *encname = "raw";
- dtrace("%p, \"%s\", %p, \"%s\", <unused>, %i", D, enc_data, file, base,
- resolv);
+ dtrace("%p, %u, %p, <unused>, <unused>, %p, \"%s\", <unused>, %i", D,
+ n_encdata, encdata, file, base, resolv);
- if (enc_data == NULL)
- enc_data = "raw";
+ if (n_encdata >= 1)
+ encname = encdata[0];
- enc_len = strlen(enc_data);
+ enc_len = strlen(encname);
if (resolv) {
free(file->name);
@@ -57,7 +60,7 @@
return -1;
}
- strcpy(file->name, enc_data);
+ strcpy(file->name, encname);
strcpy(file->name + enc_len, ".zip");
dreturn("%i (%s)", 0, file->name);
@@ -66,14 +69,14 @@
if (file->name == NULL) {
file->D = D;
- file->name = (char *)malloc(strlen(base) + strlen(enc_data) + 2);
+ file->name = (char *)malloc(strlen(base) + enc_len + 2);
if (file->name == NULL) {
_GD_SetError(D, GD_E_ALLOC, 0, NULL, 0, NULL);
dreturn("%i", -1);
return -1;
}
- strcpy(file->name, enc_data);
+ strcpy(file->name, encname);
file->name[enc_len] = '/';
strcpy(file->name + enc_len + 1, base);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2012-01-17 01:38:14
|
Revision: 648
http://getdata.svn.sourceforge.net/getdata/?rev=648&view=rev
Author: ketiltrout
Date: 2012-01-17 01:38:07 +0000 (Tue, 17 Jan 2012)
Log Message:
-----------
Branch trunk@HEAD
Added Paths:
-----------
branches/getdata-frame/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2012-01-13 02:23:11
|
Revision: 647
http://getdata.svn.sourceforge.net/getdata/?rev=647&view=rev
Author: ketiltrout
Date: 2012-01-13 02:23:05 +0000 (Fri, 13 Jan 2012)
Log Message:
-----------
This, too.
Modified Paths:
--------------
trunk/getdata/configure.ac
Modified: trunk/getdata/configure.ac
===================================================================
--- trunk/getdata/configure.ac 2012-01-13 02:18:50 UTC (rev 646)
+++ trunk/getdata/configure.ac 2012-01-13 02:23:05 UTC (rev 647)
@@ -462,6 +462,7 @@
echo "*** Checking additional compiler characteristics"
echo
AC_C_INLINE
+AC_C_RESTRICT
GD_PROG_CC_WALL
GD_PROG_CC_WEXTRA
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2012-01-13 02:18:58
|
Revision: 646
http://getdata.svn.sourceforge.net/getdata/?rev=646&view=rev
Author: ketiltrout
Date: 2012-01-13 02:18:50 +0000 (Fri, 13 Jan 2012)
Log Message:
-----------
Restrictapalooza.
Modified Paths:
--------------
trunk/getdata/src/add.c
trunk/getdata/src/ascii.c
trunk/getdata/src/bzip.c
trunk/getdata/src/common.c
trunk/getdata/src/compat.c
trunk/getdata/src/del.c
trunk/getdata/src/encoding.c
trunk/getdata/src/entry.c
trunk/getdata/src/field_list.c
trunk/getdata/src/flimits.c
trunk/getdata/src/getdata.c
trunk/getdata/src/internal.h
trunk/getdata/src/native.c
trunk/getdata/src/open.c
trunk/getdata/src/parse.c
trunk/getdata/src/putdata.c
trunk/getdata/src/raw.c
trunk/getdata/src/sie.c
trunk/getdata/src/slim.c
trunk/getdata/src/spf.c
trunk/getdata/src/types.c
trunk/getdata/src/zzip.c
Modified: trunk/getdata/src/add.c
===================================================================
--- trunk/getdata/src/add.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/add.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -21,8 +21,8 @@
#include "internal.h"
/* add an entry - returns the added entry on success. */
-static gd_entry_t *_GD_Add(DIRFILE *D, const gd_entry_t *entry,
- const char *parent)
+static gd_entry_t *_GD_Add(DIRFILE *restrict D,
+ const gd_entry_t *restrict entry, const char *restrict parent)
{
char *temp_buffer;
int i, is_dot, offset;
@@ -1853,8 +1853,9 @@
}
/* add an alias */
-static int _GD_AddAlias(DIRFILE *D, const char *parent, const char *field_code,
- const char *target, int fragment_index)
+static int _GD_AddAlias(DIRFILE *restrict D, const char *restrict parent,
+ const char *restrict field_code, const char *restrict target,
+ int fragment_index)
{
unsigned u;
int offset;
Modified: trunk/getdata/src/ascii.c
===================================================================
--- trunk/getdata/src/ascii.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/ascii.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -138,8 +138,8 @@
dreturn("[\"%s\"]", fmt);
}
-ssize_t _GD_AsciiRead(struct _gd_raw_file *file, void *ptr, gd_type_t data_type,
- size_t nmemb)
+ssize_t _GD_AsciiRead(struct _gd_raw_file *restrict file, void *restrict ptr,
+ gd_type_t data_type, size_t nmemb)
{
char fmt[50];
size_t n = 0;
@@ -201,8 +201,8 @@
return (ret) ? ret : (ssize_t)n;
}
-ssize_t _GD_AsciiWrite(struct _gd_raw_file *file, const void *ptr,
- gd_type_t data_type, size_t nmemb)
+ssize_t _GD_AsciiWrite(struct _gd_raw_file *restrict file,
+ const void *restrict ptr, gd_type_t data_type, size_t nmemb)
{
ssize_t ret = 0;
size_t n = 0;
Modified: trunk/getdata/src/bzip.c
===================================================================
--- trunk/getdata/src/bzip.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/bzip.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -165,7 +165,7 @@
return (ptr->base + ptr->pos) / GD_SIZE(data_type);
}
-ssize_t _GD_Bzip2Read(struct _gd_raw_file *file, void *data,
+ssize_t _GD_Bzip2Read(struct _gd_raw_file *restrict file, void *restrict data,
gd_type_t data_type, size_t nmemb)
{
char* output = (char*)data;
Modified: trunk/getdata/src/common.c
===================================================================
--- trunk/getdata/src/common.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/common.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -40,7 +40,7 @@
* malloc'd. Returns a pointer if successful, NULL if unsuccessful.
* The length read is provided in *n. Increments *linenum as appropriate;
*/
-char *_GD_GetLine(FILE *fp, size_t *n, int* linenum)
+char *_GD_GetLine(FILE *restrict fp, size_t *restrict n, int *restrict linenum)
{
ssize_t len;
@@ -96,8 +96,9 @@
}
/* Binary search to find the field */
-gd_entry_t *_GD_FindField(const DIRFILE *D, const char *field_code,
- gd_entry_t **list, unsigned int u, int dealias, unsigned int *index)
+gd_entry_t *_GD_FindField(const DIRFILE *restrict D,
+ const char *restrict field_code, gd_entry_t *const *list, unsigned int u,
+ int dealias, unsigned int *restrict index)
{
int c;
char *ptr;
@@ -165,7 +166,8 @@
}
/* Insertion sort the entry list */
-void _GD_InsertSort(DIRFILE* D, gd_entry_t* E, int u) gd_nothrow
+void _GD_InsertSort(DIRFILE *restrict D, gd_entry_t *restrict E, int u)
+ gd_nothrow
{
dtrace("%p, %p, %i", D, E, u);
@@ -208,7 +210,8 @@
}
/* compute LUT table path -- this is used by _GD_Change, so e may not be E->e */
-int _GD_SetTablePath(DIRFILE *D, gd_entry_t *E, struct _gd_private_entry *e)
+int _GD_SetTablePath(DIRFILE *restrict D, const gd_entry_t *restrict E,
+ struct _gd_private_entry *restrict e)
{
char *temp_buffer;
@@ -245,7 +248,7 @@
/* _GD_ReadLinterpFile: Read in the linterp data for this field
*/
-void _GD_ReadLinterpFile(DIRFILE* D, gd_entry_t *E)
+void _GD_ReadLinterpFile(DIRFILE *restrict D, gd_entry_t *restrict E)
{
FILE *fp;
struct _gd_lut *ptr;
@@ -469,8 +472,9 @@
/* _GD_LinterpData: calibrate data using lookup table lut
*/
-void _GD_LinterpData(DIRFILE* D, void *data, gd_type_t type, int complex_table,
- const double *data_in, size_t npts, const struct _gd_lut *lut, size_t n_ln)
+void _GD_LinterpData(DIRFILE *restrict D, void *restrict data, gd_type_t type,
+ int complex_table, const double *restrict data_in, size_t npts,
+ const struct _gd_lut *restrict lut, size_t n_ln)
{
int idx = 0;
size_t i;
@@ -563,9 +567,10 @@
}
/* Compute a lincom, all at once */
-void _GD_LincomData(DIRFILE* D, int n, void* data1, gd_type_t return_type,
- double *data2, double *data3, double* m, double *b, gd_spf_t *spf,
- size_t n_read)
+void _GD_LincomData(DIRFILE *restrict D, int n, void *restrict data1,
+ gd_type_t return_type, const double *restrict data2,
+ const double *restrict data3, const double *restrict m,
+ const double *restrict b, const gd_spf_t *restrict spf, size_t n_read)
{
size_t i;
@@ -671,9 +676,10 @@
#endif
/* Compute a complex valued lincom, all at once */
-void _GD_CLincomData(DIRFILE* D, int n, void* data1, gd_type_t return_type,
- GD_DCOMPLEXP(data2), GD_DCOMPLEXP(data3), GD_DCOMPLEXV(m), GD_DCOMPLEXV(b),
- gd_spf_t *spf, size_t n_read)
+void _GD_CLincomData(DIRFILE *restrict D, int n, void *restrict data1,
+ gd_type_t return_type, const GD_DCOMPLEXP_t restrict data2,
+ const GD_DCOMPLEXP_t restrict data3, GD_DCOMPLEXV(m), GD_DCOMPLEXV(b),
+ const gd_spf_t *restrict spf, size_t n_read)
{
size_t i;
@@ -718,8 +724,8 @@
((t *)data)[i] = (t)(dividend / ((t *)data)[i])
/* Invert a vector */
-void _GD_InvertData(DIRFILE* D, void* data, gd_type_t return_type,
- double dividend, size_t n_read)
+void _GD_InvertData(DIRFILE *restrict D, void *restrict data,
+ gd_type_t return_type, double dividend, size_t n_read)
{
size_t i;
@@ -774,8 +780,8 @@
#endif
/* Invert a vector */
-void _GD_CInvertData(DIRFILE* D, void* data, gd_type_t return_type,
- GD_DCOMPLEXA(dividend), size_t n_read)
+void _GD_CInvertData(DIRFILE *restrict D, void *restrict data,
+ gd_type_t return_type, GD_DCOMPLEXA(dividend), size_t n_read)
{
size_t i;
@@ -802,8 +808,8 @@
dreturnvoid();
}
-int _GD_GetRepr(DIRFILE *D, const char *field_code_in, char **field_code,
- int err)
+int _GD_GetRepr(DIRFILE *restrict D, const char *restrict field_code_in,
+ char **restrict field_code, int err)
{
int repr = GD_REPR_NONE;
const int field_code_len = strlen(field_code_in);
@@ -845,7 +851,7 @@
}
/* Ensure that an input field has been identified (with error checking) */
-int _GD_BadInput(DIRFILE *D, gd_entry_t *E, int i, int err)
+int _GD_BadInput(DIRFILE *D, const gd_entry_t *E, int i, int err)
{
char *code, *munged_code;
int offset;
@@ -884,8 +890,9 @@
}
/* Find the entry and the representation */
-gd_entry_t *_GD_FindFieldAndRepr(DIRFILE *D, const char *field_code_in,
- char **field_code, int *repr, unsigned int *index, int set, int err)
+gd_entry_t *_GD_FindFieldAndRepr(DIRFILE *restrict D,
+ const char *restrict field_code_in, char **restrict field_code,
+ int *restrict repr, unsigned int *restrict index, int set, int err)
{
gd_entry_t *E = NULL;
@@ -1373,7 +1380,7 @@
return ptr;
}
-void *_GD_Realloc(DIRFILE *D, void *old, size_t size)
+void *_GD_Realloc(DIRFILE *restrict D, void *restrict old, size_t size)
{
void *ptr = realloc(old, size);
if (ptr == NULL)
Modified: trunk/getdata/src/compat.c
===================================================================
--- trunk/getdata/src/compat.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/compat.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -22,7 +22,7 @@
/* The MSVCRT gmtime() is threadsafe */
#ifndef HAVE_GMTIME_R
-struct tm *gmtime_r(const time_t *timep, struct tm *result)
+struct tm *gmtime_r(const time_t *restrict timep, struct tm *restrict result)
{
struct tm *ptr;
Modified: trunk/getdata/src/del.c
===================================================================
--- trunk/getdata/src/del.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/del.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -20,8 +20,8 @@
*/
#include "internal.h"
-static void _GD_ClearDerived(DIRFILE* D, gd_entry_t* E, const gd_entry_t* C,
- int check)
+static void _GD_ClearDerived(DIRFILE *restrict D, gd_entry_t *restrict E,
+ const gd_entry_t *restrict C, int check)
{
int i;
@@ -85,8 +85,9 @@
dreturnvoid();
}
-static int _GD_DeReferenceOne(DIRFILE* D, gd_entry_t* E, gd_entry_t* C,
- int check, int i, gd_type_t type, void *data)
+static int _GD_DeReferenceOne(DIRFILE *restrict D, gd_entry_t *restrict E,
+ gd_entry_t *restrict C, int check, int i, gd_type_t type,
+ void *restrict data)
{
int repr;
char *field_code;
@@ -125,8 +126,8 @@
return 0;
}
-static void _GD_DeReference(DIRFILE* D, gd_entry_t* E, gd_entry_t* C,
- int check)
+static void _GD_DeReference(DIRFILE *restrict D, gd_entry_t *restrict E,
+ gd_entry_t *restrict C, int check)
{
int i;
@@ -216,8 +217,8 @@
dreturnvoid();
}
-static int _GD_Delete(DIRFILE *D, gd_entry_t *E, unsigned int index,
- unsigned int flags)
+static int _GD_Delete(DIRFILE *restrict D, gd_entry_t *restrict E,
+ unsigned int index, unsigned int flags)
{
unsigned int first, last = 0;
int n_del, i, len;
Modified: trunk/getdata/src/encoding.c
===================================================================
--- trunk/getdata/src/encoding.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/encoding.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -174,8 +174,8 @@
encoding == GD_SIE_ENCODED))
#ifdef USE_MODULES
-static void* _GD_ResolveSymbol(lt_dlhandle lib, struct encoding_t* enc,
- const char* name)
+static void *_GD_ResolveSymbol(lt_dlhandle lib, struct encoding_t *restrict enc,
+ const char *restrict name)
{
void* func;
char symbol[100];
@@ -291,7 +291,8 @@
return ret;
}
-static int _GD_MoveOver(DIRFILE *D, int fragment, struct _gd_raw_file *file)
+static int _GD_MoveOver(DIRFILE *restrict D, int fragment,
+ struct _gd_raw_file *restrict file)
{
const int dirfd = D->fragment[fragment].dirfd;
#ifdef HAVE_FCHMOD
@@ -332,7 +333,7 @@
/* Close a raw file, taking care of cleaning-up out-of-place writes, and
* discarding temporary files */
-int _GD_FiniRawIO(DIRFILE *D, gd_entry_t *E, int fragment, int flags)
+int _GD_FiniRawIO(DIRFILE *D, const gd_entry_t *E, int fragment, int flags)
{
const int clotemp = (flags & GD_FINIRAW_CLOTEMP) ? 1 : 0;
const int old_mode = E->e->u.raw.file[0].mode;
@@ -413,7 +414,7 @@
}
/* Perform a RAW field write */
-ssize_t _GD_WriteOut(DIRFILE *D gd_unused_d, gd_entry_t *E,
+ssize_t _GD_WriteOut(DIRFILE *D gd_unused_d, const gd_entry_t *E,
const struct encoding_t *enc, const void *ptr, gd_type_t type, size_t n,
int temp)
{
@@ -444,7 +445,7 @@
}
/* Open a raw file, if necessary; also check for required functions */
-int _GD_InitRawIO(DIRFILE *D, gd_entry_t *E, const char *filebase,
+int _GD_InitRawIO(DIRFILE *D, const gd_entry_t *E, const char *filebase,
int fragment, const struct encoding_t *enc, unsigned int funcs,
unsigned int mode, int swap)
{
@@ -576,9 +577,9 @@
}
/* Figure out the encoding scheme */
-static unsigned long _GD_ResolveEncoding(DIRFILE *D, const char* name,
- const char *enc_data, unsigned long scheme, int dirfd,
- struct _gd_raw_file *file)
+static unsigned long _GD_ResolveEncoding(DIRFILE *restrict D,
+ const char *restrict name, const char *restrict enc_data,
+ unsigned long scheme, int dirfd, struct _gd_raw_file *restrict file)
{
char *candidate;
int i;
@@ -632,7 +633,7 @@
return GD_AUTO_ENCODED;
}
-int _GD_Supports(DIRFILE* D, gd_entry_t* E, unsigned int funcs)
+int _GD_Supports(DIRFILE *D, const gd_entry_t *E, unsigned int funcs)
{
dtrace("%p, %p, 0x%X", D, E, funcs);
@@ -669,8 +670,9 @@
return 1;
}
-int _GD_GenericName(DIRFILE* D, const char *enc_data __gd_unused,
- struct _gd_raw_file* file, const char* base, int temp,
+int _GD_GenericName(DIRFILE *restrict D,
+ const char *restrict enc_data __gd_unused,
+ struct _gd_raw_file *restrict file, const char *restrict base, int temp,
int resolv __gd_unused)
{
dtrace("%p, <unused>, %p, \"%s\", %i, <unused>", D, file, base, temp);
@@ -953,8 +955,8 @@
return r;
}
-int _GD_GenericMove(int olddirfd, struct _gd_raw_file* file, int newdirfd,
- char* new_path)
+int _GD_GenericMove(int olddirfd, struct _gd_raw_file *restrict file,
+ int newdirfd, char *restrict new_path)
{
int r, rename_errno;
Modified: trunk/getdata/src/entry.c
===================================================================
--- trunk/getdata/src/entry.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/entry.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -20,7 +20,7 @@
*/
#include "internal.h"
-void _GD_FreeE(DIRFILE *D, gd_entry_t* entry, int priv)
+void _GD_FreeE(DIRFILE *restrict D, gd_entry_t *restrict entry, int priv)
{
int i;
@@ -142,8 +142,8 @@
return entry;
}
-static void _GD_GetScalar(DIRFILE *D, gd_entry_t *E, int i, gd_type_t type,
- void *data, int err)
+static void _GD_GetScalar(DIRFILE *restrict D, gd_entry_t *restrict E, int i,
+ gd_type_t type, void *restrict data, int err)
{
void *ptr = NULL;
gd_entry_t* C = NULL;
@@ -206,7 +206,7 @@
}
/* resolve non-literal scalars */
-int _GD_CalculateEntry(DIRFILE *D, gd_entry_t *E, int err)
+int _GD_CalculateEntry(DIRFILE *restrict D, gd_entry_t *restrict E, int err)
{
int i;
Modified: trunk/getdata/src/field_list.c
===================================================================
--- trunk/getdata/src/field_list.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/field_list.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -25,7 +25,7 @@
static const gd_carray_t zero_carrays[1] = { {0, NULL} };
/* returns true if E a member of the given list */
-int _GD_ListEntry(gd_entry_t *E, int meta, int vector, gd_entype_t type)
+int _GD_ListEntry(const gd_entry_t *E, int meta, int vector, gd_entype_t type)
{
dtrace("%p{%s}, %i, %i, 0x%X", E, E->field, meta, vector, type);
Modified: trunk/getdata/src/flimits.c
===================================================================
--- trunk/getdata/src/flimits.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/flimits.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -170,7 +170,8 @@
return gd_frameoffset64(D, fragment);
}
-off64_t _GD_GetEOF(DIRFILE *D, gd_entry_t* E, const char *parent, int *is_index)
+off64_t _GD_GetEOF(DIRFILE *restrict D, const gd_entry_t *restrict E,
+ const char *restrict parent, int *restrict is_index)
{
off64_t ns = -1, ns1;
gd_spf_t spf0, spf1;
@@ -389,8 +390,8 @@
return (off_t)gd_eof64(D, field_code);
}
-static off64_t _GD_GetBOF(DIRFILE *D, gd_entry_t* E, const char *parent,
- gd_spf_t *spf, long long *ds)
+static off64_t _GD_GetBOF(DIRFILE *restrict D, const gd_entry_t *restrict E,
+ const char *restrict parent, gd_spf_t *restrict spf, long long *restrict ds)
{
off64_t bof = -1, bof1;
gd_spf_t spf1;
Modified: trunk/getdata/src/getdata.c
===================================================================
--- trunk/getdata/src/getdata.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/getdata.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -99,8 +99,8 @@
#endif
-static void _GD_ExtractRepr(DIRFILE* D, const void* cdata, gd_type_t in_type,
- void* rdata, gd_type_t type, size_t n, int repr)
+static void _GD_ExtractRepr(DIRFILE *restrict D, const void *restrict cdata,
+ gd_type_t in_type, void *restrict rdata, gd_type_t type, size_t n, int repr)
{
size_t i;
@@ -250,8 +250,8 @@
/* _GD_DoRaw: Read from a raw. Returns number of samples read.
*/
-static size_t _GD_DoRaw(DIRFILE *D, gd_entry_t *E, off64_t s0, size_t ns,
- gd_type_t return_type, void *data_out)
+static size_t _GD_DoRaw(DIRFILE *restrict D, gd_entry_t *restrict E, off64_t s0,
+ size_t ns, gd_type_t return_type, void *restrict data_out)
{
size_t n_read = 0;
ssize_t samples_read;
@@ -407,8 +407,8 @@
/* _GD_PolynomData: Compute data = Sum(i=0..n; data**i * a[i]), for scalar a,
* and integer 2 <= n < GD_MAX_POLYORD
*/
-static void _GD_PolynomData(DIRFILE* D, void *data, gd_type_t type, size_t npts,
- int n, double* a)
+static void _GD_PolynomData(DIRFILE *restrict D, void *restrict data,
+ gd_type_t type, size_t npts, int n, const double *restrict a)
{
size_t i;
@@ -594,8 +594,8 @@
/* _GD_CPolynomData: Compute data = Sum(i=0..n; data**i * a[i]), for complex
* scalar a, and integer 2 <= n < GD_MAX_POLYORD
*/
-static void _GD_CPolynomData(DIRFILE* D, void *data, gd_type_t type,
- size_t npts, int n, GD_DCOMPLEXV(a))
+static void _GD_CPolynomData(DIRFILE *restrict D, void *restrict data,
+ gd_type_t type, size_t npts, int n, GD_DCOMPLEXV(a))
{
size_t i;
@@ -644,8 +644,8 @@
/* MultiplyData: Multiply A by B. B is unchanged.
*/
-static void _GD_MultiplyData(DIRFILE* D, void *A, gd_spf_t spfA, double *B,
- gd_spf_t spfB, gd_type_t type, size_t n)
+static void _GD_MultiplyData(DIRFILE *restrict D, void *restrict A,
+ gd_spf_t spfA, double *B, gd_spf_t spfB, gd_type_t type, size_t n)
{
size_t i;
@@ -695,8 +695,8 @@
/* CMultiplyData: Multiply A by B. B is complex.
*/
-static void _GD_CMultiplyData(DIRFILE* D, void *A, gd_spf_t spfA,
- GD_DCOMPLEXP(B), gd_spf_t spfB, gd_type_t type, size_t n)
+static void _GD_CMultiplyData(DIRFILE *restrict D, void *restrict A,
+ gd_spf_t spfA, GD_DCOMPLEXP(B), gd_spf_t spfB, gd_type_t type, size_t n)
{
size_t i;
@@ -740,8 +740,8 @@
/* DivideData: Divide B by A. B is unchanged.
*/
-static void _GD_DivideData(DIRFILE *D, void *A, gd_spf_t spfA, double *B,
- gd_spf_t spfB, gd_type_t type, size_t n)
+static void _GD_DivideData(DIRFILE *restrict D, void *restrict A, gd_spf_t spfA,
+ double *restrict B, gd_spf_t spfB, gd_type_t type, size_t n)
{
size_t i;
@@ -792,8 +792,8 @@
/* CDivideData: Divide A by B. B is complex.
*/
-static void _GD_CDivideData(DIRFILE *D, void *A, gd_spf_t spfA,
- GD_DCOMPLEXP(B), gd_spf_t spfB, gd_type_t type, size_t n)
+static void _GD_CDivideData(DIRFILE *restrict D, void *restrict A,
+ gd_spf_t spfA, GD_DCOMPLEXP(B), gd_spf_t spfB, gd_type_t type, size_t n)
{
size_t i;
@@ -860,9 +860,9 @@
/* WindowData: Zero data in A where the condition is false. B is unchanged.
*/
-static void _GD_WindowData(DIRFILE* D, void *A, gd_spf_t spfA, void *B,
- gd_spf_t spfB, gd_type_t type, gd_windop_t op, gd_triplet_t threshold,
- size_t n)
+static void _GD_WindowData(DIRFILE *restrict D, void *restrict A, gd_spf_t spfA,
+ void *restrict B, gd_spf_t spfB, gd_type_t type, gd_windop_t op,
+ gd_triplet_t threshold, size_t n)
{
size_t i;
const double NaN = NAN;
@@ -918,9 +918,9 @@
} while(0)
/* demultiplex data */
-static void _GD_MplexData(DIRFILE *D, void *A, gd_spf_t spfA,
- const uint16_t *B, gd_spf_t spfB, gd_type_t type, gd_count_t val,
- void *start, size_t n)
+static void _GD_MplexData(DIRFILE *restrict D, void *restrict A, gd_spf_t spfA,
+ const uint16_t *restrict B, gd_spf_t spfB, gd_type_t type, gd_count_t val,
+ void *restrict start, size_t n)
{
size_t i;
@@ -950,8 +950,9 @@
/* _GD_DoLincom: Read from a lincom. Returns number of samples read.
*/
-static size_t _GD_DoLincom(DIRFILE *D, gd_entry_t *E, off64_t first_samp,
- size_t num_samp, gd_type_t return_type, void *data_out)
+static size_t _GD_DoLincom(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t return_type,
+ void *restrict data_out)
{
gd_spf_t spf[GD_MAX_LINCOM];
size_t n_read;
@@ -1085,8 +1086,9 @@
/* _GD_DoMultiply: Read from a multiply. Returns number of samples read.
*/
-static size_t _GD_DoMultiply(DIRFILE *D, gd_entry_t* E, off64_t first_samp,
- size_t num_samp, gd_type_t return_type, void *data_out)
+static size_t _GD_DoMultiply(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t return_type,
+ void *restrict data_out)
{
void *tmpbuf = NULL;
gd_spf_t spf1, spf2;
@@ -1183,8 +1185,9 @@
/* _GD_DoRecip: Read from a recip. Returns number of samples read.
*/
-static size_t _GD_DoRecip(DIRFILE *D, gd_entry_t* E, off64_t first_samp,
- size_t num_samp, gd_type_t return_type, void *data_out)
+static size_t _GD_DoRecip(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t return_type,
+ void *restrict data_out)
{
size_t n_read;
@@ -1224,8 +1227,9 @@
/* _GD_DoDivide: Read from a divide. Returns number of samples read.
*/
-static size_t _GD_DoDivide(DIRFILE *D, gd_entry_t* E, off64_t first_samp,
- size_t num_samp, gd_type_t return_type, void *data_out)
+static size_t _GD_DoDivide(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t return_type,
+ void *restrict data_out)
{
void *tmpbuf = NULL;
gd_spf_t spf1, spf2;
@@ -1319,8 +1323,9 @@
/* _GD_DoBit: Read from a bitfield. Returns number of samples read.
* This is used by both BIT and SBIT (is_signed distinguishes)
*/
-static size_t _GD_DoBit(DIRFILE *D, gd_entry_t *E, int is_signed,
- off64_t first_samp, size_t num_samp, gd_type_t return_type, void *data_out)
+static size_t _GD_DoBit(DIRFILE *restrict D, gd_entry_t *restrict E,
+ int is_signed, off64_t first_samp, size_t num_samp, gd_type_t return_type,
+ void *restrict data_out)
{
void *tmpbuf;
size_t i;
@@ -1375,8 +1380,9 @@
/* _GD_DoPhase: Read from a phase. Returns number of samples read.
*/
-static size_t _GD_DoPhase(DIRFILE *D, gd_entry_t *E, off64_t first_samp,
- size_t num_samp, gd_type_t return_type, void *data_out)
+static size_t _GD_DoPhase(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t return_type,
+ void *restrict data_out)
{
size_t n_read;
@@ -1397,8 +1403,9 @@
/* _GD_DoLinterp: Read from a linterp. Returns number of samples read.
*/
-static size_t _GD_DoLinterp(DIRFILE *D, gd_entry_t* E, off64_t first_samp,
- size_t num_samp, gd_type_t return_type, void *data_out)
+static size_t _GD_DoLinterp(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t return_type,
+ void *restrict data_out)
{
size_t n_read = 0;
double* data_in;
@@ -1447,8 +1454,9 @@
/* _GD_DoPolynom: Read from a polynom. Returns number of samples read.
*/
-static size_t _GD_DoPolynom(DIRFILE *D, gd_entry_t *E, off64_t first_samp,
- size_t num_samp, gd_type_t return_type, void *data_out)
+static size_t _GD_DoPolynom(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t return_type,
+ void *restrict data_out)
{
size_t n_read;
@@ -1488,8 +1496,9 @@
/* _GD_DoWindow: Read from a window. Returns number of samples read.
*/
-static size_t _GD_DoWindow(DIRFILE *D, gd_entry_t* E, off64_t first_samp,
- size_t num_samp, gd_type_t return_type, void *data_out)
+static size_t _GD_DoWindow(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t return_type,
+ void *restrict data_out)
{
void *tmpbuf = NULL;
gd_spf_t spf1, spf2;
@@ -1592,8 +1601,9 @@
/* _GD_DoMplex: Read from an mplex. Returns number of samples read.
*/
-static size_t _GD_DoMplex(DIRFILE *D, gd_entry_t *E, off64_t first_samp,
- size_t num_samp, gd_type_t return_type, void *data_out)
+static size_t _GD_DoMplex(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t return_type,
+ void *restrict data_out)
{
char start[16];
uint16_t *tmpbuf = NULL;
@@ -1757,8 +1767,8 @@
/* _GD_DoConst: Read from a const. Returns number of samples read (ie. 1).
*/
-static size_t _GD_DoConst(DIRFILE *D, const gd_entry_t *E, off64_t first,
- size_t len, gd_type_t return_type, void *data_out)
+static size_t _GD_DoConst(DIRFILE *restrict D, const gd_entry_t *restrict E,
+ off64_t first, size_t len, gd_type_t return_type, void *restrict data_out)
{
gd_type_t type;
@@ -1781,7 +1791,8 @@
/* _GD_DoString: Read from a string. Returns number of samples read (ie. the
* length of the string plus 1).
*/
-static size_t _GD_DoString(gd_entry_t *E, size_t num_samp, char *data_out)
+static size_t _GD_DoString(gd_entry_t *restrict E, size_t num_samp,
+ char *restrict data_out)
{
dtrace("%p, %zu, %p", E, num_samp, data_out);
@@ -1794,8 +1805,9 @@
/* _GD_DoField: Locate the field in the database and read it.
*/
-size_t _GD_DoField(DIRFILE *D, gd_entry_t *E, int repr, off64_t first_samp,
- size_t num_samp, gd_type_t return_type, void *data_out)
+size_t _GD_DoField(DIRFILE *restrict D, gd_entry_t *restrict E, int repr,
+ off64_t first_samp, size_t num_samp, gd_type_t return_type,
+ void *restrict data_out)
{
size_t n_read = 0;
gd_type_t ntype;
Modified: trunk/getdata/src/internal.h
===================================================================
--- trunk/getdata/src/internal.h 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/internal.h 2012-01-13 02:18:50 UTC (rev 646)
@@ -114,7 +114,7 @@
#ifdef GD_NO_C99_API
# define GD_DCOMPLEXP_t double *
# define GD_DCOMPLEXA(v) double v[2]
-# define GD_DCOMPLEXV(v) double v[][2]
+# define GD_DCOMPLEXV(v) double v[restrict][2]
# define cabs(z) sqrt((z)[0] * (z)[0] + (z)[1] * (z)[1])
# define carg(z) atan2((z)[1], (z)[0])
# define creal(z) ((z)[0])
@@ -136,7 +136,7 @@
#else
# define GD_DCOMPLEXP_t double _Complex *
# define GD_DCOMPLEXA(v) double _Complex v
-# define GD_DCOMPLEXV(v) double _Complex* v
+# define GD_DCOMPLEXV(v) double _Complex *restrict v
# define _gd_a2c(a,b) a = *((double complex*)(b))
# define _gd_c2c(a,b) a = b
# define _gd_c2cp(a,b) *a = b
@@ -920,7 +920,7 @@
/* forward declarations */
void *_GD_Alloc(DIRFILE*, gd_type_t, size_t) __attribute_malloc__;
void _GD_ArmEndianise(uint64_t*, int, size_t);
-int _GD_BadInput(DIRFILE*, gd_entry_t*, int, int);
+int _GD_BadInput(DIRFILE *, const gd_entry_t *, int, int);
#define _GD_BadWindop(op) \
( \
@@ -929,19 +929,19 @@
(op != GD_WINDOP_SET) && (op != GD_WINDOP_CLR) \
)
-int _GD_CalculateEntry(DIRFILE*, gd_entry_t*, int);
-char *_GD_CanonicalPath(const char*, const char*);
-void _GD_CInvertData(DIRFILE* D, void* data, gd_type_t return_type,
- GD_DCOMPLEXA(dividend), size_t n_read);
+int _GD_CalculateEntry(DIRFILE *restrict, gd_entry_t *restrict, int);
+char *_GD_CanonicalPath(const char *restrict, const char *restrict);
+void _GD_CInvertData(DIRFILE *restrict, void *restrict, gd_type_t return_type,
+ GD_DCOMPLEXA(dividend), size_t);
/* _GD_ClearError: Everything's A-OK; clear the last error. */
#define _GD_ClearError(D) (D)->error = 0
-void _GD_CLincomData(DIRFILE* D, int n, void* data1, gd_type_t return_type,
- GD_DCOMPLEXP(data2), GD_DCOMPLEXP(data3), GD_DCOMPLEXV(m), GD_DCOMPLEXV(b),
- gd_spf_t *spf, size_t n_read);
-void _GD_ConvertType(DIRFILE* D, const void *data_in, gd_type_t in_type,
- void *data_out, gd_type_t out_type, size_t n) gd_nothrow;
+void _GD_CLincomData(DIRFILE *restrict, int, void *restrict, gd_type_t,
+ const GD_DCOMPLEXP_t restrict, const GD_DCOMPLEXP_t restrict,
+ GD_DCOMPLEXV(m), GD_DCOMPLEXV(b), const gd_spf_t *restrict, size_t);
+void _GD_ConvertType(DIRFILE *restrict, const void *restrict, gd_type_t,
+ void *restrict, gd_type_t, size_t) gd_nothrow;
gd_type_t _GD_ConstType(DIRFILE *D, gd_type_t type);
const char *_GD_DirName(const DIRFILE *D, int dirfd);
@@ -957,15 +957,15 @@
((t) == GD_CARRAY_ENTRY) ? 14 : ((t) == GD_STRING_ENTRY) ? 15 : -1 \
)
-size_t _GD_DoField(DIRFILE*, gd_entry_t*, int, off64_t, size_t, gd_type_t,
- void*);
-size_t _GD_DoFieldOut(DIRFILE*, gd_entry_t*, int, off64_t, size_t, gd_type_t,
- const void*);
+size_t _GD_DoField(DIRFILE *restrict, gd_entry_t *restrict, int, off64_t,
+ size_t, gd_type_t, void *restrict);
+size_t _GD_DoFieldOut(DIRFILE *restrict, gd_entry_t *restrict, int, off64_t,
+ size_t, gd_type_t, const void *restrict);
int _GD_EntryCmp(const void*, const void*);
-gd_entry_t *_GD_FindField(const DIRFILE*, const char*, gd_entry_t**,
- unsigned int, int, unsigned int*);
-gd_entry_t *_GD_FindFieldAndRepr(DIRFILE*, const char*, char**, int*,
- unsigned int*, int, int);
+gd_entry_t *_GD_FindField(const DIRFILE *restrict, const char *restrict,
+ gd_entry_t *const *, unsigned int, int, unsigned int *restrict);
+gd_entry_t *_GD_FindFieldAndRepr(DIRFILE *restrict, const char *restrict,
+ char **restrict, int *restrict, unsigned int *restrict, int, int);
uint64_t _GD_FindVersion(DIRFILE *D);
void _GD_FixEndianness(void* databuffer, size_t size, size_t ns);
#ifdef WORDS_BIGENDIAN
@@ -973,88 +973,93 @@
#else
#define _GD_FileSwapBytes(D,i) ((D)->fragment[i].byte_sex & GD_BIG_ENDIAN)
#endif
-int _GD_FiniRawIO(DIRFILE*, gd_entry_t*, int, int);
-void _GD_Flush(DIRFILE* D, gd_entry_t *E, int);
+int _GD_FiniRawIO(DIRFILE*, const gd_entry_t*, int, int);
+void _GD_Flush(DIRFILE *restrict, gd_entry_t *restrict, int);
void _GD_FlushMeta(DIRFILE* D, int fragment, int force);
-void _GD_FreeE(DIRFILE*, gd_entry_t*, int);
-off64_t _GD_GetEOF(DIRFILE *D, gd_entry_t* E, const char *parent,
- int *is_index);
-off64_t _GD_GetFilePos(DIRFILE *D, gd_entry_t *E, off64_t index_pos);
-char *_GD_GetLine(FILE *fp, size_t *n, int* linenum);
-int _GD_GetRepr(DIRFILE*, const char*, char**, int);
-gd_spf_t _GD_GetSPF(DIRFILE*, gd_entry_t*);
-int _GD_GrabDir(DIRFILE*, int, const char*);
-int _GD_Include(DIRFILE*, const char*, const char*, int, char**, int,
- const char*, const char*, int*, unsigned long*, int);
+void _GD_FreeE(DIRFILE *restrict, gd_entry_t *restrict, int);
+off64_t _GD_GetEOF(DIRFILE *restrict, const gd_entry_t *restrict,
+ const char *restrict, int *restrict);
+off64_t _GD_GetFilePos(DIRFILE *restrict, gd_entry_t *restrict, off64_t);
+char *_GD_GetLine(FILE *restrict, size_t *restrict, int *restrict);
+int _GD_GetRepr(DIRFILE *restrict, const char *restrict,
+ char **restrict, int);
+gd_spf_t _GD_GetSPF(DIRFILE*, const gd_entry_t*);
+int _GD_GrabDir(DIRFILE*, int, const char *restrict);
+int _GD_Include(DIRFILE*, const char *restrict, const char *restrict, int,
+ char **restrict, int, const char *restrict, const char *restrict,
+ int *restrict, unsigned long *restrict, int);
void _GD_InitialiseFramework(void);
-int _GD_InitRawIO(DIRFILE*, gd_entry_t*, const char*, int,
+int _GD_InitRawIO(DIRFILE*, const gd_entry_t*, const char*, int,
const struct encoding_t*, unsigned int, unsigned int, int);
-void _GD_InvertData(DIRFILE* D, void* data, gd_type_t return_type,
+void _GD_InvertData(DIRFILE *restrict, void *restrict, gd_type_t return_type,
double dividend, size_t n_read);
-void _GD_InsertSort(DIRFILE* D, gd_entry_t* E, int u) gd_nothrow;
+void _GD_InsertSort(DIRFILE *restrict, gd_entry_t *restrict, int u) gd_nothrow;
#define _GD_InternalError(D) \
_GD_SetError(D, GD_E_INTERNAL_ERROR, 0, __FILE__, __LINE__, NULL)
gd_type_t _GD_LegacyType(char c);
-void _GD_LincomData(DIRFILE* D, int n, void* data1, gd_type_t return_type,
- double *data2, double *data3, double* m, double *b, gd_spf_t *spf,
- size_t n_read);
-void _GD_LinterpData(DIRFILE* D, void *data, gd_type_t type, int complex_table,
- const double *data_in, size_t npts, const struct _gd_lut *lut, size_t n_ln);
-int _GD_ListEntry(gd_entry_t*, int, int, gd_entype_t);
-char *_GD_MakeFullPath(DIRFILE*, int, const char*, int);
+void _GD_LincomData(DIRFILE *restrict, int n, void *restrict,
+ gd_type_t return_type, const double *restrict, const double *restrict,
+ const double *restrict, const double *restrict, const gd_spf_t *restrict,
+ size_t);
+void _GD_LinterpData(DIRFILE *restrict, void *restrict, gd_type_t, int,
+ const double *restrict, size_t, const struct _gd_lut *restrict, size_t);
+int _GD_ListEntry(const gd_entry_t*, int, int, gd_entype_t);
+char *_GD_MakeFullPath(DIRFILE *restrict, int, const char *restrict, int);
#define _GD_MakeFullPathOnly gd_MakeFullPathOnly
char *_GD_MakeFullPathOnly(const DIRFILE *D, int dirfd, const char *name);
int _GD_MakeTempFile(const DIRFILE*, int, char*);
void *_GD_Malloc(DIRFILE *D, size_t size);
int _GD_MissingFramework(int encoding, unsigned int funcs);
-int _GD_MogrifyFile(DIRFILE* D, gd_entry_t* E, unsigned long int encoding,
- unsigned long int byte_sex, off64_t offset, int finalise, int new_fragment,
- char* new_filebase);
-char *_GD_MungeCode(DIRFILE*, const gd_entry_t*, const char *, const char*,
- const char*, const char*, const char*, int*);
-char *_GD_MungeFromFrag(DIRFILE*, const gd_entry_t*, int, const char*, int*);
-gd_type_t _GD_NativeType(DIRFILE* D, gd_entry_t* E, int repr);
-gd_entry_t* _GD_ParseFieldSpec(DIRFILE* D, int n_cols, char** in_cols,
- const gd_entry_t* P, const char* format_file, int linenum, int me,
- int standards, int creat, unsigned long flags, int insert, char **outstring,
- const char *tok_pos);
-char *_GD_ParseFragment(FILE*, DIRFILE*, int, int*, unsigned long int*, int);
-void _GD_ReadLinterpFile(DIRFILE* D, gd_entry_t *E);
-void *_GD_Realloc(DIRFILE *D, void *old, size_t size);
+int _GD_MogrifyFile(DIRFILE *restrict, gd_entry_t *restrict, unsigned long int,
+ unsigned long int, off64_t, int, int, char *restrict);
+char *_GD_MungeCode(DIRFILE *restrict, const gd_entry_t *restrict,
+ const char *restrict, const char *restrict, const char *restrict,
+ const char *restrict, const char *restrict, int *restrict);
+char *_GD_MungeFromFrag(DIRFILE *restrict, const gd_entry_t *restrict, int,
+ const char *restrict, int *restrict);
+gd_type_t _GD_NativeType(DIRFILE *restrict, gd_entry_t *restrict, int);
+gd_entry_t *_GD_ParseFieldSpec(DIRFILE *restrict, int, char**,
+ const gd_entry_t *restrict, const char *restrict, int, int, int, int,
+ unsigned long, int, char**, const char*);
+char *_GD_ParseFragment(FILE *restrict, DIRFILE *restrict, int, int *restrict,
+ unsigned long int *restrict, int);
+void _GD_ReadLinterpFile(DIRFILE *restrict, gd_entry_t *restrict);
+void *_GD_Realloc(DIRFILE *restrict, void *restrict, size_t size);
void _GD_ReleaseDir(DIRFILE *D, int dirfd);
-int _GD_Seek(DIRFILE *D, gd_entry_t *E, off64_t offset, unsigned int mode);
-void _GD_SetError(DIRFILE* D, int error, int suberror, const char* format_file,
- int line, const char* token);
-int _GD_SetTablePath(DIRFILE *D, gd_entry_t *E, struct _gd_private_entry *e);
-int _GD_StrCmpNull(const char *, const char *);
-char *_GD_Strdup(DIRFILE *D, const char *s);
-int _GD_Supports(DIRFILE* D, gd_entry_t* E, unsigned int funcs);
-int _GD_Tokenise(DIRFILE *D, const char* instring, char **outstring,
- const char **pos, char** in_cols, const char* format_file, int linenum,
- int standards, int pedantic);
+int _GD_Seek(DIRFILE *restrict, gd_entry_t *restrict, off64_t offset,
+ unsigned int mode);
+void _GD_SetError(DIRFILE*, int, int, const char*, int, const char*);
+int _GD_SetTablePath(DIRFILE *restrict, const gd_entry_t *restrict,
+ struct _gd_private_entry *restrict);
+int _GD_StrCmpNull(const char *restrict, const char *restrict);
+char *_GD_Strdup(DIRFILE *restrict, const char *restrict);
+int _GD_Supports(DIRFILE *, const gd_entry_t*, unsigned int funcs);
+int _GD_Tokenise(DIRFILE *restrict, const char *restrict, char **,
+ const char **, char **, const char *restrict, int linenum, int standards,
+ int pedantic);
void _GD_UpdateAliases(DIRFILE*);
int _GD_ValidateField(const char*, int, int, int, int*);
-off64_t _GD_WriteSeek(DIRFILE*, gd_entry_t*, const struct encoding_t*, off64_t,
- unsigned int mode);
-ssize_t _GD_WriteOut(DIRFILE *D, gd_entry_t *E, const struct encoding_t *enc,
- const void *buf, gd_type_t type, size_t n, int temp);
+off64_t _GD_WriteSeek(DIRFILE *restrict, gd_entry_t *restrict,
+ const struct encoding_t *restrict, off64_t, unsigned int mode);
+ssize_t _GD_WriteOut(DIRFILE*, const gd_entry_t*, const struct encoding_t*,
+ const void*, gd_type_t, size_t, int);
/* generic I/O methods */
-int _GD_GenericMove(int, struct _gd_raw_file* file, int, char* new_path);
-int _GD_GenericName(DIRFILE*, const char *, struct _gd_raw_file*, const char*,
- int, int);
+int _GD_GenericMove(int, struct _gd_raw_file *restrict, int, char *restrict);
+int _GD_GenericName(DIRFILE *restrict, const char *restrict,
+ struct _gd_raw_file *restrict, const char *restrict, int, int);
int _GD_GenericUnlink(int, struct _gd_raw_file* file);
/* unencoded I/O methods */
int _GD_RawOpen(int, struct _gd_raw_file* file, int swap, unsigned int);
off64_t _GD_RawSeek(struct _gd_raw_file* file, off64_t count,
gd_type_t data_type, unsigned int);
-ssize_t _GD_RawRead(struct _gd_raw_file* file, void *ptr, gd_type_t data_type,
- size_t nmemb);
-ssize_t _GD_RawWrite(struct _gd_raw_file* file, const void *ptr,
- gd_type_t data_type, size_t nmemb);
+ssize_t _GD_RawRead(struct _gd_raw_file *restrict, void *restrict, gd_type_t,
+ size_t);
+ssize_t _GD_RawWrite(struct _gd_raw_file *restrict, const void *restrict,
+ gd_type_t, size_t);
int _GD_RawSync(struct _gd_raw_file* file);
int _GD_RawClose(struct _gd_raw_file* file);
off64_t _GD_RawSize(int, struct _gd_raw_file* file, gd_type_t data_type,
@@ -1064,11 +1069,10 @@
int _GD_AsciiOpen(int, struct _gd_raw_file* file, int swap, unsigned int);
off64_t _GD_AsciiSeek(struct _gd_raw_file* file, off64_t count,
gd_type_t data_type, unsigned int);
-ssize_t _GD_AsciiRead(struct _gd_raw_file* file, void *ptr, gd_type_t data_type,
- size_t nmemb);
-ssize_t _GD_AsciiWrite(struct _gd_raw_file* file, const void *ptr,
- gd_type_t data_type,
- size_t nmemb);
+ssize_t _GD_AsciiRead(struct _gd_raw_file *restrict, void *restrict, gd_type_t,
+ size_t);
+ssize_t _GD_AsciiWrite(struct _gd_raw_file *restrict, const void *restrict,
+ gd_type_t, size_t);
int _GD_AsciiSync(struct _gd_raw_file* file);
int _GD_AsciiClose(struct _gd_raw_file* file);
off64_t _GD_AsciiSize(int, struct _gd_raw_file* file, gd_type_t data_type,
@@ -1078,8 +1082,8 @@
int _GD_Bzip2Open(int, struct _gd_raw_file* file, int swap, unsigned int);
off64_t _GD_Bzip2Seek(struct _gd_raw_file* file, off64_t count,
gd_type_t data_type, unsigned int);
-ssize_t _GD_Bzip2Read(struct _gd_raw_file* file, void *ptr, gd_type_t data_type,
- size_t nmemb);
+ssize_t _GD_Bzip2Read(struct _gd_raw_file *restrict, void *restrict, gd_type_t,
+ size_t);
int _GD_Bzip2Close(struct _gd_raw_file* file);
off64_t _GD_Bzip2Size(int, struct _gd_raw_file* file, gd_type_t data_type,
int swap);
@@ -1088,10 +1092,10 @@
int _GD_GzipOpen(int, struct _gd_raw_file* file, int swap, unsigned int);
off64_t _GD_GzipSeek(struct _gd_raw_file* file, off64_t count,
gd_type_t data_type, unsigned int);
-ssize_t _GD_GzipRead(struct _gd_raw_file* file, void *ptr, gd_type_t data_type,
- size_t nmemb);
-ssize_t _GD_GzipWrite(struct _gd_raw_file *file, const void *ptr,
- gd_type_t data_type, size_t nmemb);
+ssize_t _GD_GzipRead(struct _gd_raw_file *restrict, void *restrict, gd_type_t,
+ size_t);
+ssize_t _GD_GzipWrite(struct _gd_raw_file *restrict, const void *restrict,
+ gd_type_t, size_t);
int _GD_GzipSync(struct _gd_raw_file* file);
int _GD_GzipClose(struct _gd_raw_file* file);
off64_t _GD_GzipSize(int, struct _gd_raw_file* file, gd_type_t data_type,
@@ -1101,8 +1105,8 @@
int _GD_LzmaOpen(int, struct _gd_raw_file* file, int swap, unsigned int);
off64_t _GD_LzmaSeek(struct _gd_raw_file* file, off64_t count,
gd_type_t data_type, unsigned int);
-ssize_t _GD_LzmaRead(struct _gd_raw_file* file, void *ptr, gd_type_t data_type,
- size_t nmemb);
+ssize_t _GD_LzmaRead(struct _gd_raw_file *restrict, void *restrict, gd_type_t,
+ size_t);
int _GD_LzmaClose(struct _gd_raw_file* file);
off64_t _GD_LzmaSize(int, struct _gd_raw_file* file, gd_type_t data_type,
int swap);
@@ -1111,8 +1115,8 @@
int _GD_SlimOpen(int, struct _gd_raw_file* file, int, unsigned int);
off64_t _GD_SlimSeek(struct _gd_raw_file* file, off64_t count,
gd_type_t data_type, unsigned int);
-ssize_t _GD_SlimRead(struct _gd_raw_file* file, void *ptr, gd_type_t data_type,
- size_t nmemb);
+ssize_t _GD_SlimRead(struct _gd_raw_file *restrict, void *restrict, gd_type_t,
+ size_t);
int _GD_SlimClose(struct _gd_raw_file* file);
off64_t _GD_SlimSize(int, struct _gd_raw_file* file, gd_type_t data_type,
int swap);
@@ -1122,23 +1126,23 @@
unsigned int);
off64_t _GD_SampIndSeek(struct _gd_raw_file* file, off64_t count,
gd_type_t data_type, unsigned int);
-ssize_t _GD_SampIndRead(struct _gd_raw_file* file, void *ptr,
- gd_type_t data_type, size_t nmemb);
-ssize_t _GD_SampIndWrite(struct _gd_raw_file* file, const void *ptr,
- gd_type_t data_type, size_t nmemb);
+ssize_t _GD_SampIndRead(struct _gd_raw_file *restrict, void *restrict,
+ gd_type_t, size_t);
+ssize_t _GD_SampIndWrite(struct _gd_raw_file *restrict, const void *restrict,
+ gd_type_t, size_t);
int _GD_SampIndSync(struct _gd_raw_file* file);
int _GD_SampIndClose(struct _gd_raw_file* file);
off64_t _GD_SampIndSize(int, struct _gd_raw_file* file, gd_type_t data_type,
int swap);
/* zzip I/O methods */
-int _GD_ZzipName(DIRFILE*, const char*, struct _gd_raw_file*, const char*, int,
- int);
+int _GD_ZzipName(DIRFILE *restrict, const char *restrict,
+ struct _gd_raw_file *restrict, const char *restrict, int, int);
int _GD_ZzipOpen(int, struct _gd_raw_file* file, int swap, unsigned int);
off64_t _GD_ZzipSeek(struct _gd_raw_file* file, off64_t count,
gd_type_t data_type, unsigned int);
-ssize_t _GD_ZzipRead(struct _gd_raw_file* file, void *ptr, gd_type_t data_type,
- size_t nmemb);
+ssize_t _GD_ZzipRead(struct _gd_raw_file *restrict, void *restrict, gd_type_t,
+ size_t);
int _GD_ZzipClose(struct _gd_raw_file* file);
off64_t _GD_ZzipSize(int, struct _gd_raw_file* file, gd_type_t data_type,
int swap);
Modified: trunk/getdata/src/native.c
===================================================================
--- trunk/getdata/src/native.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/native.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -20,7 +20,7 @@
*/
#include "internal.h"
-gd_type_t _GD_NativeType(DIRFILE* D, gd_entry_t* E, int repr)
+gd_type_t _GD_NativeType(DIRFILE *restrict D, gd_entry_t *restrict E, int repr)
{
gd_type_t type = GD_UNKNOWN;
int i;
Modified: trunk/getdata/src/open.c
===================================================================
--- trunk/getdata/src/open.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/open.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -22,8 +22,8 @@
#include "internal.h"
/* attempt to open or create a new dirfile - set error appropriately */
-static FILE* _GD_CreateDirfile(DIRFILE* D, int dirfd, int dir_error,
- char* dirfile)
+static FILE *_GD_CreateDirfile(DIRFILE *restrict D, int dirfd, int dir_error,
+ char *restrict dirfile)
{
struct stat statbuf;
DIR* dir;
Modified: trunk/getdata/src/parse.c
===================================================================
--- trunk/getdata/src/parse.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/parse.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -112,9 +112,9 @@
/* Returns a newly malloc'd string containing the scalar field name, or NULL on
* numeric literal or error */
-static char* _GD_SetScalar(DIRFILE* D, const char* token, void* data, int type,
- const char* format_file, int line, int *index, int *comp_scal,
- int standards, int pedantic)
+static char *_GD_SetScalar(DIRFILE *restrict D, const char *restrict token,
+ void *restrict data, int type, const char *restrict format_file, int line,
+ int *restrict index, int *restrict comp_scal, int standards, int pedantic)
{
char *ptr = NULL;
char *lt;
@@ -250,9 +250,10 @@
/* _GD_ParseRaw: parse a RAW entry in the format file
*/
-static gd_entry_t* _GD_ParseRaw(DIRFILE* D, char* in_cols[MAX_IN_COLS],
- int n_cols, const gd_entry_t* parent, const char* format_file, int line,
- int me, int standards, int pedantic, int *is_dot)
+static gd_entry_t *_GD_ParseRaw(DIRFILE *restrict D,
+ char *restrict in_cols[MAX_IN_COLS], int n_cols,
+ const gd_entry_t *restrict parent, const char *restrict format_file,
+ int line, int me, int standards, int pedantic, int *restrict is_dot)
{
gd_entry_t *E;
int offset;
@@ -333,9 +334,10 @@
/* _GD_ParseLincom: parse a LINCOM entry in the format file.
*/
-static gd_entry_t* _GD_ParseLincom(DIRFILE* D, char* in_cols[MAX_IN_COLS],
- int n_cols, const gd_entry_t* parent, const char* format_file, int line,
- int me, int standards, int pedantic, int* is_dot)
+static gd_entry_t *_GD_ParseLincom(DIRFILE *restrict D,
+ char *restrict in_cols[MAX_IN_COLS], int n_cols,
+ const gd_entry_t *restrict parent, const char *restrict format_file,
+ int line, int me, int standards, int pedantic, int *restrict is_dot)
{
int i, offset;
char* ptr = NULL;
@@ -431,9 +433,10 @@
/* _GD_ParseLinterp: parse a LINTERP entry in the format file.
*/
-static gd_entry_t* _GD_ParseLinterp(DIRFILE* D, char* in_cols[MAX_IN_COLS],
- int n_cols, const gd_entry_t* parent, const char* format_file, int line,
- int me, int standards, int pedantic, int* is_dot)
+static gd_entry_t *_GD_ParseLinterp(DIRFILE *restrict D,
+ char *restrict in_cols[MAX_IN_COLS], int n_cols,
+ const gd_entry_t *restrict parent, const char *restrict format_file,
+ int line, int me, int standards, int pedantic, int *restrict is_dot)
{
gd_entry_t *E;
int offset;
@@ -496,9 +499,10 @@
/* _GD_ParseMultiply: parse MULTIPLY entry in format file.
*/
-static gd_entry_t* _GD_ParseMultiply(DIRFILE* D, char* in_cols[MAX_IN_COLS],
- int n_cols, const gd_entry_t* parent, const char* format_file, int line,
- int me, int standards, int pedantic, int* is_dot)
+static gd_entry_t *_GD_ParseMultiply(DIRFILE *restrict D,
+ char *restrict in_cols[MAX_IN_COLS], int n_cols,
+ const gd_entry_t *restrict parent, const char *restrict format_file,
+ int line, int me, int standards, int pedantic, int *restrict is_dot)
{
gd_entry_t *E;
int offset;
@@ -558,9 +562,10 @@
/* _GD_ParseRecip: parse RECIP entry in format file.
*/
-static gd_entry_t* _GD_ParseRecip(DIRFILE* D, char* in_cols[MAX_IN_COLS],
- int n_cols, const gd_entry_t* parent, const char* format_file, int line,
- int me, int standards, int pedantic, int* is_dot)
+static gd_entry_t *_GD_ParseRecip(DIRFILE *restrict D,
+ char *restrict in_cols[MAX_IN_COLS], int n_cols,
+ const gd_entry_t *restrict parent, const char *restrict format_file,
+ int line, int me, int standards, int pedantic, int *restrict is_dot)
{
gd_entry_t *E;
int offset;
@@ -625,9 +630,10 @@
/* _GD_ParseWindow: parse WINDOW entry in format file.
*/
-static gd_entry_t* _GD_ParseWindow(DIRFILE* D, char* in_cols[MAX_IN_COLS],
- int n_cols, const gd_entry_t* parent, const char* format_file, int line,
- int me, int standards, int pedantic, int* is_dot)
+static gd_entry_t *_GD_ParseWindow(DIRFILE *restrict D,
+ char *restrict in_cols[MAX_IN_COLS], int n_cols,
+ const gd_entry_t *restrict parent, const char *restrict format_file,
+ int line, int me, int standards, int pedantic, int *restrict is_dot)
{
gd_entry_t *E;
int offset;
@@ -711,11 +717,12 @@
return E;
}
-/* _GD_ParseMplex: parse WINDOW entry in format file.
+/* _GD_ParseMplex: parse MPLEX entry in format file.
*/
-static gd_entry_t* _GD_ParseMplex(DIRFILE* D, char* in_cols[MAX_IN_COLS],
- int n_cols, const gd_entry_t* parent, const char* format_file, int line,
- int me, int standards, int pedantic, int* is_dot)
+static gd_entry_t *_GD_ParseMplex(DIRFILE *restrict D,
+ char *restrict in_cols[MAX_IN_COLS], int n_cols,
+ const gd_entry_t *restrict parent, const char *restrict format_file,
+ int line, int me, int standards, int pedantic, int *restrict is_dot)
{
gd_entry_t *E;
int offset;
@@ -787,9 +794,10 @@
/* _GD_ParseDivide: parse DIVIDE entry in format file.
*/
-static gd_entry_t* _GD_ParseDivide(DIRFILE* D, char* in_cols[MAX_IN_COLS],
- int n_cols, const gd_entry_t* parent, const char* format_file, int line,
- int me, int standards, int pedantic, int* is_dot)
+static gd_entry_t *_GD_ParseDivide(DIRFILE *restrict D,
+ char *restrict in_cols[MAX_IN_COLS], int n_cols,
+ const gd_entry_t *restrict parent, const char *restrict format_file,
+ int line, int me, int standards, int pedantic, int *restrict is_dot)
{
gd_entry_t *E;
int offset;
@@ -850,10 +858,10 @@
/* _GD_ParseBit: parse BIT entry in format file.
*/
-static gd_entry_t* _GD_ParseBit(DIRFILE* D, int is_signed,
- char* in_cols[MAX_IN_COLS], int n_cols, const gd_entry_t* parent,
- const char* format_file, int line, int me, int standards, int pedantic,
- int* is_dot)
+static gd_entry_t *_GD_ParseBit(DIRFILE *restrict D, int is_signed,
+ char *restrict in_cols[MAX_IN_COLS], int n_cols,
+ const gd_entry_t *restrict parent, const char *restrict format_file,
+ int line, int me, int standards, int pedantic, int *restrict is_dot)
{
gd_entry_t *E;
int offset;
@@ -931,9 +939,10 @@
/* _GD_ParsePhase: parse PHASE entry in formats file.
*/
-static gd_entry_t* _GD_ParsePhase(DIRFILE* D, char* in_cols[MAX_IN_COLS],
- int n_cols, const gd_entry_t* parent, const char* format_file, int line,
- int me, int standards, int pedantic, int* is_dot)
+static gd_entry_t *_GD_ParsePhase(DIRFILE *restrict D,
+ char *restrict in_cols[MAX_IN_COLS], int n_cols,
+ const gd_entry_t *restrict parent, const char *restrict format_file,
+ int line, int me, int standards, int pedantic, int *restrict is_dot)
{
gd_entry_t *E;
int offset;
@@ -998,9 +1007,10 @@
/* _GD_ParsePolynom: parse a POLYNOM in the format file.
*/
-static gd_entry_t* _GD_ParsePolynom(DIRFILE* D, char* in_cols[MAX_IN_COLS],
- int n_cols, const gd_entry_t* parent, const char* format_file, int line,
- int me, int standards, int pedantic, int* is_dot)
+static gd_entry_t *_GD_ParsePolynom(DIRFILE *restrict D,
+ char *restrict in_cols[MAX_IN_COLS], int n_cols,
+ const gd_entry_t *restrict parent, const char *restrict format_file,
+ int line, int me, int standards, int pedantic, int *restrict is_dot)
{
int i, offset;
gd_entry_t *E;
@@ -1107,9 +1117,10 @@
/* _GD_ParseConst: parse CONST entry in formats file.
*/
-static gd_entry_t* _GD_ParseConst(DIRFILE* D, char* in_cols[MAX_IN_COLS],
- int n_cols, const gd_entry_t* parent, const char* format_file, int line,
- int me, int standards, int pedantic, int* is_dot)
+static gd_entry_t *_GD_ParseConst(DIRFILE *restrict D,
+ char *restrict in_cols[MAX_IN_COLS], int n_cols,
+ const gd_entry_t *restrict parent, const char *restrict format_file,
+ int line, int me, int standards, int pedantic, int *restrict is_dot)
{
int offset;
char* ptr;
@@ -1195,10 +1206,10 @@
/* _GD_ParseCarray: parse CARRAY entry in formats file.
*/
-static gd_entry_t* _GD_ParseCarray(DIRFILE* D, char* in_cols[MAX_IN_COLS],
- int n_cols, const gd_entry_t* parent, const char* format_file, int line,
- int me, int standards, int pedantic, int* is_dot, char **outstring,
- const char *tok_pos)
+static gd_entry_t *_GD_ParseCarray(DIRFILE *restrict D,
+ char *in_cols[MAX_IN_COLS], int n_cols, const gd_entry_t *restrict parent,
+ const char *restrict format_file, int line, int me, int standards,
+ int pedantic, int *restrict is_dot, char **outstring, const char *tok_pos)
{
int offset;
int c, first, n, new_z, s, z;
@@ -1324,9 +1335,10 @@
/* _GD_ParseString: parse STRING entry in formats file.
*/
-static gd_entry_t* _GD_ParseString(DIRFILE* D, char *in_cols[MAX_IN_COLS],
- int n_cols, const gd_entry_t* parent, const char* format_file, int line,
- int me, int standards, int pedantic, int* is_dot)
+static gd_entry_t *_GD_ParseString(DIRFILE *restrict D,
+ char *restrict in_cols[MAX_IN_COLS], int n_cols,
+ const gd_entry_t *restrict parent, const char *restrict format_file,
+ int line, int me, int standards, int pedantic, int *restrict is_dot)
{
gd_entry_t *E;
int offset;
@@ -1377,8 +1389,8 @@
return E;
}
-static int _GD_UTF8Encode(DIRFILE* D, const char* format_file, int linenum,
- char** op, uint32_t value)
+static int _GD_UTF8Encode(DIRFILE *restrict D, const char *restrict format_file,
+ int linenum, char **restrict op, uint32_t value)
{
dtrace("%p, %p, %llx", D, op, (long long)value);
@@ -1412,7 +1424,8 @@
/* _GD_CheckParent: look for a slashed field name and, if found, see if the
* parent exists in the current fragment. Returns parent entry on success.
*/
-static gd_entry_t *_GD_CheckParent(DIRFILE *D, char **name, int me, int linenum)
+static gd_entry_t *_GD_CheckParent(DIRFILE *restrict D, char **restrict name,
+ int me, int linenum)
{
int dummy;
char *cptr, *munged_code;
@@ -1450,10 +1463,10 @@
/* _GD_ParseFieldSpec: Parse a format file line fragment containing a field
* specification */
-gd_entry_t* _GD_ParseFieldSpec(DIRFILE* D, int n_cols, char** in_cols,
- const gd_entry_t* P, const char* format_file, int linenum, int me,
- int standards, int creat, unsigned long flags, int insert, char **outstring,
- const char *tok_pos)
+gd_entry_t *_GD_ParseFieldSpec(DIRFILE *restrict D, int n_cols, char **in_cols,
+ const gd_entry_t *restrict P, const char *restrict format_file, int linenum,
+ int me, int standards, int creat, unsigned long flags, int insert,
+ char **outstring, const char *tok_pos)
{
gd_entry_t* E = NULL;
void *ptr;
@@ -1635,9 +1648,9 @@
#define ACC_MODE_OCTAL 1
#define ACC_MODE_HEX 2
#define ACC_MODE_UTF8 3
-int _GD_Tokenise(DIRFILE *D, const char* instring, char **outstring,
- const char **pos, char** in_cols, const char* format_file, int linenum,
- int standards, int pedantic)
+int _GD_Tokenise(DIRFILE *restrict D, const char *restrict instring,
+ char **outstring, const char **pos, char **in_cols,
+ const char *restrict format_file, int linenum, int standards, int pedantic)
{
const char* ip;
char* op;
@@ -1836,8 +1849,9 @@
/* _GD_ParseAlias: set up an alias
*/
-static void _GD_ParseAlias(DIRFILE *D, char **name, const char *target, int me,
- int line, int standards, int pedantic, int ignore_dups)
+static void _GD_ParseAlias(DIRFILE *restrict D, char **restrict name,
+ const char *restrict target, int me, int line, int standards, int pedantic,
+ int ignore_dups)
{
gd_entry_t **new_meta_list = NULL;
gd_entry_t *E, *P = NULL;
@@ -1939,9 +1953,9 @@
/* _GD_ParseDirective: Actually parse a single format file line.
* Returns 1 if a match was made.
*/
-static int _GD_ParseDirective(DIRFILE *D, char** in_cols, int n_cols,
- int me, int* standards, int linenum, char** ref_name, unsigned long *flags,
- char **outstring, const char *tok_pos)
+static int _GD_ParseDirective(DIRFILE *restrict D, char **in_cols, int n_cols,
+ int me, int *restrict standards, int linenum, char **restrict ref_name,
+ unsigned long *restrict flags, char **outstring, const char *tok_pos)
{
const char* ptr;
char *munged_code;
@@ -2161,7 +2175,7 @@
}
/* Resolve and record an alias, taking care of loops */
-static gd_entry_t *_GD_ResolveAlias(DIRFILE *D, gd_entry_t *E)
+static gd_entry_t *_GD_ResolveAlias(DIRFILE *restrict D, gd_entry_t *restrict E)
{
gd_entry_t *T = NULL;
char *munged_code;
@@ -2189,7 +2203,6 @@
*/
E->e->entry[0] = E->e->entry[1] = T;
if (T) {
-
if (T->field_type == GD_ALIAS_ENTRY) {
if (T->e->entry[0])
T = T->e->entry[0];
@@ -2225,8 +2238,8 @@
*
* Returns NULL unless this fragment contains a REFERENCE directive.
*/
-char *_GD_ParseFragment(FILE *fp, DIRFILE *D, int me, int *standards,
- unsigned long *flags, int resolve)
+char *_GD_ParseFragment(FILE *restrict fp, DIRFILE *restrict D, int me,
+ int *restrict standards, unsigned long *restrict flags, int resolve)
{
char *instring = NULL;
char *outstring = NULL;
Modified: trunk/getdata/src/putdata.c
===================================================================
--- trunk/getdata/src/putdata.c 2012-01-11 08:05:50 UTC (rev 645)
+++ trunk/getdata/src/putdata.c 2012-01-13 02:18:50 UTC (rev 646)
@@ -22,8 +22,8 @@
*/
#include "internal.h"
-static size_t _GD_DoRawOut(DIRFILE *D, gd_entry_t *E, off64_t s0,
- size_t ns, gd_type_t data_type, const void *data_in)
+static size_t _GD_DoRawOut(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t s0, size_t ns, gd_type_t data_type, const void *restrict data_in)
{
ssize_t n_wrote;
void *databuffer;
@@ -121,8 +121,9 @@
return (size_t)n_wrote;
}
-static size_t _GD_DoLinterpOut(DIRFILE* D, gd_entry_t *E, off64_t first_samp,
- size_t num_samp, gd_type_t data_type, const void *data_in)
+static size_t _GD_DoLinterpOut(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t data_type,
+ const void *restrict data_in)
{
size_t n_wrote;
int dir = -1, i;
@@ -223,8 +224,9 @@
return n_wrote;
}
-static size_t _GD_DoLincomOut(DIRFILE* D, gd_entry_t *E, off64_t first_samp,
- size_t num_samp, gd_type_t data_type, const void *data_in)
+static size_t _GD_DoLincomOut(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t data_type,
+ const void *restrict data_in)
{
size_t n_wrote;
void* tmpbuf;
@@ -298,8 +300,9 @@
return n_wrote;
}
-static size_t _GD_DoBitOut(DIRFILE* D, gd_entry_t *E, off64_t first_samp,
- size_t num_samp, gd_type_t data_type, const void *data_in)
+static size_t _GD_DoBitOut(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t data_type,
+ const void *restrict data_in)
{
uint64_t *tmpbuf;
uint64_t *readbuf;
@@ -356,8 +359,9 @@
return n_wrote;
}
-static size_t _GD_DoPhaseOut(DIRFILE* D, gd_entry_t *E, off64_t first_samp,
- size_t num_samp, gd_type_t data_type, const void *data_in)
+static size_t _GD_DoPhaseOut(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t data_type,
+ const void *restrict data_in)
{
size_t n_wrote;
@@ -377,8 +381,9 @@
return n_wrote;
}
-static size_t _GD_DoRecipOut(DIRFILE* D, gd_entry_t *E, off64_t first_samp,
- size_t num_samp, gd_type_t data_type, const void *data_in)
+static size_t _GD_DoRecipOut(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t data_type,
+ const void *restrict data_in)
{
size_t n_wrote;
void* tmpbuf;
@@ -422,8 +427,9 @@
return n_wrote;
}
-static size_t _GD_DoPolynomOut(DIRFILE* D, gd_entry_t *E, off64_t first_samp,
- size_t num_samp, gd_type_t data_type, const void *data_in)
+static size_t _GD_DoPolynomOut(DIRFILE *restrict D, gd_entry_t *restrict E,
+ off64_t first_samp, size_t num_samp, gd_type_t data_type,
+ const void *restrict data_in)
{
size_t n_wrote;
void* tmpbuf;
@@ -51...
[truncated message content] |
|
From: <ket...@us...> - 2012-01-11 08:06:05
|
Revision: 645
http://getdata.svn.sourceforge.net/getdata/?rev=645&view=rev
Author: ketiltrout
Date: 2012-01-11 08:05:50 +0000 (Wed, 11 Jan 2012)
Log Message:
-----------
MPLEX.
Modified Paths:
--------------
trunk/getdata/ChangeLog
trunk/getdata/bindings/cxx/Makefile.am
trunk/getdata/bindings/cxx/dirfile.cpp
trunk/getdata/bindings/cxx/entry.cpp
trunk/getdata/bindings/cxx/getdata/dirfile.h
trunk/getdata/bindings/cxx/getdata/entry.h
trunk/getdata/bindings/cxx/getdata/windowentry.h
trunk/getdata/bindings/cxx/test/big_test.cpp
trunk/getdata/bindings/cxx/windowentry.cpp
trunk/getdata/bindings/f77/fgetdata.c
trunk/getdata/bindings/f77/fgetdata.h
trunk/getdata/bindings/f77/getdata.f.in
trunk/getdata/bindings/f77/getdata.f90.in
trunk/getdata/bindings/f77/test/big_test.f
trunk/getdata/bindings/f77/test/big_test95.f90
trunk/getdata/bindings/idl/getdata.c
trunk/getdata/bindings/idl/test/big_test.pro
trunk/getdata/bindings/make_parameters.c
trunk/getdata/bindings/perl/GetData.xs
trunk/getdata/bindings/perl/simple_funcs.pl
trunk/getdata/bindings/perl/simple_funcs.xsin
trunk/getdata/bindings/perl/t/big_test.t
trunk/getdata/bindings/perl/typemap
trunk/getdata/bindings/python/pydirfile.c
trunk/getdata/bindings/python/pyentry.c
trunk/getdata/bindings/python/test/Makefile.am
trunk/getdata/bindings/python/test/big_test.py
trunk/getdata/doc/list.tests
trunk/getdata/src/add.c
trunk/getdata/src/common.c
trunk/getdata/src/del.c
trunk/getdata/src/entry.c
trunk/getdata/src/errors.c
trunk/getdata/src/field_list.c
trunk/getdata/src/flimits.c
trunk/getdata/src/flush.c
trunk/getdata/src/fpos.c
trunk/getdata/src/getdata.c
trunk/getdata/src/getdata.h.in
trunk/getdata/src/getdata_legacy.h
trunk/getdata/src/internal.h
trunk/getdata/src/legacy.c
trunk/getdata/src/mod.c
trunk/getdata/src/name.c
trunk/getdata/src/native.c
trunk/getdata/src/nfields.c
trunk/getdata/src/nmeta.c
trunk/getdata/src/parse.c
trunk/getdata/src/putdata.c
trunk/getdata/src/spf.c
trunk/getdata/test/Makefile.am
trunk/getdata/test/add_window.c
Added Paths:
-----------
trunk/getdata/bindings/cxx/getdata/mplexentry.h
trunk/getdata/bindings/cxx/mplexentry.cpp
trunk/getdata/test/add_mplex.c
trunk/getdata/test/add_mplex_val.c
trunk/getdata/test/alter_mplex.c
trunk/getdata/test/entry_mplex.c
trunk/getdata/test/entry_mplex_scalar.c
trunk/getdata/test/get_mplex.c
trunk/getdata/test/get_mplex_lb.c
trunk/getdata/test/madd_mplex.c
trunk/getdata/test/parse_mplex.c
trunk/getdata/test/parse_mplex_ncols.c
trunk/getdata/test/parse_mplex_scalar.c
trunk/getdata/test/put_mplex.c
Property Changed:
----------------
trunk/getdata/test/
Modified: trunk/getdata/ChangeLog
===================================================================
--- trunk/getdata/ChangeLog 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/ChangeLog 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,3 +1,70 @@
+2012-01-11 D. V. Wiebe <ge...@ke...> svn:644
+ * src/getdata.h.in: Added GD_MPLEX_ENTRY. Updated gd_entry_t. Defined
+ GD_COUNT_MAX.
+
+ * src/legacy.c (CopyMplexEntry) src/getdata.c (_GD_MplexData _GD_DoMplex)
+ src/putdata.c (_GD_MplexOutData _GD_DoMplexOut) src/parse.c (_GD_ParseMplex)
+ src/add.c (gd_add_mplex gd_madd_mplex) src/mod.c (gd_alter_mplex): Added.
+ * src/internal.h: Define GD_MPLEX_LOOKBACK
+
+ * src/entry.c (_GD_FreeE _GD_CalculateEntry gd_entry gd_validate)
+ src/flush.c (_GD_Flush _GD_FieldSpec _GD_FindVersion) src/fpos.c
+ (_GD_GetFilePos _GD_WriteSeek) src/legacy.c (GetFormat) src/getdata.c
+ (_GD_DoField) src/name.c (_GD_InvalidateConst _GD_InvalidateVect)
+ src/native.c (_GD_NativeType) src/putdata.c (_GD_DoFieldOut) src/del.c
+ (_GD_ClearDerived _GD_DeReference) src/flimits.c (_GD_GetEOF _GD_GetBOF)
+ src/parse.c (_GD_ParseFieldSpec) src/add.c (_GD_Add) src/spf.c (_GD_GetSPF)
+ src/mod.c (_GD_Change): Handle MPLEX.
+
+ * src/fpos.c (_GD_Seek): De-statickify.
+ * src/legacy.c (CopyWindowEntry): Report as MPLEX.
+ * src/getdata_legacy.h: Fix mplex list in FormatType.
+
+ * src/errors.c: Rename GD_E_BAD_ENTRY_* suberrors to GD_E_ENTRY_* for
+ brevity. Added GD_E_FORMAT_MPLEXVAL, GD_E_ENTRY_CNTVAL, GD_E_ENTRY_CNTMAX.
+
+ * src/field_list.c (_GD_ListEntry): Move the alias check down so that hidden
+ and meta alias are handled properly.
+
+ * internal.h src/common.c (_GD_Malloc _GD_Realloc _GD_Strdup): Moved from
+ internal.h.
+
+ * bindings/make_parameters.c: Define MPLEX_ENTRY, E_FORMAT_MPLEXVAL,
+ COUNT_MAX.
+ * bindings/cxx/mplexentry.cpp bindings/cxx/getdata/mplexentry.h: Added.
+ * bindings/python/pyentry.c (gdpy_entry_getcountval gdpy_entry_setcountval
+ gdpy_entry_getcountmax gdpy_entry_setcountmax) bindings/cxx/getdata/entry.h
+ (Entry::CountVal Entry::CountMax) bindings/f77/getdata.f90.in (fgd_add_mplex
+ fgd_madd_mplex fgd_alter_mplex) bindings/f77/fgetdata.c (GDGEMX GDADMX
+ GDMDMX GDALMX) bindings/idl/getdata.c (gdidl_add_mplex gdidl_alter_mplex):
+ Added.
+
+ * bindings/python/pyentry.c (gdpy_set_entry_from_tuple
+ gdpy_set_entry_from_dict gdpy_entry_getinfields gdpy_entry_setinfields
+ gdpy_entry_getparms) bindings/cxx/entry.cpp (CheckIndex scalar_ok)
+ bindings/cxx/dirfile.cpp (Dirfile::Entry) bindings/cxx/getdata/dirfile.h
+ bindings/perl/GetData.xs (gdp_to_entry entry) bindings/f77/getdata.f90.in
+ (fgd_entry fgd_add fgd_madd) bindings/f77/fgetdata.c (GDASCA GDMDWD)
+ bindings/idl/getdata.c (gdidl_make_idl_entry gdidl_read_idl_entry): MPLEX
+ bindings.
+
+ * bindings/perl/simple_funcs.xsin: Add add_mplex, alter_mplex, madd_mplex.
+ * bindings/perl/simple_funcs.pl: Handle gd_count_t.
+
+ * bindings/python/test/big_test.py bindings/cxx/test/big_test.cpp
+ bindings/perl/t/big_test.t bindings/f77/test/big_test.f
+ bindings/f77/test/big_test95.f90 bindings/idl/test/big_test.pro: Add tests
+ 228-231.
+
+ * bindings/cxx/windowentry.cpp bindings/cxx/getdata/windowentry.h
+ bindings/idl/getdata.c (gdidl_alter_window): Get rid of
+ Check stuff: just use Input, for consistency.
+
+ * test/add_mplex.c test/add_mplex_val.c test/alter_mplex.c
+ test/entry_mplex.c test/entry_mplex_scalar.c test/get_mplex.c
+ test/get_mplex_lb.c test/madd_mplex.c test/parse_mplex.c
+ test/parse_mplex_ncols.c test/parse_mplex_scalar.c test/put_mplex.c: Added.
+
2011-12-31 D. V. Wiebe <ge...@ke...> svn:643
* bindings/python/pyentry.c (gdpy_set_entry_from_dict): Add missing INCREF.
Modified: trunk/getdata/bindings/cxx/Makefile.am
===================================================================
--- trunk/getdata/bindings/cxx/Makefile.am 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/cxx/Makefile.am 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2010 D. V. Wiebe
+# Copyright (C) 2008-2012 D. V. Wiebe
#
##########################################################################
#
@@ -42,16 +42,16 @@
getdata/sbitentry.h getdata/polynomentry.h \
getdata/fragment.h getdata/divideentry.h \
getdata/recipentry.h getdata/carrayentry.h \
- getdata/windowentry.h
+ getdata/windowentry.h getdata/mplexentry.h
lib_LTLIBRARIES=libgetdata++.la
libgetdata___la_SOURCES = dirfile.cpp bitentry.cpp carrayentry.cpp \
constentry.cpp divideentry.cpp entry.cpp \
fragment.cpp indexentry.cpp lincomentry.cpp \
- linterpentry.cpp multiplyentry.cpp phaseentry.cpp \
- polynomentry.cpp rawentry.cpp recipentry.cpp \
- sbitentry.cpp stringentry.cpp windowentry.cpp \
- ${getdata_include_HEADERS} internal.h
+ linterpentry.cpp mplexentry.cpp multiplyentry.cpp \
+ phaseentry.cpp polynomentry.cpp rawentry.cpp \
+ recipentry.cpp sbitentry.cpp stringentry.cpp \
+ windowentry.cpp ${getdata_include_HEADERS} internal.h
libgetdata___la_LIBADD=../../src/libgetdata.la
libgetdata___la_LDFLAGS = -version-info @GETDATAXX_VERSION@
Modified: trunk/getdata/bindings/cxx/dirfile.cpp
===================================================================
--- trunk/getdata/bindings/cxx/dirfile.cpp 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/cxx/dirfile.cpp 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008-2011 D. V. Wiebe
+// Copyright (C) 2008-2012 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -109,6 +109,8 @@
return new GetData::IndexEntry(this, field_code);
case WindowEntryType:
return new GetData::WindowEntry(this, field_code);
+ case MplexEntryType:
+ return new GetData::MplexEntry(this, field_code);
case NoEntryType:
break;
}
Modified: trunk/getdata/bindings/cxx/entry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/entry.cpp 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/cxx/entry.cpp 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008-2011 D. V. Wiebe
+// Copyright (C) 2008-2012 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -46,6 +46,11 @@
switch (field_type) {
case GD_RAW_ENTRY:
+ case GD_INDEX_ENTRY:
+ case GD_CONST_ENTRY:
+ case GD_CARRAY_ENTRY:
+ case GD_STRING_ENTRY:
+ case GD_NO_ENTRY:
return 0;
case GD_LINCOM_ENTRY:
if (index > n_fields)
@@ -53,9 +58,16 @@
break;
case GD_MULTIPLY_ENTRY:
case GD_DIVIDE_ENTRY:
+ case GD_WINDOW_ENTRY:
+ case GD_MPLEX_ENTRY:
if (index > 2)
return 0;
- default:
+ case GD_LINTERP_ENTRY:
+ case GD_BIT_ENTRY:
+ case GD_PHASE_ENTRY:
+ case GD_POLYNOM_ENTRY:
+ case GD_SBIT_ENTRY:
+ case GD_RECIP_ENTRY:
if (index > 1)
return 0;
}
@@ -141,6 +153,7 @@
break;
case GD_BIT_ENTRY:
case GD_SBIT_ENTRY:
+ case GD_MPLEX_ENTRY:
if (index >= 2)
return 0;
break;
Modified: trunk/getdata/bindings/cxx/getdata/dirfile.h
===================================================================
--- trunk/getdata/bindings/cxx/getdata/dirfile.h 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/cxx/getdata/dirfile.h 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008-2010 D. V. Wiebe
+// Copyright (C) 2008-2012 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -48,6 +48,7 @@
#include <getdata/constentry.h>
#include <getdata/carrayentry.h>
#include <getdata/stringentry.h>
+#include <getdata/mplexentry.h>
#include <getdata/multiplyentry.h>
#include <getdata/divideentry.h>
#include <getdata/recipentry.h>
@@ -71,6 +72,7 @@
friend class PhaseEntry;
friend class PolynomEntry;
friend class WindowEntry;
+ friend class MplexEntry;
friend class ConstEntry;
friend class CarrayEntry;
friend class StringEntry;
Modified: trunk/getdata/bindings/cxx/getdata/entry.h
===================================================================
--- trunk/getdata/bindings/cxx/getdata/entry.h 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/cxx/getdata/entry.h 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008-2010 D. V. Wiebe
+// Copyright (C) 2008-2012 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -69,7 +69,8 @@
IndexEntryType = GD_INDEX_ENTRY,
DivideEntryType = GD_DIVIDE_ENTRY,
RecipEntryType = GD_RECIP_ENTRY,
- WindowEntryType = GD_WINDOW_ENTRY
+ WindowEntryType = GD_WINDOW_ENTRY,
+ MplexEntryType = GD_MPLEX_ENTRY
};
enum WindOpType {
@@ -221,10 +222,6 @@
};
/* WINDOW methods */
- virtual const char *Check() const {
- return (E.field_type == GD_WINDOW_ENTRY) ? E.in_fields[1] : 0;
- };
-
virtual WindOpType WindOp() const {
return (E.field_type == GD_WINDOW_ENTRY) ? (WindOpType)E.u.window.windop
: (WindOpType)0;
@@ -236,6 +233,16 @@
return (E.field_type == GD_WINDOW_ENTRY) ? E.u.window.threshold : zero;
}
+ /* MPLEX methods */
+ virtual gd_count_t CountVal() const {
+ return (E.field_type == GD_MPLEX_ENTRY) ? E.u.mplex.count_val : 0;
+ }
+
+ virtual gd_count_t CountMax() const {
+ return (E.field_type == GD_MPLEX_ENTRY) ? E.u.mplex.count_max : 0;
+ }
+
+ /* Set methods */
void SetName(const char* name);
void SetFragmentIndex(int fragment_index);
Added: trunk/getdata/bindings/cxx/getdata/mplexentry.h
===================================================================
--- trunk/getdata/bindings/cxx/getdata/mplexentry.h (rev 0)
+++ trunk/getdata/bindings/cxx/getdata/mplexentry.h 2012-01-11 08:05:50 UTC (rev 645)
@@ -0,0 +1,65 @@
+// Copyright (C) 2012 D. V. Wiebe
+//
+///////////////////////////////////////////////////////////////////////////
+//
+// This file is part of the GetData project.
+//
+// GetData is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2.1 of the License, or (at your
+// option) any later version.
+//
+// GetData is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+// License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with GetData; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+
+#ifndef GETDATA_MPLEXENTRY_H
+#define GETDATA_MPLEXENTRY_H
+
+#include <getdata/entry.h>
+
+namespace GetData {
+
+ class Dirfile;
+
+ class MplexEntry : public Entry {
+ friend class Dirfile;
+
+ public:
+ MplexEntry() : Entry() { E.field_type = GD_MPLEX_ENTRY; };
+
+ MplexEntry(const char* field_code, const char* in_field,
+ const char *check_Field, gd_count_t count_val, gd_count_t count_max,
+ int fragment_index = 0);
+
+ virtual const char *Input(int index = 0) const {
+ return E.in_fields[(index == 0) ? 0 : 1];
+ };
+
+ virtual const char *Scalar() const { return E.scalar[0]; }
+
+ virtual int ScalarIndex() const { return E.scalar_ind[0]; };
+
+ virtual gd_count_t CountVal() const { return E.u.mplex.count_val; };
+
+ virtual gd_count_t CountMax() const { return E.u.mplex.count_max; };
+
+ int SetInput(const char* field, int index);
+ virtual int SetCountVal(gd_count_t count_val);
+ virtual int SetCountVal(const char* threshold);
+ virtual int SetCountMax(gd_count_t count_max);
+ virtual int SetCountMax(const char* threshold);
+
+ private:
+ MplexEntry(const GetData::Dirfile *dirfile, const char* field_code) :
+ Entry(dirfile, field_code) { };
+ };
+}
+
+#endif
Modified: trunk/getdata/bindings/cxx/getdata/windowentry.h
===================================================================
--- trunk/getdata/bindings/cxx/getdata/windowentry.h 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/cxx/getdata/windowentry.h 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-// Copyright (C) 2011 D. V. Wiebe
+// Copyright (C) 2011-2012 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -38,10 +38,10 @@
const char *check_Field, WindOpType windop, gd_triplet_t threshold,
int fragment_index = 0);
- virtual const char *Check() const { return E.in_fields[1]; };
+ virtual const char *Input(int index = 0) const {
+ return E.in_fields[(index == 0) ? 0 : 1];
+ };
- virtual const char *Input() const { return E.in_fields[0]; };
-
virtual const char *Scalar() const { return E.scalar[0]; }
virtual int ScalarIndex() const { return E.scalar_ind[0]; };
@@ -52,8 +52,7 @@
virtual gd_triplet_t Threshold() const { return E.u.window.threshold; };
- virtual int SetInput(const char* field);
- virtual int SetCheck(const char* field);
+ int SetInput(const char* field, int index);
virtual int SetWindOp(WindOpType windop);
virtual int SetThreshold(gd_triplet_t threshold);
virtual int SetThreshold(const char* threshold);
Added: trunk/getdata/bindings/cxx/mplexentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/mplexentry.cpp (rev 0)
+++ trunk/getdata/bindings/cxx/mplexentry.cpp 2012-01-11 08:05:50 UTC (rev 645)
@@ -0,0 +1,127 @@
+// Copyright (C) 2012 D. V. Wiebe
+//
+///////////////////////////////////////////////////////////////////////////
+//
+// This file is part of the GetData project.
+//
+// GetData is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2.1 of the License, or (at your
+// option) any later version.
+//
+// GetData is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+// License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with GetData; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#include "internal.h"
+
+MplexEntry::MplexEntry(const char* field_code, const char* in_field,
+ const char* count, gd_count_t count_val, gd_count_t count_max,
+ int fragment_index) : Entry()
+{
+ dtrace("\"%s\", \"%s\", \"%s\", %i, %i, %i", field_code,
+ in_field, count, count_val, count_max, fragment_index);
+
+ E.field = strdup(field_code);
+ E.field_type = GD_MPLEX_ENTRY;
+ E.in_fields[0] = strdup(in_field);
+ E.in_fields[1] = strdup(count);
+ E.scalar[0] = E.scalar[1] = 0;
+ E.u.mplex.count_val = count_val;
+ E.u.mplex.count_max = count_max;
+ E.fragment_index = fragment_index;
+
+ dreturnvoid();
+}
+
+int MplexEntry::SetInput(const char* field, int index)
+{
+ if (index < 0 || index > 1)
+ return -1;
+
+ char* ptr = strdup(field);
+
+ if (ptr == NULL)
+ return -1;
+
+ free(E.in_fields[index]);
+ E.in_fields[index] = ptr;
+
+ if (D != NULL)
+ return gd_alter_entry(D->D, E.field, &E, 0);
+
+ return 0;
+}
+
+int MplexEntry::SetCountVal(gd_count_t count_val)
+{
+ int ret = 0;
+
+ dtrace("%u", count_val);
+
+ E.u.mplex.count_val = count_val;
+
+ if (D != NULL)
+ ret = gd_alter_entry(D->D, E.field, &E, 0);
+
+ dreturn("%i", ret);
+ return ret;
+}
+
+int MplexEntry::SetCountMax(gd_count_t count_max)
+{
+ int ret = 0;
+
+ dtrace("%u", count_max);
+
+ E.u.mplex.count_max = count_max;
+
+ if (D != NULL)
+ ret = gd_alter_entry(D->D, E.field, &E, 0);
+
+ dreturn("%i", ret);
+ return ret;
+}
+
+int MplexEntry::SetCountVal(const char *count_val)
+{
+ int r = 0;
+
+ dtrace("\"%s\"", count_val);
+
+ SetScalar(0, count_val);
+
+ if (D != NULL) {
+ r = gd_alter_entry(D->D, E.field, &E, 0);
+
+ if (!r)
+ r = gd_get_constant(D->D, count_val, GD_UINT16, &E.u.mplex.count_val);
+ }
+
+ dreturn("%i", r);
+ return r;
+}
+
+int MplexEntry::SetCountMax(const char *count_max)
+{
+ int r = 0;
+
+ dtrace("\"%s\"", count_max);
+
+ SetScalar(1, count_max);
+
+ if (D != NULL) {
+ r = gd_alter_entry(D->D, E.field, &E, 0);
+
+ if (!r)
+ r = gd_get_constant(D->D, count_max, GD_UINT16, &E.u.mplex.count_max);
+ }
+
+ dreturn("%i", r);
+ return r;
+}
Modified: trunk/getdata/bindings/cxx/test/big_test.cpp
===================================================================
--- trunk/getdata/bindings/cxx/test/big_test.cpp 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/cxx/test/big_test.cpp 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-// Copyright (C) 2009-2010 D. V. Wiebe
+// Copyright (C) 2009-2012 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -130,6 +130,7 @@
"polynom POLYNOM data 1.1 2.2 2.2 3.3;4.4 const const\n"
"bit BIT data 3 4\n"
"sbit SBIT data 5 6\n"
+ "mplex MPLEX sbit data 1 10\n"
"mult MULTIPLY data sbit\n"
"div DIVIDE mult bit\n"
"recip RECIP div 6.5;4.3\n"
@@ -138,7 +139,7 @@
"/ALIAS alias data\n"
"string STRING \"Zaphod Beeblebrox\"\n";
const char* form2_data = "const2 CONST INT8 -19\n";
- const int nfields = 16;
+ const int nfields = 17;
unsigned char c[8];
unsigned char data_data[80];
signed char sc;
@@ -166,14 +167,15 @@
CarrayEntry aent, *aep;
StringEntry gent;
WindowEntry went, *wep;
+ MplexEntry xent, *xep;
Fragment *frag;
gd_triplet_t thresh;
char* fields[nfields + 7] = {(char*)"INDEX", (char*)"alias", (char*)"bit",
(char*)"carray", (char*)"const", (char*)"data", (char*)"div",
- (char*)"lincom", (char*)"linterp", (char*)"mult", (char*)"phase",
- (char*)"polynom", (char*)"recip", (char*)"sbit", (char*)"string",
- (char*)"window", NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+ (char*)"lincom", (char*)"linterp", (char*)"mplex", (char*)"mult",
+ (char*)"phase", (char*)"polynom", (char*)"recip", (char*)"sbit",
+ (char*)"string", (char*)"window", NULL, NULL, NULL, NULL, NULL, NULL, NULL};
char *strings[3];
// Write the test dirfile
@@ -635,7 +637,7 @@
// 44: Dirfile::NVectors check
n = d->NVectors();
CHECK_OK(44);
- CHECK_INT(44,n,23);
+ CHECK_INT(44,n,24);
// 45: Dirfile::VectorList check
fields[0] = (char*)"INDEX";
@@ -645,22 +647,23 @@
fields[4] = (char*)"div";
fields[5] = (char*)"lincom";
fields[6] = (char*)"linterp";
- fields[7] = (char*)"mult";
- fields[8] = (char*)"new1";
- fields[9] = (char*)"new10";
- fields[10] = (char*)"new2";
- fields[11] = (char*)"new3";
- fields[12] = (char*)"new4";
- fields[13] = (char*)"new5";
- fields[14] = (char*)"new6";
- fields[15] = (char*)"new7";
- fields[16] = (char*)"new8";
- fields[17] = (char*)"new9";
- fields[18] = (char*)"phase";
- fields[19] = (char*)"polynom";
- fields[20] = (char*)"recip";
- fields[21] = (char*)"sbit";
- fields[22] = (char*)"window";
+ fields[7] = (char*)"mplex";
+ fields[8] = (char*)"mult";
+ fields[9] = (char*)"new1";
+ fields[10] = (char*)"new10";
+ fields[11] = (char*)"new2";
+ fields[12] = (char*)"new3";
+ fields[13] = (char*)"new4";
+ fields[14] = (char*)"new5";
+ fields[15] = (char*)"new6";
+ fields[16] = (char*)"new7";
+ fields[17] = (char*)"new8";
+ fields[18] = (char*)"new9";
+ fields[19] = (char*)"phase";
+ fields[20] = (char*)"polynom";
+ fields[21] = (char*)"recip";
+ fields[22] = (char*)"sbit";
+ fields[23] = (char*)"window";
list = d->VectorList();
CHECK_OK(45);
CHECK_STRING_ARRAY(45,n,list[i],fields[i]);
@@ -1416,16 +1419,16 @@
CHECK_INT2(211, 1, ent->Type(), WindowEntryType);
CHECK_INT2(211, 2, ent->FragmentIndex(), 0);
CHECK_INT2(211, 3, ent->WindOp(), WindOpLt);
- CHECK_STRING2(211, 4, ent->Input(), "linterp");
- CHECK_STRING2(211, 5, ent->Check(), "mult");
+ CHECK_STRING2(211, 4, ent->Input(0), "linterp");
+ CHECK_STRING2(211, 5, ent->Input(1), "mult");
CHECK_DOUBLE2(211, 6, ent->Threshold().r, 4.1);
delete ent;
// 212: Dirfile::Add / WindowEntry check
went.SetName("new18");
went.SetFragmentIndex(0);
- went.SetInput("in1");
- went.SetCheck("in2");
+ went.SetInput("in1", 0);
+ went.SetInput("in2", 1);
went.SetWindOp(WindOpNe);
thresh.i = 32;
went.SetThreshold(thresh);
@@ -1437,16 +1440,16 @@
CHECK_INT2(212, 1, ent->Type(), WindowEntryType);
CHECK_INT2(212, 2, ent->FragmentIndex(), 0);
CHECK_INT2(212, 3, ent->WindOp(), WindOpNe);
- CHECK_STRING2(212, 4, ent->Input(), "in1");
- CHECK_STRING2(212, 5, ent->Check(), "in2");
+ CHECK_STRING2(212, 4, ent->Input(0), "in1");
+ CHECK_STRING2(212, 5, ent->Input(1), "in2");
CHECK_INT2(212, 6, ent->Threshold().i, 32);
delete ent;
// 214: gd_madd_window_i check
went.Dissociate();
went.SetName("mnew18");
- went.SetInput("in2");
- went.SetCheck("in3");
+ went.SetInput("in2", 0);
+ went.SetInput("in3", 1);
went.SetWindOp(WindOpSet);
thresh.u = 128;
went.SetThreshold(thresh);
@@ -1458,15 +1461,15 @@
CHECK_INT2(214, 1, ent->Type(), WindowEntryType);
CHECK_INT2(214, 2, ent->FragmentIndex(), 0);
CHECK_INT2(214, 3, ent->WindOp(), WindOpSet);
- CHECK_STRING2(214, 4, ent->Input(), "in2");
- CHECK_STRING2(214, 5, ent->Check(), "in3");
+ CHECK_STRING2(214, 4, ent->Input(0), "in2");
+ CHECK_STRING2(214, 5, ent->Input(1), "in3");
CHECK_INT2(214, 6, ent->Threshold().u, 128);
delete ent;
// 217: gd_alter_window_r check
wep = reinterpret_cast<WindowEntry*>(d->Entry("new18"));
- wep->SetInput("in3");
- wep->SetCheck("in4");
+ wep->SetInput("in3", 0);
+ wep->SetInput("in4", 1);
wep->SetWindOp(WindOpGe);
thresh.r = 32e3;
wep->SetThreshold(thresh);
@@ -1478,8 +1481,8 @@
CHECK_INT2(217, 1, ent->Type(), WindowEntryType);
CHECK_INT2(217, 2, ent->FragmentIndex(), 0);
CHECK_INT2(217, 3, ent->WindOp(), WindOpGe);
- CHECK_STRING2(217, 4, ent->Input(), "in3");
- CHECK_STRING2(217, 5, ent->Check(), "in4");
+ CHECK_STRING2(217, 4, ent->Input(0), "in3");
+ CHECK_STRING2(217, 5, ent->Input(1), "in4");
CHECK_DOUBLE2(217, 6, ent->Threshold().r, 32e3);
delete ent;
@@ -1554,12 +1557,82 @@
CHECK_STRING2(227, 3, frag->Suffix(), "C");
delete frag;
+ // 228: gd_entry (MPLEX) check
+ ent = d->Entry("mplex");
+ CHECK_OK(228);
+ CHECK_INT2(228, 1, ent->Type(), MplexEntryType);
+ CHECK_INT2(228, 2, ent->FragmentIndex(), 0);
+ CHECK_INT2(228, 3, ent->CountVal(), 1);
+ CHECK_STRING2(228, 4, ent->Input(0), "data");
+ CHECK_STRING2(228, 5, ent->Input(1), "sbit");
+ CHECK_INT2(228, 6, ent->CountMax(), 10);
+ delete ent;
+ // 229: Dirfile::Add / MplexEntry check
+ xent.SetName("new21");
+ xent.SetFragmentIndex(0);
+ xent.SetInput("in1", 0);
+ xent.SetInput("in2", 1);
+ xent.SetCountVal(5);
+ xent.SetCountMax(6);
+ d->Add(xent);
+ CHECK_OK2(229, 1);
+ ent = d->Entry("new21");
+ CHECK_OK2(229, 2);
+ CHECK_INT2(229, 1, ent->Type(), MplexEntryType);
+ CHECK_INT2(229, 2, ent->FragmentIndex(), 0);
+ CHECK_INT2(229, 3, ent->CountVal(), 5);
+ CHECK_STRING2(229, 4, ent->Input(0), "in1");
+ CHECK_STRING2(229, 5, ent->Input(1), "in2");
+ CHECK_INT2(229, 6, ent->CountMax(), 6);
+ delete ent;
+ // 230: gd_madd_mplex check
+ xent.Dissociate();
+ xent.SetName("mnew21");
+ xent.SetInput("in2", 0);
+ xent.SetInput("in3", 1);
+ xent.SetCountVal((gd_count_t)0);
+ xent.SetCountMax(12);
+ d->MAdd(xent, "data");
+ CHECK_OK2(230, 1);
+ ent = d->Entry("data/mnew21");
+ CHECK_OK2(230, 2);
+ CHECK_INT2(230, 1, ent->Type(), MplexEntryType);
+ CHECK_INT2(230, 2, ent->FragmentIndex(), 0);
+ CHECK_INT2(230, 3, ent->CountVal(), 0);
+ CHECK_STRING2(230, 4, ent->Input(0), "in2");
+ CHECK_STRING2(230, 5, ent->Input(1), "in3");
+ CHECK_INT2(230, 6, ent->CountMax(), 12);
+ delete ent;
+ // 231: gd_alter_mplex check
+ xep = reinterpret_cast<MplexEntry*>(d->Entry("new21"));
+ xep->SetInput("in3", 0);
+ xep->SetInput("in4", 1);
+ xep->SetCountVal(3);
+ xep->SetCountMax(7);
+ CHECK_OK2(231, 1);
+ delete xep;
+ ent = d->Entry("new21");
+ CHECK_OK2(231, 2);
+ CHECK_INT2(231, 1, ent->Type(), MplexEntryType);
+ CHECK_INT2(231, 2, ent->FragmentIndex(), 0);
+ CHECK_INT2(231, 3, ent->CountVal(), 3);
+ CHECK_STRING2(231, 4, ent->Input(0), "in3");
+ CHECK_STRING2(231, 5, ent->Input(1), "in4");
+ CHECK_INT2(231, 6, ent->CountMax(), 7);
+ delete ent;
+
+
+
+
+
+
+
// ===================================================================
d->Discard();
delete d;
Modified: trunk/getdata/bindings/cxx/windowentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/windowentry.cpp 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/cxx/windowentry.cpp 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-// Copyright (C) 2011 D. V. Wiebe
+// Copyright (C) 2011-2012 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -40,50 +40,23 @@
dreturnvoid();
}
-int WindowEntry::SetInput(const char* field)
+int WindowEntry::SetInput(const char* field, int index)
{
- int ret = 0;
-
- dtrace("\"%s\"", field);
-
- char* ptr = strdup(field);
-
- if (ptr == NULL) {
- dreturn("%i", -1);
+ if (index < 0 || index > 1)
return -1;
- }
- free(E.in_fields[0]);
- E.in_fields[0] = ptr;
-
- if (D != NULL)
- ret = gd_alter_entry(D->D, E.field, &E, 0);
-
- dreturn("%i", ret);
- return ret;
-}
-
-int WindowEntry::SetCheck(const char* field)
-{
- int ret = 0;
-
- dtrace("\"%s\"", field);
-
char* ptr = strdup(field);
- if (ptr == NULL) {
- dreturn("%i", -1);
+ if (ptr == NULL)
return -1;
- }
- free(E.in_fields[1]);
- E.in_fields[1] = ptr;
+ free(E.in_fields[index]);
+ E.in_fields[index] = ptr;
if (D != NULL)
- ret = gd_alter_entry(D->D, E.field, &E, 0);
+ return gd_alter_entry(D->D, E.field, &E, 0);
- dreturn("%i", ret);
- return ret;
+ return 0;
}
int WindowEntry::SetWindOp(WindOpType windop)
Modified: trunk/getdata/bindings/f77/fgetdata.c
===================================================================
--- trunk/getdata/bindings/f77/fgetdata.c 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/f77/fgetdata.c 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2008-2011 D. V. Wiebe
+/* Copyright (C) 2008-2012 D. V. Wiebe
*
*************************************************************************
*
@@ -853,6 +853,7 @@
else {
_GDF_FString(in_field, in_field_l, E.in_fields[0]);
_GDF_FString(check_field, check_field_l, E.in_fields[1]);
+ *windop = E.EN(window,windop);
switch (E.EN(window,windop)) {
case GD_WINDOP_EQ:
case GD_WINDOP_NE:
@@ -870,8 +871,38 @@
gd_free_entry_strings(&E);
}
- *windop = E.EN(window,windop);
+ free(fc);
+ dreturnvoid();
+}
+
+/* gd_entry wrapper for MPLEX */
+void F77_FUNC(gdgemx, GDGEMX) (char *in_field, int *in_field_l,
+ char *count_field, int *count_field_l, int *val, int *max,
+ int *fragment_index, const int *dirfile, const char *field_code,
+ const int *field_code_l)
+{
+ char *fc;
+ gd_entry_t E;
+
+ dtrace("%p, %i, %p, %i, %p, %p, %p, %i, %p, %i", in_field, *in_field_l,
+ count_field, *count_field_l, val, max, fragment_index, *dirfile,
+ field_code, *field_code_l);
+
+ fc = (char *)malloc(*field_code_l + 1);
+
+ if (gd_entry(_GDF_GetDirfile(*dirfile), _GDF_CString(fc, field_code,
+ *field_code_l), &E) || E.field_type != GD_MPLEX_ENTRY)
+ *in_field_l = 0;
+ else {
+ _GDF_FString(in_field, in_field_l, E.in_fields[0]);
+ _GDF_FString(count_field, count_field_l, E.in_fields[1]);
+ *val = E.EN(mplex,count_val);
+ *max = E.EN(mplex,count_max);
+ *fragment_index = E.fragment_index;
+ gd_free_entry_strings(&E);
+ }
+
free(fc);
dreturnvoid();
@@ -2934,6 +2965,7 @@
break;
case GD_BIT_ENTRY:
case GD_SBIT_ENTRY:
+ case GD_MPLEX_ENTRY:
if (*index > 2)
ok = 0;
break;
@@ -3005,6 +3037,7 @@
break;
case GD_BIT_ENTRY:
case GD_SBIT_ENTRY:
+ case GD_MPLEX_ENTRY:
if (*index > 2)
ok = 0;
break;
@@ -3309,6 +3342,60 @@
dreturnvoid();
}
+/* gd_add_mplex wrapper */
+void F77_FUNC(gdadmx, GDADMX) (const int *dirfile, const char *field_code,
+ const int *field_code_l, const char *in_field, const int *in_field_l,
+ const char *count_field, const int *count_field_l, const int *val,
+ const int *max, const int *fragment_index)
+{
+ dtrace("%i, %p, %i, %p, %i, %p, %i, %i, %i, %i", *dirfile, field_code,
+ *field_code_l, in_field, *in_field_l, count_field, *count_field_l,
+ *val, *max, *fragment_index);
+
+ char *in = (char *)malloc(*in_field_l + 1);
+ char *cf = (char *)malloc(*count_field_l + 1);
+ char *fc = (char *)malloc(*field_code_l + 1);
+
+ gd_add_mplex(_GDF_GetDirfile(*dirfile), _GDF_CString(fc, field_code,
+ *field_code_l), _GDF_CString(in, in_field, *in_field_l),
+ _GDF_CString(cf, count_field, *count_field_l), *val, *max,
+ *fragment_index);
+
+ free(fc);
+ free(cf);
+ free(in);
+
+ dreturnvoid();
+}
+
+/* gd_madd_mplex wrapper */
+void F77_FUNC(gdmdmx, GDMDMX) (const int *dirfile, const char *parent,
+ const int *parent_l, const char *field_code, const int *field_code_l,
+ const char *in_field, const int *in_field_l, const char *count_field,
+ const int *count_field_l, const int *val, const int *max)
+{
+ dtrace("%i, %p, %i, %p, %i, %p, %i, %p, %i, %i, %i", *dirfile, parent,
+ *parent_l, field_code, *field_code_l, in_field, *in_field_l, count_field,
+ *count_field_l, *val, *max);
+
+ char *in = (char *)malloc(*in_field_l + 1);
+ char *cf = (char *)malloc(*count_field_l + 1);
+ char *fc = (char *)malloc(*field_code_l + 1);
+ char *pa = (char *)malloc(*parent_l + 1);
+
+ gd_madd_mplex(_GDF_GetDirfile(*dirfile), _GDF_CString(pa, parent, *parent_l),
+ _GDF_CString(fc, field_code, *field_code_l), _GDF_CString(in, in_field,
+ *in_field_l), _GDF_CString(cf, count_field, *count_field_l), *val,
+ *max);
+
+ free(pa);
+ free(fc);
+ free(cf);
+ free(in);
+
+ dreturnvoid();
+}
+
/* gd_alias_target */
void F77_FUNC(gdatrg, GDATRG) (char *target, int *target_l, const int *dirfile,
const char *field_code, const int *field_code_l)
@@ -3454,7 +3541,31 @@
dreturnvoid();
}
-/* gd_delete_aliases */
+/* gd_alter_mplex */
+void F77_FUNC(gdalmx, GDALMX) (const int *dirfile, const char *field_code,
+ const int *field_code_l, const char *in_field, const int *in_field_l,
+ const char *count_field, const int *count_field_l, const int *val,
+ const int *max)
+{
+ dtrace("%i, %p, %i, %p, %i, %p, %i, %i, %i", *dirfile, field_code,
+ *field_code_l, in_field, *in_field_l, count_field, *count_field_l,
+ *val, *max);
+
+ char *fc = (char *)malloc(*field_code_l + 1);
+ char *in = (char *)malloc(*in_field_l + 1);
+ char *cf = (char *)malloc(*count_field_l + 1);
+
+ gd_alter_mplex(_GDF_GetDirfile(*dirfile), _GDF_CString(fc, field_code,
+ *field_code_l), _GDF_CString(in, in_field, *in_field_l),
+ _GDF_CString(cf, count_field, *count_field_l), *val, *max);
+
+ free(cf);
+ free(in);
+ free(fc);
+ dreturnvoid();
+}
+
+/* gd_delete_alias */
void F77_FUNC(gddela, GDDELA) (const int *dirfile, const char *field_code,
const int *field_code_l, const int *flags)
{
Modified: trunk/getdata/bindings/f77/fgetdata.h
===================================================================
--- trunk/getdata/bindings/f77/fgetdata.h 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/f77/fgetdata.h 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2008, 2009 D. V. Wiebe
+/* Copyright (C) 2008-2012 D. V. Wiebe
*
*************************************************************************
*
@@ -582,6 +582,86 @@
void F77_FUNC(gdmstx, GDMSTX) (int *max, const int *dirfile, const char *parent,
const int *parent_l);
+
+void F77_FUNC(gdadwd, GDADWD) (const int *dirfile, const char *field_code,
+ const int *field_code_l, const char *in_field, const int *in_field_l,
+ const char *check_field, const int *check_field_l, const int *windop,
+ const void *threshold, const int *fragment_index);
+
+void F77_FUNC(gdmdwd, GDMDWD) (const int *dirfile, const char *parent,
+ const int *parent_l, const char *field_code, const int *field_code_l,
+ const char *in_field, const int *in_field_l, const char *check_field,
+ const int *check_field_l, const int *windop, const void *threshold);
+
+void F77_FUNC(gdalwd, GDALWD) (const int *dirfile, const char *field_code,
+ const int *field_code_l, const char *in_field, const int *in_field_l,
+ const char *check_field, const int *check_field_l, const int *windop,
+ const void *threshold);
+
+void F77_FUNC(gdadmx, GDADMX) (const int *dirfile, const char *field_code,
+ const int *field_code_l, const char *in_field, const int *in_field_l,
+ const char *count_field, const int *count_field_l, const int *val,
+ const int *max, const int *fragment_index);
+
+void F77_FUNC(gdmdmx, GDMDMX) (const int *dirfile, const char *parent,
+ const int *parent_l, const char *field_code, const int *field_code_l,
+ const char *in_field, const int *in_field_l, const char *count_field,
+ const int *count_field_l, const int *val, const int *max);
+
+void F77_FUNC(gdalmx, GDALMX) (const int *dirfile, const char *field_code,
+ const int *field_code_l, const char *in_field, const int *in_field_l,
+ const char *count_field, const int *count_field_l, const int *val,
+ const int *max);
+
+void F77_FUNC(gdsync, GDSYNC) (const int* dirfile, const char* field_code,
+ const int* field_code_l);
+
+void F77_FUNC(gdinca, GDINCA) (const int* dirfile, const char* file,
+ const int* file_l, const int* fragment_index, const char* prefix,
+ const int* prefix_l, const char* suffix, const int* suffix_l,
+ const int* flags);
+
+void F77_FUNC(gdmova, GDMOVA) (const int *dirfile, const char *field_code,
+ const int *field_code_l, const int *new_fragment);
+
+void F77_FUNC(gdmdal, GDMDAL) (const int *dirfile, const char *parent,
+ const int *parent_l, const char *field_code, const int *field_code_l,
+ const char *target, const int *target_l);
+
+void F77_FUNC(gduhid, GDUHID) (const int *dirfile, const char *field_code,
+ const int *field_code_l);
+
+void F77_FUNC(gdhide, GDHIDE) (const int *dirfile, const char *field_code,
+ const int *field_code_l);
+
+void F77_FUNC(gdhidn, GDHIDN) (int *result, const int *dirfile,
+ const char *field_code, const int *field_code_l);
+
+void F77_FUNC(gdfraf, GDFRAF) (char *prefix, int *prefix_l, char *suffix,
+ int *suffix_l, const int *dirfile, const int *index);
+
+void F77_FUNC(gddela, GDDELA) (const int *dirfile, const char *field_code,
+ const int *field_code_l, const int *flags);
+
+void F77_FUNC(gdaafx, GDAAFX) (const int *dirfile, const int *index,
+ const char *prefix, const int *prefix_l, const char *suffix,
+ const int *suffix_l);
+
+void F77_FUNC(gdalss, GDALSS) (char *alias, int *alias_l, const int *dirfile,
+ const char *field_code, const int *field_code_l, const int *num);
+
+void F77_FUNC(gdnals, GDNALS) (int *nalias, const int *dirfile,
+ const char *field_code, const int *field_code_l);
+
+void F77_FUNC(gdalsx, GDALSX) (int* max, const int* dirfile,
+ const char *field_code, const int *field_code_l);
+
+void F77_FUNC(gdatrg, GDATRG) (char *target, int *target_l, const int *dirfile,
+ const char *field_code, const int *field_code_l);
+
+void F77_FUNC(gdadal, GDADAL) (const int *dirfile, const char *field_code,
+ const int *field_code_l, const char *target, const int *target_l,
+ const int *fragment_index);
#ifdef __cplusplus
}
#endif
Modified: trunk/getdata/bindings/f77/getdata.f.in
===================================================================
--- trunk/getdata/bindings/f77/getdata.f.in 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/f77/getdata.f.in 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-C Copyright (C) 2008-2011 D. V. Wiebe
+C Copyright (C) 2008-2012 D. V. Wiebe
C
C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
@@ -49,6 +49,8 @@
EXTERNAL GDADLT
C Corresponding to gd_add_multiply(3)
EXTERNAL GDADMT
+C Corresponding to gd_add_mplex(3)
+ EXTERNAL GDADMX
C Corresponding to gd_add_phase(3)
EXTERNAL GDADPH
C Corresponding to gd_add_polynom(3)
@@ -91,6 +93,8 @@
EXTERNAL GDALLT
C Correpsonding to gd_alter_multiply(3)
EXTERNAL GDALMT
+C Corresponding to gd_alter_mplex(3)
+ EXTERNAL GDALMX
C Correpsonding to gd_alter_phase(3)
EXTERNAL GDALPH
C Correpsonding to gd_alter_polynom(3)
@@ -249,6 +253,8 @@
EXTERNAL GDMDLT
C Corresponding to gd_madd_multiply(3)
EXTERNAL GDMDMT
+C Corresponding to gd_madd_mplex(3)
+ EXTERNAL GDMDMX
C Corresponding to gd_madd_phase(3)
EXTERNAL GDMDPH
C Corresponding to gd_madd_polynom(3)
Modified: trunk/getdata/bindings/f77/getdata.f90.in
===================================================================
--- trunk/getdata/bindings/f77/getdata.f90.in 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/f77/getdata.f90.in 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-! Copyright (C) 2008-2011 D. V. Wiebe
+! Copyright (C) 2008-2012 D. V. Wiebe
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
@@ -30,6 +30,7 @@
type gd_entry
integer :: field_type, n_fields, spf, data_type, bitnum, numbits, shift
integer :: fragment_index, comp_scal, poly_ord, array_len, windop, ithreshold
+ integer :: count_val, count_max
character (len=GD_FIELD_LEN), dimension(3) :: field
character (len=GD_FIELD_LEN), dimension(6) :: scalar
integer, dimension(6) :: scalar_ind
@@ -902,6 +903,19 @@
len1 = GD_FIELD_LEN
call gdgsca(ent%scalar(1), len1, ent%scalar_ind(1), dirfile, &
TRIM(field_code), LEN_TRIM(field_code), 1)
+ else if (fgd_entry .EQ. GD_MPLEX_ENTRY) then
+ ! mplex
+ call gdgemx(ent%field(1), len1, ent%field(2), len2, ent%count_val, &
+ ent%count_max, ent%fragment_index, dirfile, TRIM(field_code), &
+ LEN_TRIM(field_code))
+
+ len1 = GD_FIELD_LEN
+ call gdgsca(ent%scalar(1), len1, ent%scalar_ind(1), dirfile, &
+ TRIM(field_code), LEN_TRIM(field_code), 1)
+
+ len1 = GD_FIELD_LEN
+ call gdgsca(ent%scalar(2), len1, ent%scalar_ind(2), dirfile, &
+ TRIM(field_code), LEN_TRIM(field_code), 2)
else if (fgd_entry .EQ. GD_CONST_ENTRY) then
!const
call gdgeco(ent%data_type, ent%fragment_index, dirfile, TRIM(field_code), &
@@ -1018,6 +1032,10 @@
TRIM(ent%field(1)), LEN_TRIM(ent%field(1)), TRIM(ent%field(2)), &
LEN_TRIM(ent%field(2)), ent%windop, ent%rthreshold, ent%fragment_index)
end if
+ else if (ent%field_type .EQ. GD_MPLEX_ENTRY) then
+ call gdadmx(dirfile, TRIM(field_code), LEN_TRIM(field_code), &
+ TRIM(ent%field(1)), LEN_TRIM(ent%field(1)), TRIM(ent%field(2)), &
+ LEN_TRIM(ent%field(2)), ent%count_val, ent%count_max, ent%fragment_index)
else if (ent%field_type .EQ. GD_CONST_ENTRY) then
call gdadco(dirfile, TRIM(field_code), LEN_TRIM(field_code), &
ent%data_type, GD_INT32, zero, ent%fragment_index)
@@ -1258,6 +1276,10 @@
TRIM(ent%field(2)), LEN_TRIM(ent%field(2)), ent%windop, ent%rthreshold, &
ent%fragment_index)
end if
+ else if (ent%field_type .EQ. GD_MPLEX_ENTRY) then
+ call gdmdmx(dirfile, TRIM(parent), LEN_TRIM(parent), TRIM(field_code), &
+ LEN_TRIM(field_code), TRIM(ent%field(1)), LEN_TRIM(ent%field(1)), &
+ TRIM(ent%field(2)), LEN_TRIM(ent%field(2)), ent%count_val, ent%count_max)
else if (ent%field_type .EQ. GD_CONST_ENTRY) then
call gdmdco(dirfile, TRIM(parent), LEN_TRIM(parent), TRIM(field_code), &
LEN_TRIM(field_code), ent%data_type, GD_INT32, zero)
@@ -1640,6 +1662,10 @@
LEN_TRIM(ent%field(2)), ent%windop, ent%rthreshold, ent%fragment_index)
end if
else if (ent%field_type .EQ. GD_CONST_ENTRY) then
+ call gdalmx(dirfile, TRIM(field_code), LEN_TRIM(field_code), &
+ TRIM(ent%field(1)), LEN_TRIM(ent%field(1)), TRIM(ent%field(2)), &
+ LEN_TRIM(ent%field(2)), ent%count_val, ent%count_max, ent%fragment_index)
+ else if (ent%field_type .EQ. GD_CONST_ENTRY) then
call gdalco(dirfile, TRIM(field_code), LEN_TRIM(field_code), ent%data_type)
else if (ent%field_type .EQ. GD_CARRAY_ENTRY) then
call gdalca(dirfile, TRIM(field_code), LEN_TRIM(field_code), &
@@ -2491,7 +2517,7 @@
windop .NE. GD_WINDOP_SET .AND. windop .NE. GD_WINDOP_CLR) then
call gdadwd(dirfile, TRIM(field_code), LEN_TRIM(field_code), &
TRIM(in_field), LEN_TRIM(in_field), TRIM(check_field), &
- LEN_TRIM(check_field), windop, threshold, 1d0 * fragment_index)
+ LEN_TRIM(check_field), windop, 1d0 * threshold, fragment_index)
else
call gdadwd(dirfile, TRIM(field_code), LEN_TRIM(field_code), &
TRIM(in_field), LEN_TRIM(in_field), TRIM(check_field), &
@@ -2611,7 +2637,7 @@
end subroutine
subroutine fgd_alter_window_i (dirfile, field_name, in_field, check_field, &
-windop, threshold)
+ windop, threshold)
integer, intent(in) :: dirfile, windop, threshold
character (len=*), intent(in) :: field_name, in_field, check_field
@@ -2629,7 +2655,7 @@
end subroutine
subroutine fgd_alter_window_r (dirfile, field_name, in_field, check_field, &
-windop, threshold)
+ windop, threshold)
integer, intent(in) :: dirfile, windop
character (len=*), intent(in) :: field_name, in_field, check_field
double precision, intent(in) :: threshold
@@ -2717,5 +2743,34 @@
call gdfraf(prefix, len1, suffix, len2, dirfile, fragment_index)
end subroutine
+subroutine fgd_add_mplex (dirfile, field_code, in_field, count_field, &
+ count_val, count_max, fragment_index)
+ character(len=*), intent(in) :: field_code, in_field, count_field
+ integer, intent(in) :: dirfile, count_val, count_max, fragment_index
+ call gdadmx(dirfile, TRIM(field_code), LEN_TRIM(field_code), TRIM(in_field), &
+ LEN_TRIM(in_field), TRIM(count_field), LEN_TRIM(count_field), count_val, &
+ count_max, fragment_index)
+end subroutine
+
+subroutine fgd_madd_mplex (dirfile, parent, field_code, in_field, count_field, &
+ count_val, count_max)
+ character(len=*), intent(in) :: parent, field_code, in_field, count_field
+ integer, intent(in) :: dirfile, count_val, count_max
+
+ call gdmdmx(dirfile, TRIM(parent), LEN_TRIM(parent), TRIM(field_code), &
+ LEN_TRIM(field_code), TRIM(in_field), LEN_TRIM(in_field), TRIM(count_field), &
+ LEN_TRIM(count_field), count_val, count_max)
+end subroutine
+
+subroutine fgd_alter_mplex (dirfile, field_name, in_field, count_field, &
+ count_val, count_max)
+ integer, intent(in) :: dirfile, count_val, count_max
+ character (len=*), intent(in) :: field_name, in_field, count_field
+
+ call gdalmx(dirfile, TRIM(field_name), LEN_TRIM(field_name), TRIM(in_field), &
+ LEN_TRIM(in_field), TRIM(count_field), LEN_TRIM(count_field), count_val, &
+ count_max)
+end subroutine
+
end module
Modified: trunk/getdata/bindings/f77/test/big_test.f
===================================================================
--- trunk/getdata/bindings/f77/test/big_test.f 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/f77/test/big_test.f 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-C Copyright (C) 2009-2011 D. V. Wiebe
+C Copyright (C) 2009-2012 D. V. Wiebe
C
C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
@@ -181,7 +181,7 @@
INTEGER flen
PARAMETER (flen = 11)
INTEGER nfields
- PARAMETER (nfields = 16)
+ PARAMETER (nfields = 17)
INTEGER slen
PARAMETER (slen = 26)
INTEGER plen
@@ -224,13 +224,14 @@
fields(7) = 'div '
fields(8) = 'lincom '
fields(9) = 'linterp'
- fields(10) = 'mult '
- fields(11) = 'phase '
- fields(12) = 'polynom'
- fields(13) = 'recip '
- fields(14) = 'sbit '
- fields(15) = 'string '
- fields(16) = 'window '
+ fields(10) = 'mplex '
+ fields(11) = 'mult '
+ fields(12) = 'phase '
+ fields(13) = 'polynom'
+ fields(14) = 'recip '
+ fields(15) = 'sbit '
+ fields(16) = 'string '
+ fields(17) = 'window '
C Write the test dirfile
OPEN(1, FILE=frmat, STATUS='NEW')
@@ -248,6 +249,7 @@
+ const const'
WRITE(1, *) 'bit BIT data 3 4'
WRITE(1, *) 'sbit SBIT data 5 6'
+ WRITE(1, *) 'mplex MPLEX sbit data 1 10'
WRITE(1, *) 'mult MULTIPLY data sbit'
WRITE(1, *) 'phase PHASE data 11'
WRITE(1, *) 'div DIVIDE mult bit'
@@ -758,7 +760,7 @@
C 44: GDNVEC check
CALL GDNVEC(n, d)
CALL CHKEOK(ne, 44, d)
- CALL CHKINT(ne, 44, n, 23)
+ CALL CHKINT(ne, 44, n, 24)
C 45: GDVECN check
fields(1) = 'INDEX '
@@ -768,22 +770,23 @@
fields(5) = 'div '
fields(6) = 'lincom '
fields(7) = 'linterp'
- fields(8) = 'mult '
- fields(9) = 'new1 '
- fields(10) = 'new10 '
- fields(11) = 'new2 '
- fields(12) = 'new3 '
- fields(13) = 'new4 '
- fields(14) = 'new5 '
- fields(15) = 'new6 '
- fields(16) = 'new7 '
- fields(17) = 'new8 '
- fields(18) = 'new9 '
- fields(19) = 'phase '
- fields(20) = 'polynom'
- fields(21) = 'recip '
- fields(22) = 'sbit '
- fields(23) = 'window '
+ fields(8) = 'mplex '
+ fields(9) = 'mult '
+ fields(10) = 'new1 '
+ fields(11) = 'new10 '
+ fields(12) = 'new2 '
+ fields(13) = 'new3 '
+ fields(14) = 'new4 '
+ fields(15) = 'new5 '
+ fields(16) = 'new6 '
+ fields(17) = 'new7 '
+ fields(18) = 'new8 '
+ fields(19) = 'new9 '
+ fields(20) = 'phase '
+ fields(21) = 'polynom'
+ fields(22) = 'recip '
+ fields(23) = 'sbit '
+ fields(24) = 'window '
DO 450 i = 1, n
l = flen
CALL GDVECN(fn, l, d, i)
@@ -1991,15 +1994,77 @@
CALL CHKST2(ne, 227, 3, fields(1), 'B')
CALL CHKST2(ne, 227, 3, fields(2), '')
+C 228: GDGEMX check
+ l = flen
+ i = flen
+ CALL GDGEMX(fields(1), i, fields(2), l, m, j, n, d, 'mplex', 5)
+ CALL CHKEOK(ne, 228, d)
+ CALL CHKIN2(ne, 228, 1, i, flen)
+ CALL CHKIN2(ne, 228, 2, l, flen)
+ CALL CHKIN2(ne, 228, 3, n, 0)
+ CALL CHKIN2(ne, 228, 4, m, 1)
+ CALL CHKST2(ne, 228, 5, fields(1), 'data')
+ CALL CHKST2(ne, 228, 6, fields(2), 'sbit')
+ CALL CHKDB2(ne, 228, 7, j, 10)
+C 229: GDADMX check
+ CALL GDADMX(d, 'new21', 5, 'in1', 3, 'in2', 3, 5, 6, 0)
+ CALL CHKOK2(ne, 229, 1, d)
+ l = flen
+ i = flen
+ CALL GDGEMX(fields(1), i, fields(2), l, m, j, n, d, 'new21', 6)
+ CALL CHKOK2(ne, 229, 2, d)
+ CALL CHKIN2(ne, 229, 1, i, flen)
+ CALL CHKIN2(ne, 229, 2, l, flen)
+ CALL CHKIN2(ne, 229, 3, n, 0)
+ CALL CHKIN2(ne, 229, 4, m, 5)
+ CALL CHKST2(ne, 229, 5, fields(1), 'in1')
+ CALL CHKST2(ne, 229, 6, fields(2), 'in2')
+ CALL CHKIN2(ne, 229, 7, j, 6)
+C 230: GDMDMX check
+ CALL GDMDMX(d, 'data', 4, 'mnew21', 6, 'in2', 3, 'in3', 3, 0, 12)
+ CALL CHKOK2(ne, 230, 1, d)
+ l = flen
+ i = flen
+ CALL GDGEMX(fields(1), i, fields(2), l, m, j, n, d, 'data/mnew21',
+ +11)
+ CALL CHKOK2(ne, 230, 2, d)
+ CALL CHKIN2(ne, 230, 1, i, flen)
+ CALL CHKIN2(ne, 230, 2, l, flen)
+ CALL CHKIN2(ne, 230, 3, n, 0)
+ CALL CHKIN2(ne, 230, 4, m, 0)
+ CALL CHKST2(ne, 230, 5, fields(1), 'in2')
+ CALL CHKST2(ne, 230, 6, fields(2), 'in3')
+ CALL CHKIN2(ne, 230, 7, j, 12)
+C 231: GDALMX check
+ CALL GDALMX(d, 'new21', 5, 'in3', 3, 'in4', 3, GD_CMX, 7)
+ CALL CHKOK2(ne, 231, 1, d)
+ l = flen
+ i = flen
+ CALL GDGEMX(fields(1), i, fields(2), l, m, j, n, d, 'new21', 6)
+ CALL CHKOK2(ne, 231, 2, d)
+ CALL CHKIN2(ne, 231, 1, i, flen)
+ CALL CHKIN2(ne, 231, 2, l, flen)
+ CALL CHKIN2(ne, 231, 3, n, 0)
+ CALL CHKIN2(ne, 231, 4, m, 5)
+ CALL CHKST2(ne, 231, 5, fields(1), 'in3')
+ CALL CHKST2(ne, 231, 6, fields(2), 'in4')
+ CALL CHKIN2(ne, 231, 7, j, 7)
+
+
+
+
+
+
+
C ===============================================================
C Cleanup
CALL GDDSCD(d)
Modified: trunk/getdata/bindings/f77/test/big_test95.f90
===================================================================
--- trunk/getdata/bindings/f77/test/big_test95.f90 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/f77/test/big_test95.f90 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-! Copyright (C) 2009-2011 D. V. Wiebe
+! Copyright (C) 2009-2012 D. V. Wiebe
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
@@ -193,7 +193,7 @@
character (len=*), parameter :: frm2 = 'test95_dirfile/form2'
character (len=*), parameter :: dat = 'test95_dirfile/data'
integer, parameter :: flen = 11
- integer, parameter :: nfields = 16
+ integer, parameter :: nfields = 17
integer, parameter :: slen = 26
character (len=slen), dimension(3) :: strings
@@ -229,9 +229,10 @@
fields = (/ 'INDEX ', 'alias ', 'bit ', 'carray ', &
'const ', 'data ', 'div ', 'lincom ', 'linterp ', &
- 'mult ', 'phase ', 'polynom ', 'recip ', 'sbit ', &
- 'string ', 'window ', ' ', ' ', ' ', &
- ' ', ' ', ' ', ' ', ' ' /)
+ 'mplex ', 'mult ', 'phase ', 'polynom ', 'recip ', &
+ 'sbit ', 'string ', 'window ', ' ', ' ', &
+ ' ', ' ', ' ', ' ', ' ', &
+ ' ' /)
open(1, file=frmat, status='new')
write(1, *) '/ENDIAN little'
@@ -246,6 +247,7 @@
write(1, *) 'polynom POLYNOM data 1.1 2.2 2.2 3.3;4.4 const const'
write(1, *) 'bit BIT data 3 4'
write(1, *) 'sbit SBIT data 5 6'
+ write(1, *) 'mplex MPLEX sbit data 1 10'
write(1, *) 'mult MULTIPLY data sbit'
write(1, *) 'phase PHASE data 11'
write(1, *) 'div DIVIDE mult bit'
@@ -926,14 +928,15 @@
! 44: fgd_nvectors check
n = fgd_nvectors(d)
call check_ok(ne, 44, d)
- call check_int(ne, 44, n, 24)
+ call check_int(ne, 44, n, 25)
! 45: fgd_vector_list check
fields = (/ 'INDEX ', 'alias ', 'bit ', 'data ', &
- 'div ', 'lincom ', 'linterp ', 'mult ', 'new1 ', &
- 'new10 ', 'new13 ', 'new2 ', 'new3 ', 'new4 ', &
- 'new5 ', 'new6 ', 'new7 ', 'new8 ', 'new9 ', &
- 'phase ', 'polynom ', 'recip ', 'sbit ', 'window ' /)
+ 'div ', 'lincom ', 'linterp ', 'mplex ', 'mult ', &
+ 'new1 ', 'new10 ', 'new13 ', 'new2 ', 'new3 ', &
+ 'new4 ', 'new5 ', 'new6 ', 'new7 ', 'new8 ', &
+ 'new9 ', 'phase ', 'polynom ', 'recip ', 'sbit ', &
+ 'window ' /)
l = flen
call fgd_vector_list(flist, d, l)
call check_ok(ne, 45, d)
@@ -1263,7 +1266,8 @@
'mnew5 ', 'mnew6 ', 'mnew7 ', 'mnew8 ', 'mnew9 ', &
'mnew10 ', 'mnew4 ', ' ', ' ', ' ', &
' ', ' ', ' ', ' ', ' ', &
- ' ', ' ', ' ', ' ', ' ' /)
+ ' ', ' ', ' ', ' ', ' ', &
+ ' ' /)
l = flen
call fgd_mvector_list(flist, d, "data", l)
call check_ok2(ne, 66, i, d)
@@ -2428,6 +2432,55 @@
call check_str2(ne, 227, 3, fields(1), 'B')
call check_str2(ne, 227, 3, fields(2), '')
+! 228: fgd_entry (MPLEX) check
+ n = fgd_entry(d, 'mplex', ent)
+ call check_ok(ne, 228, d)
+ call check_int2(ne, 228, 1, n, GD_MPLEX_ENTRY)
+ call check_int2(ne, 228, 2, ent%fragment_index, 0)
+ call check_int2(ne, 228, 3, ent%count_val, 1)
+ call check_str2(ne, 228, 4, ent%field(1), 'data')
+ call check_str2(ne, 228, 5, ent%field(2), 'sbit')
+ call check_int2(ne, 228, 6, ent%count_max, 10)
+
+! 229: fgd_add_mplex check
+ call fgd_add_mplex(d, 'new21', 'in1', 'in2', 5, 6, 0)
+ call check_ok2(ne, 229, 1, d)
+
+ n = fgd_entry(d, 'new21', ent)
+ call check_ok2(ne, 229, 2, d)
+ call check_int2(ne, 229, 1, n, GD_MPLEX_ENTRY)
+ call check_int2(ne, 229, 2, ent%fragment_index, 0)
+ call check_int2(ne, 229, 3, ent%count_val, 5)
+ call check_str2(ne, 229, 4, ent%field(1), 'in1')
+ call check_str2(ne, 229, 5, ent%field(2), 'in2')
+ call check_int2(ne, 229, 6, ent%count_max, 6)
+
+! 230: fgd_madd_mplex check
+ call fgd_madd_mplex(d, 'data', 'mnew21', 'in2', 'in3', 0, 12)
+ call check_ok2(ne, 230, 1, d)
+
+ n = fgd_entry(d, 'data/mnew21', ent)
+ call check_ok2(ne, 230, 2, d)
+ call check_int2(ne, 230, 1, n, GD_MPLEX_ENTRY)
+ call check_int2(ne, 230, 2, ent%fragment_index, 0)
+ call check_int2(ne, 230, 3, ent%count_val, 0)
+ call check_str2(ne, 230, 4, ent%field(1), 'in2')
+ call check_str2(ne, 230, 5, ent%field(2), 'in3')
+ call check_int2(ne, 230, 6, ent%count_max, 12)
+
+! 231: fgd_alter_mplex check
+ call fgd_alter_mplex(d, 'new21', 'in3', 'in4', GD_COUNT_MAX, 7)
+ call check_ok2(ne, 231, 1, d)
+
+ n = fgd_entry(d, 'new21', ent)
+ call check_ok2(ne, 231, 2, d)
+ call check_int2(ne, 231, 1, n, GD_MPLEX_ENTRY)
+ call check_int2(ne, 231, 2, ent%fragment_index, 0)
+ call check_int2(ne, 231, 3, ent%count_val, 5)
+ call check_str2(ne, 231, 4, ent%field(1), 'in3')
+ call check_str2(ne, 231, 5, ent%field(2), 'in4')
+ call check_dbl2(ne, 231, 6, ent%count_max, 7)
+
Modified: trunk/getdata/bindings/idl/getdata.c
===================================================================
--- trunk/getdata/bindings/idl/getdata.c 2012-01-07 04:19:42 UTC (rev 644)
+++ trunk/getdata/bindings/idl/getdata.c 2012-01-11 08:05:50 UTC (rev 645)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2009-2011 D. V. Wiebe
+/* Copyright (C) 2009-2012 D. V. Wiebe
*
***************************************************************************
*
@@ -428,7 +428,7 @@
|| E->field_type == GD_MULTIPLY_ENTRY || E->field_type == GD_PHASE_ENTRY
|| E->field_type == GD_SBIT_ENTRY || E->field_type == GD_POLYNOM_ENTRY
|| E->field_type == GD_DIVIDE_ENTRY || E->field_type == GD_RECIP_ENTRY
- || E->field_type == GD_WINDOW_ENTRY)
+ || E->field_type == GD_WINDOW_ENTRY || E->field_type == GD_MPLEX_ENTRY)
{
IDL_StrStore((IDL_STRING*)(data + IDL_StructTagInfoByName(gdidl_entry_def,
"IN_FIELDS", IDL_MSG_LONGJMP, NULL)), E->in_fields[0]);
@@ -561,7 +561,7 @@
*(IDL_INT*)(data + IDL_StructTagInfoByName(gdidl_entry_def,
"WINDOP", IDL_MSG_LONGJMP, NULL)) = E->windop;
IDL_StrStore((IDL_STRING*)(data + IDL_StructTagInfoByName(gdidl_entry_def,
- "CHECK", IDL_MSG_LONGJMP, NULL)), E->in_fields[1]);
+ "IN_FIELDS", IDL_MSG_LONGJMP, NULL)) + 1, E->in_fields[1]);
switch (E->windop) {
case GD_WINDOP_EQ:
@@ -586,6 +586,24 @@
"SCALAR_IND", IDL_MSG_LONGJMP, NULL)))[0] = (int16_t)E->scalar_ind[0];
break;
+ case GD_MPLEX_ENTRY:
+ IDL_StrStore((IDL_STRING*)(data + IDL_StructTagInfoByName(gdidl_entry_def,
+ "IN_FIELDS", IDL_MSG_LONGJMP, NULL)) + 1, E->in_fields[1]);
+
+ *(IDL_UINT*)(data + IDL_StructTagInfoByName(gdidl_entry_def,
+ "COUNT_VAL", IDL_MSG_LONGJMP, NULL)) = E->count_val;
+ *(IDL_UINT*)(data + IDL_StructTagInfoByName(gdidl_entry_def,
+ "COUNT_MAX", IDL_MSG_LONGJMP, NULL)) = E->count_max;
+
+ IDL_StrStore((IDL_STRING*)(data + IDL_StructTagInfoByName(gdidl_entry_def,
+ "SCALAR", IDL_MSG_LONGJMP, NULL)), E->scalar[0]);
+ ((int16_t*)(data + IDL_StructTagInfoByName(gdidl_entry_def,
+ "SCALAR_IND", IDL_MSG_LONGJMP, NULL)))[0] = (int16_t)E->scalar_ind[0];
+ IDL_StrStore((IDL_STRING*)(data + IDL_StructTagInfoByName(gdidl_entry_def,
+ "SCALAR", IDL_MSG_LONGJMP, NULL)) + 1, E->scalar[1]);
+ ((int16_t*)(data + IDL_StructTagInfoByName(gdidl_entry_def,
+ "SCALAR_IND", IDL_MSG_LONGJMP, NULL)))[1] = (int16_t)E->scalar_ind[1];
+ break;
case GD_CARRAY_ENTRY:
*(IDL_INT*)(data + IDL_StructTagInfoByName(gdidl_entry_def, "ARRAY_LEN",
IDL_MSG_LONGJMP, NULL)) = E->array_len;
@@ -898,10 +916,10 @@
}
break;
case GD_WINDOW_EN...
[truncated message content] |
|
From: <ket...@us...> - 2012-01-07 04:19:49
|
Revision: 644
http://getdata.svn.sourceforge.net/getdata/?rev=644&view=rev
Author: ketiltrout
Date: 2012-01-07 04:19:42 +0000 (Sat, 07 Jan 2012)
Log Message:
-----------
Fix gd_add_window calls
Modified Paths:
--------------
trunk/getdata/bindings/idl/test/big_test.pro
Modified: trunk/getdata/bindings/idl/test/big_test.pro
===================================================================
--- trunk/getdata/bindings/idl/test/big_test.pro 2011-12-31 03:33:37 UTC (rev 643)
+++ trunk/getdata/bindings/idl/test/big_test.pro 2012-01-07 04:19:42 UTC (rev 644)
@@ -1185,7 +1185,7 @@
nume += check_simple2(211, 6, n.rthreshold, 4.1D0)
; 212: gd_add_window check
-gd_add_window, d, 'new18', 'in1', 'in2', /NE, threshold=32, fragment=0
+gd_add_window, d, 'new18', 'in1', 'in2', /NE, 32, fragment=0
nume += check_ok2(212, 1, d)
n = gd_entry(d, 'new18')
@@ -1198,7 +1198,7 @@
nume += check_simple2(212, 6, n.ithreshold, 32)
; 214: gd_madd_window check
-gd_add_window, d, parent='data', 'mnew18', 'in2', 'in3', /SET, threshold=128
+gd_add_window, d, parent='data', 'mnew18', 'in2', 'in3', /SET, 128
nume += check_ok2(214, 1, d)
n = gd_entry(d, 'data/mnew18')
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2011-12-31 03:33:44
|
Revision: 643
http://getdata.svn.sourceforge.net/getdata/?rev=643&view=rev
Author: ketiltrout
Date: 2011-12-31 03:33:37 +0000 (Sat, 31 Dec 2011)
Log Message:
-----------
Fix bugs.
Modified Paths:
--------------
trunk/getdata/ChangeLog
trunk/getdata/bindings/python/pyentry.c
trunk/getdata/bindings/python/test/big_test.py
trunk/getdata/src/internal.h
trunk/getdata/test/zzip_get.c
trunk/getdata/test/zzip_nframes.c
Modified: trunk/getdata/ChangeLog
===================================================================
--- trunk/getdata/ChangeLog 2011-12-28 20:11:54 UTC (rev 642)
+++ trunk/getdata/ChangeLog 2011-12-31 03:33:37 UTC (rev 643)
@@ -1,3 +1,6 @@
+2011-12-31 D. V. Wiebe <ge...@ke...> svn:643
+ * bindings/python/pyentry.c (gdpy_set_entry_from_dict): Add missing INCREF.
+
2011-12-29 D. V. Wiebe <ge...@ke...> svn:641
* src/internal.h src/encoding.c (_GD_GenericName): Added fragment->enc_data.
Pass enc_data to gd_ef->name. Flag encodings that use enc_data with
Modified: trunk/getdata/bindings/python/pyentry.c
===================================================================
--- trunk/getdata/bindings/python/pyentry.c 2011-12-28 20:11:54 UTC (rev 642)
+++ trunk/getdata/bindings/python/pyentry.c 2011-12-31 03:33:37 UTC (rev 643)
@@ -557,6 +557,7 @@
return;
}
+ Py_INCREF(o);
PyTuple_SET_ITEM(tuple, i, o);
}
}
@@ -805,7 +806,6 @@
case GD_POLYNOM_ENTRY:
case GD_SBIT_ENTRY:
case GD_RECIP_ENTRY:
- case GD_WINDOW_ENTRY:
if (!PyTuple_Check(value))
s[0] = gdpy_dup_pystring(value);
else {
@@ -828,6 +828,7 @@
break;
case GD_MULTIPLY_ENTRY:
case GD_DIVIDE_ENTRY:
+ case GD_WINDOW_ENTRY:
if (!PyTuple_Check(value)) {
PyErr_SetString(PyExc_TypeError, "'pygetdata.entry' "
"attribute 'in_fields' must be a tuple");
Modified: trunk/getdata/bindings/python/test/big_test.py
===================================================================
--- trunk/getdata/bindings/python/test/big_test.py 2011-12-28 20:11:54 UTC (rev 642)
+++ trunk/getdata/bindings/python/test/big_test.py 2011-12-31 03:33:37 UTC (rev 643)
@@ -1791,7 +1791,7 @@
except:
CheckOK(223)
-# 224: GDMOVA check
+# 224: gd_move_alias check
try:
d.move_alias('new20', 1)
except:
Modified: trunk/getdata/src/internal.h
===================================================================
--- trunk/getdata/src/internal.h 2011-12-28 20:11:54 UTC (rev 642)
+++ trunk/getdata/src/internal.h 2011-12-31 03:33:37 UTC (rev 643)
@@ -1117,6 +1117,8 @@
int swap);
/* zzip I/O methods */
+int _GD_ZzipName(DIRFILE*, const char*, struct _gd_raw_file*, const char*, int,
+ int);
int _GD_ZzipOpen(int, struct _gd_raw_file* file, int swap, unsigned int);
off64_t _GD_ZzipSeek(struct _gd_raw_file* file, off64_t count,
gd_type_t data_type, unsigned int);
Modified: trunk/getdata/test/zzip_get.c
===================================================================
--- trunk/getdata/test/zzip_get.c 2011-12-28 20:11:54 UTC (rev 642)
+++ trunk/getdata/test/zzip_get.c 2011-12-31 03:33:37 UTC (rev 643)
@@ -79,7 +79,7 @@
for (i = 0; i < 8; ++i)
CHECKIi(i,c[i], 40 + i);
#else
- CHECKI(error, GD_E_UNSUPPORTED);
+ CHECKI(error, GD_E_UNKNOWN_ENCODING);
CHECKI(n,0);
#endif
Modified: trunk/getdata/test/zzip_nframes.c
===================================================================
--- trunk/getdata/test/zzip_nframes.c 2011-12-28 20:11:54 UTC (rev 642)
+++ trunk/getdata/test/zzip_nframes.c 2011-12-31 03:33:37 UTC (rev 643)
@@ -85,7 +85,7 @@
CHECKI(error, 0);
CHECKI(n, 256);
#else
- CHECKI(error, GD_E_UNSUPPORTED);
+ CHECKI(error, GD_E_UNKNOWN_ENCODING);
CHECKI(n, 0);
#endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2011-12-28 20:12:01
|
Revision: 642
http://getdata.svn.sourceforge.net/getdata/?rev=642&view=rev
Author: ketiltrout
Date: 2011-12-28 20:11:54 +0000 (Wed, 28 Dec 2011)
Log Message:
-----------
Add test.
Modified Paths:
--------------
trunk/getdata/ChangeLog
Added Paths:
-----------
trunk/getdata/test/zzip_data.c
Property Changed:
----------------
trunk/getdata/test/
Modified: trunk/getdata/ChangeLog
===================================================================
--- trunk/getdata/ChangeLog 2011-12-28 20:10:05 UTC (rev 641)
+++ trunk/getdata/ChangeLog 2011-12-28 20:11:54 UTC (rev 642)
@@ -1,4 +1,4 @@
-2011-12-29 D. V. Wiebe <ge...@ke...> svn:640
+2011-12-29 D. V. Wiebe <ge...@ke...> svn:641
* src/internal.h src/encoding.c (_GD_GenericName): Added fragment->enc_data.
Pass enc_data to gd_ef->name. Flag encodings that use enc_data with
GD_EF_EDAT.
Property changes on: trunk/getdata/test
___________________________________________________________________
Modified: svn:ignore
- Makefile
Makefile.in
*.o
*.odirfile
*.swp
*.exe
.deps
.libs
add
add_affix
add_alias
add_bit
add_bit_bitnum
add_bit_bitsize
add_bit_invalid
add_bit_numbits
add_carray
add_clincom
add_code
add_const
add_cpolynom
add_crecip
add_crecip89
add_divide
add_divide_invalid
add_duplicate
add_format
add_invalid
add_lincom
add_lincom_invalid
add_lincom_nfields
add_linterp
add_linterp_invalid
add_multiply
add_multiply_invalid
add_phase
add_phase_invalid
add_polynom
add_protect
add_raw
add_raw_include
add_raw_invalid
add_raw_spf
add_raw_type
add_rdonly
add_recip
add_resolv
add_sbit
add_scalar
add_scalar_carray
add_sort
add_spec
add_spec_directive
add_spec_invalid
add_spec_meta
add_spec_resolv
add_string
add_string_affix
add_type
add_window
add_window_op
alias_list
alias_list_alias
alias_list_missing
alias_num
alias_num_alias
alias_num_missing
alias_target
alias_target_alias
alias_target_missing
alter_bit_bitnum
alter_bit_numbits
alter_carray_len
alter_carray_type
alter_const
alter_cpolynom
alter_crecip
alter_crecip89
alter_crecip_zero
alter_divide
alter_entry
alter_entry_affix
alter_entry_hidden
alter_entry_recode
alter_entry_scalar2a
alter_entry_scalar2n
alter_entry_scalar3
alter_entry_scalar4
alter_lincom_23
alter_lincom_32
alter_lincom_input
alter_lincom_offset
alter_lincom_slope
alter_linterp
alter_linterp_move
alter_mspec
alter_mspec_affix
alter_multiply
alter_phase
alter_polynom_coeff
alter_polynom_input
alter_polynom_ord
alter_raw_spf
alter_raw_type
alter_recip
alter_recip_zero
alter_spec
alter_spec_affix
alter_spec_meta
alter_window
ascii_add
ascii_get
ascii_get_get
ascii_nframes
ascii_put
bof
bof_lincom
bof_phase
bzip_get
bzip_get_get
bzip_move_from
bzip_nframes
bzip_put
close
close_bad
close_discard
close_null
convert_complex128_complex64
convert_complex128_float64
convert_complex128_int64
convert_complex128_uint64
convert_complex64_complex128
convert_complex64_float64
convert_complex64_int64
convert_complex64_uint64
convert_float32_complex128
convert_float32_complex64
convert_float32_float64
convert_float32_int16
convert_float32_int32
convert_float32_int64
convert_float32_int8
convert_float32_uint16
convert_float32_uint32
convert_float32_uint64
convert_float32_uint8
convert_float64_complex128
convert_float64_complex64
convert_float64_float32
convert_float64_int16
convert_float64_int32
convert_float64_int64
convert_float64_int8
convert_float64_uint16
convert_float64_uint32
convert_float64_uint64
convert_float64_uint8
convert_int16_complex128
convert_int16_complex64
convert_int16_float32
convert_int16_float64
convert_int16_int32
convert_int16_int64
convert_int16_int8
convert_int16_uint16
convert_int16_uint32
convert_int16_uint64
convert_int16_uint8
convert_int32_complex128
convert_int32_complex64
convert_int32_float32
convert_int32_float64
convert_int32_int16
convert_int32_int64
convert_int32_int8
convert_int32_uint16
convert_int32_uint32
convert_int32_uint64
convert_int32_uint8
convert_int64_complex128
convert_int64_complex64
convert_int64_float32
convert_int64_float64
convert_int64_int16
convert_int64_int32
convert_int64_int8
convert_int64_uint16
convert_int64_uint32
convert_int64_uint64
convert_int64_uint8
convert_int8_complex128
convert_int8_complex64
convert_int8_float32
convert_int8_float64
convert_int8_int16
convert_int8_int32
convert_int8_int64
convert_int8_uint16
convert_int8_uint32
convert_int8_uint64
convert_int8_uint8
convert_uint16_complex128
convert_uint16_complex64
convert_uint16_float32
convert_uint16_float64
convert_uint16_int16
convert_uint16_int32
convert_uint16_int64
convert_uint16_int8
convert_uint16_uint32
convert_uint16_uint64
convert_uint16_uint8
convert_uint32_complex128
convert_uint32_complex64
convert_uint32_float32
convert_uint32_float64
convert_uint32_int16
convert_uint32_int32
convert_uint32_int64
convert_uint32_int8
convert_uint32_uint16
convert_uint32_uint64
convert_uint32_uint8
convert_uint64_complex128
convert_uint64_complex64
convert_uint64_float32
convert_uint64_float64
convert_uint64_int16
convert_uint64_int32
convert_uint64_int64
convert_uint64_int8
convert_uint64_uint16
convert_uint64_uint32
convert_uint64_uint8
convert_uint8_complex128
convert_uint8_complex64
convert_uint8_float32
convert_uint8_float64
convert_uint8_int16
convert_uint8_int32
convert_uint8_int64
convert_uint8_int8
convert_uint8_uint16
convert_uint8_uint32
convert_uint8_uint64
creat
creat_excl
creat_rdonly
cvlist
cvlist_array
cvlist_array_hidden
cvlist_array_meta
cvlist_array_meta_hidden
cvlist_hidden
cvlist_invalid
cvlist_meta
cvlist_meta_hidden
cvlist_meta_invalid
del
del_carray
del_carray_deref
del_const
del_const_deref
del_const_force
del_data
del_derived
del_derived_after
del_derived_force
del_meta
del_meta_force
dfes_bit
dfes_divide
dfes_lincom
dfes_linterp
dfes_multiply
dfes_null
dfes_phase
dfes_raw
dfes_recip
dfes_zero
encode_alter
encode_get
encode_move
endian_alter
endian_alter_sie
endian_get
endian_move
entry_bad_code
entry_bit
entry_bit_scalar
entry_divide
entry_invalid
entry_lincom
entry_lincom_scalar
entry_linterp
entry_multiply
entry_phase
entry_phase_scalar
entry_polynom
entry_polynom_scalar
entry_raw
entry_raw_scalar
entry_raw_scalar_code
entry_raw_scalar_type
entry_recip
entry_scalar_repr
entry_type
entry_type_alias
entry_window
entry_window_scalar
eof
eof_index
eof_lincom
eof_phase
error
error_error
error_num
error_short
file
file_code
file_type
flist
flist_hidden
flist_invalid
flist_meta
flist_meta_hidden
flist_meta_invalid
flist_type
flist_type_hidden
flist_type_invalid
flist_type_meta
flist_type_meta_hidden
flist_type_meta_invalid
flush
flush_all
flush_bad_code
flush_invalid
flush_meta
flush_spec
foffs_alter
foffs_get
foffs_move
fragment_affix
fragment_affix_alter
fragment_affix_alter2
fragment_affix_dup
fragment_index
fragment_index_alias
fragment_name
fragment_name_oor
fragment_num
fragment_parent
get64
get_bad_code
get_bit
get_carray
get_carray_len
get_carray_slice
get_char
get_clincom
get_complex128
get_complex64
get_const
get_const_complex
get_const_repr
get_cpolynom
get_divide
get_endian16
get_endian32
get_endian64
get_endian8
get_endian_complex128_arm
get_endian_complex128_big
get_endian_complex128_little
get_endian_complex64_arm
get_endian_complex64_big
get_endian_complex64_little
get_endian_float32_arm
get_endian_float32_big
get_endian_float32_little
get_endian_float64_arm
get_endian_float64_big
get_endian_float64_little
get_ff
get_float32
get_float64
get_foffs
get_fs
get_here
get_here_foffs
get_heres
get_int16
get_int32
get_int64
get_int8
get_invalid
get_lincom1
get_lincom2
get_lincom3
get_lincom_noin
get_lincom_non
get_linterp
get_linterp_noin
get_linterp_notab
get_linterp_sort
get_multiply
get_multiply_noin
get_nonexistent
get_null
get_off64
get_phase
get_phase_affix
get_polynom
get_polynom_noin
get_recip
get_recip_const
get_recurse
get_rofs
get_sbit
get_sf
get_ss
get_type
get_uint16
get_uint32
get_uint64
get_window
get_window_clr
get_window_ge
get_window_gt
get_window_le
get_window_lt
get_window_ne
get_window_set
get_zero
global_name
global_ref
global_ref_empty
global_ref_set
gzip_add
gzip_get
gzip_get_get
gzip_get_put
gzip_move_from
gzip_move_to
gzip_nframes
gzip_put
gzip_put_get
header_complex
hide
hide_hidden
hide_unhide
include
include_accmode
include_affix
include_auto
include_cb
include_creat
include_ignore
include_index
include_invalid
include_nonexistent
include_pc
include_ref
include_syntax
index
index_domain
index_range
legacy_get
legacy_get_put
legacy_get_rofs
legacy_nframes
legacy_nonexistent
legacy_put
legacy_spf
lzma_get
lzma_nframes
madd
madd_affix
madd_alias
madd_bit
madd_bit_invalid
madd_carray
madd_clincom
madd_const
madd_cpolynom
madd_crecip
madd_crecip89
madd_divide
madd_index
madd_lincom
madd_lincom_invalid
madd_linterp
madd_linterp_invalid
madd_multiply
madd_multiply_invalid
madd_phase
madd_phase_invalid
madd_polynom
madd_recip
madd_sbit
madd_spec
madd_spec_directive
madd_spec_invalid
madd_spec_resolv
madd_string
madd_window
move
move_affix
move_affix_dup
move_alias
move_data_enc_ar
move_data_enc_ra
move_data_endian
move_data_foffs
move_data_nop
move_index
move_meta
move_protect
move_subdir
name
name_affix
name_affix_bad
name_after
name_after_const
name_dup
name_move
name_update
name_update_const
nfields
nfields_hidden
nfields_invalid
nfields_type
nfields_type_hidden
nfields_type_invalid
nfields_vector
nfields_vector_hidden
nfields_vector_invalid
nframes
nframes64
nframes_empty
nframes_invalid
nframes_off64
nframes_spf
nmeta
nmeta_hidden
nmeta_invalid
nmeta_parent
nmeta_type
nmeta_type_hidden
nmeta_type_invalid
nmeta_type_parent
nmeta_vectors
nmeta_vectors_del
nmeta_vectors_hidden
nmeta_vectors_invalid
nmeta_vectors_parent
open
open_cb_abort
open_cb_cont
open_cb_ignore
open_cb_invalid
open_cb_rescan
open_eaccess
open_nonexistent
open_notdirfile
parse_alias
parse_alias_code
parse_alias_dup
parse_alias_meta
parse_alias_missing
parse_badline
parse_bit
parse_bit4
parse_bit_bitnum
parse_bit_bitsize
parse_bit_ncols
parse_bit_numbits
parse_bit_scalar
parse_carray
parse_carray_long
parse_const
parse_const_ncols
parse_divide
parse_duplicate
parse_duplicate_ignore
parse_endian_bad
parse_endian_big
parse_endian_force
parse_endian_little
parse_endian_slash
parse_eol
parse_foffs
parse_foffs_include
parse_foffs_slash
parse_hidden
parse_hidden_field
parse_hidden_meta
parse_include
parse_include_absolute
parse_include_absrel
parse_include_loop
parse_include_nonexistent
parse_include_prefix
parse_include_prefix_dup
parse_include_preprefix
parse_include_relabs
parse_include_relrel
parse_include_slash
parse_include_suffix
parse_include_sufsuffix
parse_index
parse_lincom
parse_lincom_ncols1
parse_lincom_ncols2
parse_lincom_nfields
parse_lincom_nofields
parse_lincom_non
parse_lincom_non_ncols
parse_lincom_scalar
parse_linterp
parse_linterp_ncols
parse_malias
parse_malias_dup
parse_meta
parse_meta_affix
parse_meta_alias
parse_meta_implicit
parse_meta_implicit2
parse_meta_implicit_affix
parse_meta_index
parse_meta_index2
parse_meta_jump
parse_meta_malias
parse_meta_meta
parse_meta_parent
parse_meta_raw
parse_multiply
parse_multiply_ncols
parse_name
parse_name_dot
parse_name_ext
parse_name_pedantic
parse_ncols
parse_phase
parse_phase_ncols
parse_phase_scalar
parse_polynom
parse_polynom_ncols1
parse_polynom_ncols2
parse_polynom_scalar
parse_protect_all
parse_protect_bad
parse_protect_data
parse_protect_format
parse_protect_none
parse_quote
parse_quote_mismatch
parse_raw
parse_raw_char
parse_raw_ncols
parse_raw_scalar
parse_raw_spf
parse_raw_type
parse_recip
parse_ref
parse_ref_nonexistent
parse_sbit
parse_sort
parse_string
parse_string_ncols
parse_string_null
parse_version
parse_version_89
parse_version_98
parse_version_include
parse_version_p8
parse_version_p9
parse_version_permissive
parse_version_slash
parse_whitespace
parse_window
parse_window_ncols
parse_window_op
parse_window_scalar
protect_alter
protect_get
put64
put_bad_code
put_bit
put_bof
put_carray
put_carray_slice
put_char
put_complex128
put_complex64
put_const
put_const_protect
put_divide
put_endian16
put_endian32
put_endian64
put_endian8
put_endian_complex128_arm
put_endian_complex128_big
put_endian_complex128_little
put_endian_complex64_arm
put_endian_complex64_big
put_endian_complex64_little
put_endian_float32_arm
put_endian_float32_big
put_endian_float32_little
put_endian_float64_arm
put_endian_float64_big
put_endian_float64_little
put_ff
put_float32
put_float64
put_foffs
put_fs
put_here
put_heres
put_int16
put_int32
put_int64
put_int8
put_invalid
put_lincom1
put_lincom2
put_lincom_noin
put_linterp
put_linterp_noin
put_linterp_nomono
put_linterp_notab
put_linterp_reverse
put_multiply
put_null
put_off64
put_phase
put_phase_noin
put_polynom1
put_polynom2
put_polynom_noin
put_protect
put_rdonly
put_recip
put_recurse
put_repr
put_rofs
put_sbit
put_sf
put_ss
put_string
put_string_protect
put_type
put_uint16
put_uint32
put_uint64
put_window
ref
ref_none
ref_two
repr_a
repr_float32
repr_float64
repr_i
repr_int16
repr_int32
repr_int64
repr_int8
repr_m
repr_r
repr_real_a
repr_real_i
repr_real_m
repr_real_r
repr_uint16
repr_uint32
repr_uint64
repr_uint8
seek64
seek_cur
seek_end
seek_foffs
seek_set
sie_get_big
sie_get_little
sie_move_from
sie_move_to
sie_nframes_big
sie_nframes_little
sie_put_big
sie_put_little
slim_get
slim_nframes
slim_put
spf
spf_alias
spf_alias_meta
spf_alias_missing
spf_divide
spf_lincom
spf_multiply
spf_polynom
spf_recip
spf_recurse
svlist
svlist_hidden
svlist_invalid
svlist_meta
svlist_meta_hidden
svlist_meta_invalid
tell
tell64
trunc
trunc_rdonly
trunc_rofs
unclude
unclude_del
unclude_move
version_0
version_0_write
version_1
version_1_write
version_2
version_2_write
version_3
version_3_write
version_4
version_4_write
version_5
version_5_strict
version_5_write
version_6
version_6_strict
version_6_write
version_7
version_7_strict
version_7_write
version_8
version_8_strict
version_8_write
version_9
version_9_strict
version_9_write
vlist
vlist_alias
vlist_hidden
vlist_invalid
vlist_meta
vlist_meta_hidden
vlist_meta_invalid
xz_get
xz_nframes
zzip_get
zzip_get_get
zzip_nframes
+ Makefile
Makefile.in
*.o
*.odirfile
*.swp
*.exe
.deps
.libs
add
add_affix
add_alias
add_bit
add_bit_bitnum
add_bit_bitsize
add_bit_invalid
add_bit_numbits
add_carray
add_clincom
add_code
add_const
add_cpolynom
add_crecip
add_crecip89
add_divide
add_divide_invalid
add_duplicate
add_format
add_invalid
add_lincom
add_lincom_invalid
add_lincom_nfields
add_linterp
add_linterp_invalid
add_multiply
add_multiply_invalid
add_phase
add_phase_invalid
add_polynom
add_protect
add_raw
add_raw_include
add_raw_invalid
add_raw_spf
add_raw_type
add_rdonly
add_recip
add_resolv
add_sbit
add_scalar
add_scalar_carray
add_sort
add_spec
add_spec_directive
add_spec_invalid
add_spec_meta
add_spec_resolv
add_string
add_string_affix
add_type
add_window
add_window_op
alias_list
alias_list_alias
alias_list_missing
alias_num
alias_num_alias
alias_num_missing
alias_target
alias_target_alias
alias_target_missing
alter_bit_bitnum
alter_bit_numbits
alter_carray_len
alter_carray_type
alter_const
alter_cpolynom
alter_crecip
alter_crecip89
alter_crecip_zero
alter_divide
alter_entry
alter_entry_affix
alter_entry_hidden
alter_entry_recode
alter_entry_scalar2a
alter_entry_scalar2n
alter_entry_scalar3
alter_entry_scalar4
alter_lincom_23
alter_lincom_32
alter_lincom_input
alter_lincom_offset
alter_lincom_slope
alter_linterp
alter_linterp_move
alter_mspec
alter_mspec_affix
alter_multiply
alter_phase
alter_polynom_coeff
alter_polynom_input
alter_polynom_ord
alter_raw_spf
alter_raw_type
alter_recip
alter_recip_zero
alter_spec
alter_spec_affix
alter_spec_meta
alter_window
ascii_add
ascii_get
ascii_get_get
ascii_nframes
ascii_put
bof
bof_lincom
bof_phase
bzip_get
bzip_get_get
bzip_move_from
bzip_nframes
bzip_put
close
close_bad
close_discard
close_null
convert_complex128_complex64
convert_complex128_float64
convert_complex128_int64
convert_complex128_uint64
convert_complex64_complex128
convert_complex64_float64
convert_complex64_int64
convert_complex64_uint64
convert_float32_complex128
convert_float32_complex64
convert_float32_float64
convert_float32_int16
convert_float32_int32
convert_float32_int64
convert_float32_int8
convert_float32_uint16
convert_float32_uint32
convert_float32_uint64
convert_float32_uint8
convert_float64_complex128
convert_float64_complex64
convert_float64_float32
convert_float64_int16
convert_float64_int32
convert_float64_int64
convert_float64_int8
convert_float64_uint16
convert_float64_uint32
convert_float64_uint64
convert_float64_uint8
convert_int16_complex128
convert_int16_complex64
convert_int16_float32
convert_int16_float64
convert_int16_int32
convert_int16_int64
convert_int16_int8
convert_int16_uint16
convert_int16_uint32
convert_int16_uint64
convert_int16_uint8
convert_int32_complex128
convert_int32_complex64
convert_int32_float32
convert_int32_float64
convert_int32_int16
convert_int32_int64
convert_int32_int8
convert_int32_uint16
convert_int32_uint32
convert_int32_uint64
convert_int32_uint8
convert_int64_complex128
convert_int64_complex64
convert_int64_float32
convert_int64_float64
convert_int64_int16
convert_int64_int32
convert_int64_int8
convert_int64_uint16
convert_int64_uint32
convert_int64_uint64
convert_int64_uint8
convert_int8_complex128
convert_int8_complex64
convert_int8_float32
convert_int8_float64
convert_int8_int16
convert_int8_int32
convert_int8_int64
convert_int8_uint16
convert_int8_uint32
convert_int8_uint64
convert_int8_uint8
convert_uint16_complex128
convert_uint16_complex64
convert_uint16_float32
convert_uint16_float64
convert_uint16_int16
convert_uint16_int32
convert_uint16_int64
convert_uint16_int8
convert_uint16_uint32
convert_uint16_uint64
convert_uint16_uint8
convert_uint32_complex128
convert_uint32_complex64
convert_uint32_float32
convert_uint32_float64
convert_uint32_int16
convert_uint32_int32
convert_uint32_int64
convert_uint32_int8
convert_uint32_uint16
convert_uint32_uint64
convert_uint32_uint8
convert_uint64_complex128
convert_uint64_complex64
convert_uint64_float32
convert_uint64_float64
convert_uint64_int16
convert_uint64_int32
convert_uint64_int64
convert_uint64_int8
convert_uint64_uint16
convert_uint64_uint32
convert_uint64_uint8
convert_uint8_complex128
convert_uint8_complex64
convert_uint8_float32
convert_uint8_float64
convert_uint8_int16
convert_uint8_int32
convert_uint8_int64
convert_uint8_int8
convert_uint8_uint16
convert_uint8_uint32
convert_uint8_uint64
creat
creat_excl
creat_rdonly
cvlist
cvlist_array
cvlist_array_hidden
cvlist_array_meta
cvlist_array_meta_hidden
cvlist_hidden
cvlist_invalid
cvlist_meta
cvlist_meta_hidden
cvlist_meta_invalid
del
del_carray
del_carray_deref
del_const
del_const_deref
del_const_force
del_data
del_derived
del_derived_after
del_derived_force
del_meta
del_meta_force
dfes_bit
dfes_divide
dfes_lincom
dfes_linterp
dfes_multiply
dfes_null
dfes_phase
dfes_raw
dfes_recip
dfes_zero
encode_alter
encode_get
encode_move
endian_alter
endian_alter_sie
endian_get
endian_move
entry_bad_code
entry_bit
entry_bit_scalar
entry_divide
entry_invalid
entry_lincom
entry_lincom_scalar
entry_linterp
entry_multiply
entry_phase
entry_phase_scalar
entry_polynom
entry_polynom_scalar
entry_raw
entry_raw_scalar
entry_raw_scalar_code
entry_raw_scalar_type
entry_recip
entry_scalar_repr
entry_type
entry_type_alias
entry_window
entry_window_scalar
eof
eof_index
eof_lincom
eof_phase
error
error_error
error_num
error_short
file
file_code
file_type
flist
flist_hidden
flist_invalid
flist_meta
flist_meta_hidden
flist_meta_invalid
flist_type
flist_type_hidden
flist_type_invalid
flist_type_meta
flist_type_meta_hidden
flist_type_meta_invalid
flush
flush_all
flush_bad_code
flush_invalid
flush_meta
flush_spec
foffs_alter
foffs_get
foffs_move
fragment_affix
fragment_affix_alter
fragment_affix_alter2
fragment_affix_dup
fragment_index
fragment_index_alias
fragment_name
fragment_name_oor
fragment_num
fragment_parent
get64
get_bad_code
get_bit
get_carray
get_carray_len
get_carray_slice
get_char
get_clincom
get_complex128
get_complex64
get_const
get_const_complex
get_const_repr
get_cpolynom
get_divide
get_endian16
get_endian32
get_endian64
get_endian8
get_endian_complex128_arm
get_endian_complex128_big
get_endian_complex128_little
get_endian_complex64_arm
get_endian_complex64_big
get_endian_complex64_little
get_endian_float32_arm
get_endian_float32_big
get_endian_float32_little
get_endian_float64_arm
get_endian_float64_big
get_endian_float64_little
get_ff
get_float32
get_float64
get_foffs
get_fs
get_here
get_here_foffs
get_heres
get_int16
get_int32
get_int64
get_int8
get_invalid
get_lincom1
get_lincom2
get_lincom3
get_lincom_noin
get_lincom_non
get_linterp
get_linterp_noin
get_linterp_notab
get_linterp_sort
get_multiply
get_multiply_noin
get_nonexistent
get_null
get_off64
get_phase
get_phase_affix
get_polynom
get_polynom_noin
get_recip
get_recip_const
get_recurse
get_rofs
get_sbit
get_sf
get_ss
get_type
get_uint16
get_uint32
get_uint64
get_window
get_window_clr
get_window_ge
get_window_gt
get_window_le
get_window_lt
get_window_ne
get_window_set
get_zero
global_name
global_ref
global_ref_empty
global_ref_set
gzip_add
gzip_get
gzip_get_get
gzip_get_put
gzip_move_from
gzip_move_to
gzip_nframes
gzip_put
gzip_put_get
header_complex
hide
hide_hidden
hide_unhide
include
include_accmode
include_affix
include_auto
include_cb
include_creat
include_ignore
include_index
include_invalid
include_nonexistent
include_pc
include_ref
include_syntax
index
index_domain
index_range
legacy_get
legacy_get_put
legacy_get_rofs
legacy_nframes
legacy_nonexistent
legacy_put
legacy_spf
lzma_get
lzma_nframes
madd
madd_affix
madd_alias
madd_bit
madd_bit_invalid
madd_carray
madd_clincom
madd_const
madd_cpolynom
madd_crecip
madd_crecip89
madd_divide
madd_index
madd_lincom
madd_lincom_invalid
madd_linterp
madd_linterp_invalid
madd_multiply
madd_multiply_invalid
madd_phase
madd_phase_invalid
madd_polynom
madd_recip
madd_sbit
madd_spec
madd_spec_directive
madd_spec_invalid
madd_spec_resolv
madd_string
madd_window
move
move_affix
move_affix_dup
move_alias
move_data_enc_ar
move_data_enc_ra
move_data_endian
move_data_foffs
move_data_nop
move_index
move_meta
move_protect
move_subdir
name
name_affix
name_affix_bad
name_after
name_after_const
name_dup
name_move
name_update
name_update_const
nfields
nfields_hidden
nfields_invalid
nfields_type
nfields_type_hidden
nfields_type_invalid
nfields_vector
nfields_vector_hidden
nfields_vector_invalid
nframes
nframes64
nframes_empty
nframes_invalid
nframes_off64
nframes_spf
nmeta
nmeta_hidden
nmeta_invalid
nmeta_parent
nmeta_type
nmeta_type_hidden
nmeta_type_invalid
nmeta_type_parent
nmeta_vectors
nmeta_vectors_del
nmeta_vectors_hidden
nmeta_vectors_invalid
nmeta_vectors_parent
open
open_cb_abort
open_cb_cont
open_cb_ignore
open_cb_invalid
open_cb_rescan
open_eaccess
open_nonexistent
open_notdirfile
parse_alias
parse_alias_code
parse_alias_dup
parse_alias_meta
parse_alias_missing
parse_badline
parse_bit
parse_bit4
parse_bit_bitnum
parse_bit_bitsize
parse_bit_ncols
parse_bit_numbits
parse_bit_scalar
parse_carray
parse_carray_long
parse_const
parse_const_ncols
parse_divide
parse_duplicate
parse_duplicate_ignore
parse_endian_bad
parse_endian_big
parse_endian_force
parse_endian_little
parse_endian_slash
parse_eol
parse_foffs
parse_foffs_include
parse_foffs_slash
parse_hidden
parse_hidden_field
parse_hidden_meta
parse_include
parse_include_absolute
parse_include_absrel
parse_include_loop
parse_include_nonexistent
parse_include_prefix
parse_include_prefix_dup
parse_include_preprefix
parse_include_relabs
parse_include_relrel
parse_include_slash
parse_include_suffix
parse_include_sufsuffix
parse_index
parse_lincom
parse_lincom_ncols1
parse_lincom_ncols2
parse_lincom_nfields
parse_lincom_nofields
parse_lincom_non
parse_lincom_non_ncols
parse_lincom_scalar
parse_linterp
parse_linterp_ncols
parse_malias
parse_malias_dup
parse_meta
parse_meta_affix
parse_meta_alias
parse_meta_implicit
parse_meta_implicit2
parse_meta_implicit_affix
parse_meta_index
parse_meta_index2
parse_meta_jump
parse_meta_malias
parse_meta_meta
parse_meta_parent
parse_meta_raw
parse_multiply
parse_multiply_ncols
parse_name
parse_name_dot
parse_name_ext
parse_name_pedantic
parse_ncols
parse_phase
parse_phase_ncols
parse_phase_scalar
parse_polynom
parse_polynom_ncols1
parse_polynom_ncols2
parse_polynom_scalar
parse_protect_all
parse_protect_bad
parse_protect_data
parse_protect_format
parse_protect_none
parse_quote
parse_quote_mismatch
parse_raw
parse_raw_char
parse_raw_ncols
parse_raw_scalar
parse_raw_spf
parse_raw_type
parse_recip
parse_ref
parse_ref_nonexistent
parse_sbit
parse_sort
parse_string
parse_string_ncols
parse_string_null
parse_version
parse_version_89
parse_version_98
parse_version_include
parse_version_p8
parse_version_p9
parse_version_permissive
parse_version_slash
parse_whitespace
parse_window
parse_window_ncols
parse_window_op
parse_window_scalar
protect_alter
protect_get
put64
put_bad_code
put_bit
put_bof
put_carray
put_carray_slice
put_char
put_complex128
put_complex64
put_const
put_const_protect
put_divide
put_endian16
put_endian32
put_endian64
put_endian8
put_endian_complex128_arm
put_endian_complex128_big
put_endian_complex128_little
put_endian_complex64_arm
put_endian_complex64_big
put_endian_complex64_little
put_endian_float32_arm
put_endian_float32_big
put_endian_float32_little
put_endian_float64_arm
put_endian_float64_big
put_endian_float64_little
put_ff
put_float32
put_float64
put_foffs
put_fs
put_here
put_heres
put_int16
put_int32
put_int64
put_int8
put_invalid
put_lincom1
put_lincom2
put_lincom_noin
put_linterp
put_linterp_noin
put_linterp_nomono
put_linterp_notab
put_linterp_reverse
put_multiply
put_null
put_off64
put_phase
put_phase_noin
put_polynom1
put_polynom2
put_polynom_noin
put_protect
put_rdonly
put_recip
put_recurse
put_repr
put_rofs
put_sbit
put_sf
put_ss
put_string
put_string_protect
put_type
put_uint16
put_uint32
put_uint64
put_window
ref
ref_none
ref_two
repr_a
repr_float32
repr_float64
repr_i
repr_int16
repr_int32
repr_int64
repr_int8
repr_m
repr_r
repr_real_a
repr_real_i
repr_real_m
repr_real_r
repr_uint16
repr_uint32
repr_uint64
repr_uint8
seek64
seek_cur
seek_end
seek_foffs
seek_set
sie_get_big
sie_get_little
sie_move_from
sie_move_to
sie_nframes_big
sie_nframes_little
sie_put_big
sie_put_little
slim_get
slim_nframes
slim_put
spf
spf_alias
spf_alias_meta
spf_alias_missing
spf_divide
spf_lincom
spf_multiply
spf_polynom
spf_recip
spf_recurse
svlist
svlist_hidden
svlist_invalid
svlist_meta
svlist_meta_hidden
svlist_meta_invalid
tell
tell64
trunc
trunc_rdonly
trunc_rofs
unclude
unclude_del
unclude_move
version_0
version_0_write
version_1
version_1_write
version_2
version_2_write
version_3
version_3_write
version_4
version_4_write
version_5
version_5_strict
version_5_write
version_6
version_6_strict
version_6_write
version_7
version_7_strict
version_7_write
version_8
version_8_strict
version_8_write
version_9
version_9_strict
version_9_write
vlist
vlist_alias
vlist_hidden
vlist_invalid
vlist_meta
vlist_meta_hidden
vlist_meta_invalid
xz_get
xz_nframes
zzip_data
zzip_get
zzip_get_get
zzip_nframes
Added: trunk/getdata/test/zzip_data.c
===================================================================
--- trunk/getdata/test/zzip_data.c (rev 0)
+++ trunk/getdata/test/zzip_data.c 2011-12-28 20:11:54 UTC (rev 642)
@@ -0,0 +1,90 @@
+/* Copyright (C) 2011 D. V. Wiebe
+ *
+ ***************************************************************************
+ *
+ * This file is part of the GetData project.
+ *
+ * GetData is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * GetData is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with GetData; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+#include "test.h"
+
+int main(void)
+{
+#ifndef TEST_ZZIP
+ return 77;
+#else
+ const char *filedir = "dirfile";
+ const char *format = "dirfile/format";
+ const char *data = "dirfile/data";
+ const char *testzip = "dirfile/test.zip";
+ const char *format_data =
+ "data RAW UINT16 8\n"
+ "/ENCODING zzip test\n";
+ uint16_t c[8];
+ char command[4096];
+ uint16_t data_data[256];
+ int fd, n, error, i, r = 0;
+ DIRFILE *D;
+
+ memset(c, 0, 8);
+ rmdirfile();
+ mkdir(filedir, 0777);
+
+ for (fd = 0; fd < 256; ++fd)
+ data_data[fd] = (unsigned char)fd;
+
+ fd = open(format, O_CREAT | O_EXCL | O_WRONLY, 0666);
+ write(fd, format_data, strlen(format_data));
+ close(fd);
+
+ fd = open(data, O_CREAT | O_EXCL | O_WRONLY | O_BINARY, 0666);
+ write(fd, data_data, 256 * sizeof(uint16_t));
+ close(fd);
+
+ /* compress */
+ chdir(filedir);
+ snprintf(command, 4096, "%s test data > /dev/null", ZIP);
+ if (gd_system(command))
+ return 1;
+ chdir("..");
+ unlink(data);
+
+#ifdef USE_ZZIP
+ D = gd_open(filedir, GD_RDONLY | GD_VERBOSE);
+#else
+ D = gd_open(filedir, GD_RDONLY);
+#endif
+ n = gd_getdata(D, "data", 5, 0, 1, 0, GD_UINT16, c);
+ error = gd_error(D);
+
+ gd_close(D);
+
+ unlink(testzip);
+ unlink(format);
+ rmdir(filedir);
+
+#ifdef USE_ZZIP
+ CHECKI(error, 0);
+ CHECKI(n, 8);
+ for (i = 0; i < 8; ++i)
+ CHECKIi(i,c[i], 40 + i);
+#else
+ CHECKI(error, GD_E_UNSUPPORTED);
+ CHECKI(n,0);
+#endif
+
+ return r;
+#endif
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2011-12-28 20:10:12
|
Revision: 641
http://getdata.svn.sourceforge.net/getdata/?rev=641&view=rev
Author: ketiltrout
Date: 2011-12-28 20:10:05 +0000 (Wed, 28 Dec 2011)
Log Message:
-----------
Add an optional second parameter to /ECODING to specify the name of the archive for the zzip encoding.
Modified Paths:
--------------
trunk/getdata/ChangeLog
trunk/getdata/src/close.c
trunk/getdata/src/del.c
trunk/getdata/src/encoding.c
trunk/getdata/src/entry.c
trunk/getdata/src/flimits.c
trunk/getdata/src/include.c
trunk/getdata/src/internal.h
trunk/getdata/src/move.c
trunk/getdata/src/name.c
trunk/getdata/src/nframes.c
trunk/getdata/src/open.c
trunk/getdata/src/parse.c
trunk/getdata/src/zzip.c
trunk/getdata/test/Makefile.am
Modified: trunk/getdata/ChangeLog
===================================================================
--- trunk/getdata/ChangeLog 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/ChangeLog 2011-12-28 20:10:05 UTC (rev 641)
@@ -1,4 +1,13 @@
2011-12-29 D. V. Wiebe <ge...@ke...> svn:640
+ * src/internal.h src/encoding.c (_GD_GenericName): Added fragment->enc_data.
+ Pass enc_data to gd_ef->name. Flag encodings that use enc_data with
+ GD_EF_EDAT.
+ * src/parse.c (_GD_ParseDirective): Allow an optional second parameter to
+ /ENCODING of encoding-specific data.
+ * src/entry.c (_GD_ResolveEncoding): Pass in enc_data.
+ * src/zzip.c (_GD_ZzipName): Use enc_data to specify archive name.
+
+2011-12-29 D. V. Wiebe <ge...@ke...> svn:640
* configure.ac: zzip encoding check.
* src/getdata.h.in src/internal.h: GD_ZZIP_ENCODED / GD_ENC_ZZIP; Added name
to encoding_t.
Modified: trunk/getdata/src/close.c
===================================================================
--- trunk/getdata/src/close.c 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/src/close.c 2011-12-28 20:10:05 UTC (rev 641)
@@ -33,6 +33,7 @@
_GD_FreeE(D, D->entry[i], 1);
for (j = 0; j < D->n_fragment; ++j) {
+ free(D->fragment[j].enc_data);
free(D->fragment[j].prefix);
free(D->fragment[j].suffix);
free(D->fragment[j].bname);
Modified: trunk/getdata/src/del.c
===================================================================
--- trunk/getdata/src/del.c 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/src/del.c 2011-12-28 20:10:05 UTC (rev 641)
@@ -325,7 +325,8 @@
return -1;
}
- if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D, E->e->u.raw.file,
+ if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D,
+ D->fragment[E->fragment_index].enc_data, E->e->u.raw.file,
E->e->u.raw.filebase, 0, 0))
{
free(del_list);
Modified: trunk/getdata/src/encoding.c
===================================================================
--- trunk/getdata/src/encoding.c 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/src/encoding.c 2011-12-28 20:10:05 UTC (rev 641)
@@ -138,7 +138,8 @@
#define GD_INT_FUNCS GD_EF_NULL_SET
#define GD_EF_PROVIDES 0
#endif
- GD_EXT_ENCODING(GD_ZZIP_ENCODED, NULL, GD_EF_ECOR, "Zzip", "zzip"),
+ GD_EXT_ENCODING(GD_ZZIP_ENCODED, NULL, GD_EF_ECOR | GD_EF_EDAT, "Zzip",
+ "zzip"),
#undef GD_INT_FUNCS
#undef GD_EF_PROVIDES
@@ -501,7 +502,9 @@
if (mode & GD_FILE_TEMP) {
/* create temporary file in file[1] */
- if ((*enc->name)(D, E->e->u.raw.file + 1, filebase, 1, 0)) {
+ if ((*enc->name)(D, D->fragment[E->fragment_index].enc_data,
+ E->e->u.raw.file + 1, filebase, 1, 0))
+ {
; /* error already set */
} else if ((temp_fd = _GD_MakeTempFile(D, D->fragment[fragment].dirfd,
E->e->u.raw.file[1].name)) < 0)
@@ -524,7 +527,9 @@
if (oop_write) {
/* an out-of-place write requires us to open a temporary file and pass
* in its fd */
- if ((*enc->name)(D, E->e->u.raw.file + 1, filebase, 1, 0)) {
+ if ((*enc->name)(D, D->fragment[E->fragment_index].enc_data,
+ E->e->u.raw.file + 1, filebase, 1, 0))
+ {
dreturn("%i", 1);
return 1;
} else if ((temp_fd = _GD_MakeTempFile(D,
@@ -545,7 +550,9 @@
/* open a regular file, if necessary */
if (E->e->u.raw.file[0].idata < 0) {
- if ((*enc->name)(D, E->e->u.raw.file, filebase, 0, 0)) {
+ if ((*enc->name)(D, D->fragment[E->fragment_index].enc_data,
+ E->e->u.raw.file, filebase, 0, 0))
+ {
dreturn("%i", 1);
return 1;
} else if ((*enc->open)(D->fragment[E->fragment_index].dirfd,
@@ -570,14 +577,16 @@
/* Figure out the encoding scheme */
static unsigned long _GD_ResolveEncoding(DIRFILE *D, const char* name,
- unsigned long scheme, int dirfd, struct _gd_raw_file *file)
+ const char *enc_data, unsigned long scheme, int dirfd,
+ struct _gd_raw_file *file)
{
char *candidate;
int i;
const size_t len = strlen(name);
struct stat statbuf;
- dtrace("%p, \"%s\", 0x%08lx, %i, %p", D, name, scheme, dirfd, file);
+ dtrace("%p, \"%s\", \"%s\", 0x%08lx, %i, %p", D, name, enc_data, scheme,
+ dirfd, file);
for (i = 0; _gd_ef[i].scheme != GD_ENC_UNSUPPORTED; i++) {
if (scheme == GD_AUTO_ENCODED || scheme == _gd_ef[i].scheme) {
@@ -591,7 +600,7 @@
if (_GD_MissingFramework(i, GD_EF_NAME))
continue;
- if ((*_gd_ef[i].name)(D, file, name, 0, 1))
+ if ((*_gd_ef[i].name)(D, enc_data, file, name, 0, 1))
continue;
candidate = file->name;
@@ -630,7 +639,8 @@
/* Figure out the dirfile encoding type, if required */
if (D->fragment[E->fragment_index].encoding == GD_AUTO_ENCODED) {
D->fragment[E->fragment_index].encoding =
- _GD_ResolveEncoding(D, E->e->u.raw.filebase, GD_AUTO_ENCODED,
+ _GD_ResolveEncoding(D, E->e->u.raw.filebase,
+ D->fragment[E->fragment_index].enc_data, GD_AUTO_ENCODED,
D->fragment[E->fragment_index].dirfd, E->e->u.raw.file);
}
@@ -644,6 +654,7 @@
/* Figure out the encoding subtype, if required */
if (E->e->u.raw.file[0].subenc == GD_ENC_UNKNOWN)
_GD_ResolveEncoding(D, E->e->u.raw.filebase,
+ D->fragment[E->fragment_index].enc_data,
D->fragment[E->fragment_index].encoding,
D->fragment[E->fragment_index].dirfd, E->e->u.raw.file);
@@ -658,10 +669,11 @@
return 1;
}
-int _GD_GenericName(DIRFILE* D, struct _gd_raw_file* file, const char* base,
- int temp, int resolv __gd_unused)
+int _GD_GenericName(DIRFILE* D, const char *enc_data __gd_unused,
+ struct _gd_raw_file* file, const char* base, int temp,
+ int resolv __gd_unused)
{
- dtrace("%p, %p, \"%s\", %i, <unused>", D, file, base, temp);
+ dtrace("%p, <unused>, %p, \"%s\", %i, <unused>", D, file, base, temp);
if (file->name == NULL) {
file->D = D;
@@ -680,6 +692,7 @@
return 0;
}
+/* This function assumes that the new encoding has no fragment->enc_data. */
static void _GD_RecodeFragment(DIRFILE* D, unsigned long encoding, int fragment,
int move)
{
@@ -741,8 +754,10 @@
/* discard the old file */
_GD_FiniRawIO(D, raw_entry[i], fragment, GD_FINIRAW_DISCARD);
- if ((*_gd_ef[temp.subenc].name)(D, raw_entry[i]->e->u.raw.file,
- raw_entry[i]->e->u.raw.filebase, 0, 0))
+ if ((*_gd_ef[temp.subenc].name)(D,
+ D->fragment[raw_entry[i]->fragment_index].enc_data,
+ raw_entry[i]->e->u.raw.file, raw_entry[i]->e->u.raw.filebase, 0,
+ 0))
{
raw_entry[i]->e->u.raw.file[0].name = temp.name;
raw_entry[i]->e->u.raw.file[0].subenc = temp.subenc;
@@ -788,6 +803,8 @@
}
}
+ free(D->fragment[fragment].enc_data);
+ D->fragment[fragment].enc_data = NULL;
D->fragment[fragment].encoding = encoding;
D->fragment[fragment].modified = 1;
D->flags &= ~GD_HAVE_VERSION;
@@ -872,8 +889,8 @@
{
D->fragment[fragment].encoding =
_GD_ResolveEncoding(D, D->entry[i]->e->u.raw.filebase,
- GD_AUTO_ENCODED, D->fragment[fragment].dirfd,
- D->entry[i]->e->u.raw.file);
+ D->fragment[fragment].enc_data, GD_AUTO_ENCODED,
+ D->fragment[fragment].dirfd, D->entry[i]->e->u.raw.file);
if (D->fragment[fragment].encoding != GD_AUTO_ENCODED)
break;
Modified: trunk/getdata/src/entry.c
===================================================================
--- trunk/getdata/src/entry.c 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/src/entry.c 2011-12-28 20:10:05 UTC (rev 641)
@@ -331,7 +331,8 @@
_GD_SetError(D, GD_E_UNKNOWN_ENCODING, GD_E_UNENC_UNDET, NULL, 0, NULL);
dreturn("%p", NULL);
return NULL;
- } else if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D, E->e->u.raw.file,
+ } else if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D,
+ D->fragment[E->fragment_index].enc_data, E->e->u.raw.file,
E->e->u.raw.filebase, 0, 0))
{
dreturn("%p", NULL);
Modified: trunk/getdata/src/flimits.c
===================================================================
--- trunk/getdata/src/flimits.c 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/src/flimits.c 2011-12-28 20:10:05 UTC (rev 641)
@@ -191,7 +191,8 @@
if (!_GD_Supports(D, E, GD_EF_NAME | GD_EF_SIZE))
break;
- if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D, E->e->u.raw.file,
+ if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D,
+ D->fragment[E->fragment_index].enc_data, E->e->u.raw.file,
E->e->u.raw.filebase, 0, 0))
{
break;
Modified: trunk/getdata/src/include.c
===================================================================
--- trunk/getdata/src/include.c 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/src/include.c 2011-12-28 20:10:05 UTC (rev 641)
@@ -208,6 +208,7 @@
D->fragment[D->n_fragment - 1].bname = base;
D->fragment[D->n_fragment - 1].cname = temp_buf1;
D->fragment[D->n_fragment - 1].ename = _GD_Strdup(D, ename);
+ D->fragment[D->n_fragment - 1].enc_data = NULL;
D->fragment[D->n_fragment - 1].modified = 0;
D->fragment[D->n_fragment - 1].parent = me;
D->fragment[D->n_fragment - 1].dirfd = dirfd;
Modified: trunk/getdata/src/internal.h
===================================================================
--- trunk/getdata/src/internal.h 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/src/internal.h 2011-12-28 20:10:05 UTC (rev 641)
@@ -757,8 +757,8 @@
# define SCREWY_FLOATS
#endif
-typedef int (*gd_ef_name_t)(DIRFILE *D, struct _gd_raw_file*, const char*, int,
- int);
+typedef int (*gd_ef_name_t)(DIRFILE *D, const char *, struct _gd_raw_file*,
+ const char*, int, int);
typedef int (*gd_ef_open_t)(int, struct _gd_raw_file*, int, unsigned int);
typedef off64_t (*gd_ef_seek_t)(struct _gd_raw_file*, off64_t, gd_type_t,
unsigned int);
@@ -775,6 +775,7 @@
#define GD_EF_ECOR 0x1 /* post-framework byte-sex correction required */
#define GD_EF_SWAP 0x2 /* in-framework byte-sex metadata correction required */
#define GD_EF_OOP 0x4 /* writes occur out-of-place */
+#define GD_EF_EDAT 0x8 /* The /ENCODING datum is used */
/* Encoding schemes */
extern struct encoding_t {
unsigned long int scheme;
@@ -805,6 +806,7 @@
char *bname;
/* External name (the one that appears in the format file) */
char* ename;
+ void *enc_data;
int modified;
int parent;
int dirfd;
@@ -964,7 +966,6 @@
void _GD_Flush(DIRFILE* D, gd_entry_t *E, int);
void _GD_FlushMeta(DIRFILE* D, int fragment, int force);
void _GD_FreeE(DIRFILE *D, gd_entry_t* E, int priv);
-int _GD_GenericName(DIRFILE*, struct _gd_raw_file*, const char*, int, int);
off64_t _GD_GetEOF(DIRFILE *D, gd_entry_t* E, const char *parent,
int *is_index);
off64_t _GD_GetFilePos(DIRFILE *D, gd_entry_t *E, off64_t index_pos);
@@ -1027,6 +1028,8 @@
/* generic I/O methods */
int _GD_GenericMove(int, struct _gd_raw_file* file, int, char* new_path);
+int _GD_GenericName(DIRFILE*, const char *, struct _gd_raw_file*, const char*,
+ int, int);
int _GD_GenericUnlink(int, struct _gd_raw_file* file);
/* unencoded I/O methods */
Modified: trunk/getdata/src/move.c
===================================================================
--- trunk/getdata/src/move.c 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/src/move.c 2011-12-28 20:10:05 UTC (rev 641)
@@ -243,7 +243,8 @@
E->e->u.raw.file[0].name = NULL;
E->e->u.raw.file[0].subenc = subencoding;
- if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D, E->e->u.raw.file,
+ if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D,
+ D->fragment[E->fragment_index].enc_data, E->e->u.raw.file,
new_filebase, 0, 0))
{
E->e->u.raw.file[0].name = temp.name;
Modified: trunk/getdata/src/name.c
===================================================================
--- trunk/getdata/src/name.c 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/src/name.c 2011-12-28 20:10:05 UTC (rev 641)
@@ -506,15 +506,18 @@
memcpy(&temp, E->e->u.raw.file, sizeof(struct _gd_raw_file));
temp.name = NULL;
- if ((*_gd_ef[temp.subenc].name)(D, &temp, filebase, 0, 0)) {
+ if ((*_gd_ef[temp.subenc].name)(D,
+ D->fragment[E->fragment_index].enc_data, &temp, filebase, 0, 0))
+ {
free(name);
free(filebase);
dreturn("%i", -1);
return -1;
}
- if ((*_gd_ef[temp.subenc].name)(D, E->e->u.raw.file, E->e->u.raw.filebase,
- 0, 0))
+ if ((*_gd_ef[temp.subenc].name)(D,
+ D->fragment[E->fragment_index].enc_data, E->e->u.raw.file,
+ E->e->u.raw.filebase, 0, 0))
{
free(name);
free(filebase);
Modified: trunk/getdata/src/nframes.c
===================================================================
--- trunk/getdata/src/nframes.c 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/src/nframes.c 2011-12-28 20:10:05 UTC (rev 641)
@@ -47,6 +47,7 @@
}
if ((*_gd_ef[D->reference_field->e->u.raw.file[0].subenc].name)(D,
+ D->fragment[D->reference_field->fragment_index].enc_data,
D->reference_field->e->u.raw.file,
D->reference_field->e->u.raw.filebase, 0, 0))
{
Modified: trunk/getdata/src/open.c
===================================================================
--- trunk/getdata/src/open.c 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/src/open.c 2011-12-28 20:10:05 UTC (rev 641)
@@ -418,6 +418,7 @@
D->fragment[0].sname = NULL;
/* The root format file needs no external name */
D->fragment[0].ename = NULL;
+ D->fragment[0].enc_data = NULL;
D->fragment[0].modified = 0;
D->fragment[0].parent = -1;
D->fragment[0].dirfd = D->dir[0].fd;
Modified: trunk/getdata/src/parse.c
===================================================================
--- trunk/getdata/src/parse.c 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/src/parse.c 2011-12-28 20:10:05 UTC (rev 641)
@@ -1929,6 +1929,11 @@
for (i = 0; i < GD_N_SUBENCODINGS - 1; ++i)
if (strcmp(in_cols[1], _gd_ef[i].ffname) == 0) {
D->fragment[me].encoding = _gd_ef[i].scheme;
+ free(D->fragment[me].enc_data);
+ if (n_cols > 2 && _gd_ef[i].flags & GD_EF_EDAT)
+ D->fragment[me].enc_data = _GD_Strdup(D, in_cols[2]);
+ else
+ D->fragment[me].enc_data = NULL;
break;
}
}
Modified: trunk/getdata/src/zzip.c
===================================================================
--- trunk/getdata/src/zzip.c 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/src/zzip.c 2011-12-28 20:10:05 UTC (rev 641)
@@ -35,29 +35,46 @@
/* The zzip encoding scheme looks just like the regular ol' C IO. */
-int _GD_ZzipName(DIRFILE* D, struct _gd_raw_file* file, const char* base,
- int temp __gd_unused, int resolv)
+int _GD_ZzipName(DIRFILE* D, const char *enc_data, struct _gd_raw_file* file,
+ const char* base, int temp __gd_unused, int resolv)
{
- dtrace("%p, %p, \"%s\", <unused>, %i", D, file, base, resolv);
+ size_t enc_len;
+
+ dtrace("%p, \"%s\", %p, \"%s\", <unused>, %i", D, enc_data, file, base,
+ resolv);
+
+ if (enc_data == NULL)
+ enc_data = "raw";
+
+ enc_len = strlen(enc_data);
if (resolv) {
free(file->name);
- file->name = strdup("raw.zip");
- dreturn("%i", (file->name == NULL) ? -1 : 0);
- return (file->name == NULL) ? -1 : 0;
+ file->name = (char*)malloc(enc_len + 5);
+ if (file->name == NULL) {
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ strcpy(file->name, enc_data);
+ strcpy(file->name + enc_len, ".zip");
+
+ dreturn("%i (%s)", 0, file->name);
+ return 0;
}
if (file->name == NULL) {
file->D = D;
- file->name = (char *)malloc(strlen(base) + 5);
+ file->name = (char *)malloc(strlen(base) + strlen(enc_data) + 2);
if (file->name == NULL) {
_GD_SetError(D, GD_E_ALLOC, 0, NULL, 0, NULL);
dreturn("%i", -1);
return -1;
}
- strcpy(file->name, "raw/");
- strcpy(file->name + 4, base);
+ strcpy(file->name, enc_data);
+ file->name[enc_len] = '/';
+ strcpy(file->name + enc_len + 1, base);
}
dreturn("%i (%s)", 0, file->name);
Modified: trunk/getdata/test/Makefile.am
===================================================================
--- trunk/getdata/test/Makefile.am 2011-12-28 17:35:32 UTC (rev 640)
+++ trunk/getdata/test/Makefile.am 2011-12-28 20:10:05 UTC (rev 641)
@@ -343,7 +343,7 @@
XZ_TESTS=xz_get xz_nframes
-ZZIP_TESTS=zzip_get zzip_get_get zzip_nframes
+ZZIP_TESTS=zzip_data zzip_get zzip_get_get zzip_nframes
TESTS=$(ADD_TESTS) $(ALIAS_TESTS) $(ALTER_TESTS) $(ASCII_TESTS) \
$(BOF_TESTS) $(BZIP_TESTS) $(CLOSE_TESTS) $(CONVERT_TESTS) \
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ket...@us...> - 2011-12-28 17:35:41
|
Revision: 640
http://getdata.svn.sourceforge.net/getdata/?rev=640&view=rev
Author: ketiltrout
Date: 2011-12-28 17:35:32 +0000 (Wed, 28 Dec 2011)
Log Message:
-----------
Provisional ZZIP support. _GD_SetEncodedName has been pushed down into the encoding layer.
Modified Paths:
--------------
trunk/getdata/AUTHORS
trunk/getdata/ChangeLog
trunk/getdata/bindings/idl/getdata.c
trunk/getdata/bindings/make_parameters.c
trunk/getdata/configure.ac
trunk/getdata/src/Makefile.am
trunk/getdata/src/del.c
trunk/getdata/src/encoding.c
trunk/getdata/src/entry.c
trunk/getdata/src/flimits.c
trunk/getdata/src/getdata.h.in
trunk/getdata/src/gzip.c
trunk/getdata/src/internal.h
trunk/getdata/src/move.c
trunk/getdata/src/name.c
trunk/getdata/src/nframes.c
trunk/getdata/test/Makefile.am
trunk/getdata/test/add_alias.c
trunk/getdata/test/fragment_affix_alter.c
Added Paths:
-----------
trunk/getdata/src/zzip.c
trunk/getdata/test/zzip_get.c
trunk/getdata/test/zzip_get_get.c
trunk/getdata/test/zzip_nframes.c
Property Changed:
----------------
trunk/getdata/test/
Modified: trunk/getdata/AUTHORS
===================================================================
--- trunk/getdata/AUTHORS 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/AUTHORS 2011-12-28 17:35:32 UTC (rev 640)
@@ -8,15 +8,16 @@
Ted Kisner <tsk...@gm...> wrote the PutData library
(libdirfile).
-Matthew Truch <ma...@tr...> wrote the dirfile2ascii conversion utility.
-He also provides alpha-testing, bug fixes, and maintains the Fedora packages.
-
Eli Fidler <el...@st...> ported PutData to this version of the GetData
library.
Joseph Fowler <jf...@pr...> provided code which was adapted to
create the slimlib encoding support.
+Adam D Hincks <ada...@ut...> provided code whic was adapted to
+create the zzip encoding support. The original zzip encoding (ZIRFILE) was
+developed by Mike Nolta <no...@ci...>.
+
Peter Kümmel <syn...@gm...> ported GetData to MSVC.
George Staikos <st...@kd...> maintained the GetData library as part of
@@ -24,6 +25,8 @@
Adam Treat <tr...@kd...> wrote the code for the PHASE field type.
+Matthew Truch <ma...@tr...> wrote the dirfile2ascii conversion utility.
+
Andrew Walker <arw...@su...> maintained the GetData library as
part of kst.
Modified: trunk/getdata/ChangeLog
===================================================================
--- trunk/getdata/ChangeLog 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/ChangeLog 2011-12-28 17:35:32 UTC (rev 640)
@@ -1,3 +1,18 @@
+2011-12-29 D. V. Wiebe <ge...@ke...> svn:640
+ * configure.ac: zzip encoding check.
+ * src/getdata.h.in src/internal.h: GD_ZZIP_ENCODED / GD_ENC_ZZIP; Added name
+ to encoding_t.
+ * src/zzip.c: Added.
+ * src/encoding.c: Add Zzip encoding; gd_ef_name_t.
+ * src/encoding.c (_GD_GenericName): Renamed from _GD_SetEncodedName and
+ pushed down into the encoding framework.
+ * src/encoding.c (_GD_MissingFramework): Handle GD_EF_NAME.
+ * src/encoding.c (_GD_ResolveEncoding): Handle external name functions.
+ * src/entry.c (gd_raw_filename) src/encoding.c (_GD_InitRawIO
+ _GD_RecodeFragment) src/move.c (_GD_MogrifyFile) src/name.c (_GD_Rename)
+ src/del.c (_GD_Delete) src/flimits.c (_GD_GetEOF): Call _gd_ef->name.
+ * test/zzip_get.c test/zzip_get_get.c test/zzip_nframes.c: Added.
+
2011-12-27 D. V. Wiebe <ge...@ke...> svn:639
* src/add.c (gd_madd_lincom gd_madd_clincom gd_madd_linterp gd_madd_bit
gd_madd_sbit gd_madd_multiply gd_madd_phase gd_madd_polynom gd_madd_cpolynom
Modified: trunk/getdata/bindings/idl/getdata.c
===================================================================
--- trunk/getdata/bindings/idl/getdata.c 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/bindings/idl/getdata.c 2011-12-28 17:35:32 UTC (rev 640)
@@ -1009,6 +1009,10 @@
encoding = GD_LZMA_ENCODED;
else if (strcasecmp(enc, "SLIM"))
encoding = GD_SLIM_ENCODED;
+ else if (strcasecmp(enc, "SIE"))
+ encoding = GD_SIE_ENCODED;
+ else if (strcasecmp(enc, "ZZIP"))
+ encoding = GD_ZZIP_ENCODED;
else if (strcasecmp(enc, "TEXT"))
encoding = GD_TEXT_ENCODED;
else if (strcasecmp(enc, "NONE"))
Modified: trunk/getdata/bindings/make_parameters.c
===================================================================
--- trunk/getdata/bindings/make_parameters.c 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/bindings/make_parameters.c 2011-12-28 17:35:32 UTC (rev 640)
@@ -112,12 +112,13 @@
CONSTANT(PERMISSIVE, "GD_PM", 1),
CONSTANT(AUTO_ENCODED, "GD_EA", 1),
+ CONSTANT(BZIP2_ENCODED, "GD_EB", 2),
+ CONSTANT(LZMA_ENCODED, "GD_EL", 2),
CONSTANT(UNENCODED, "GD_EN", 2),
+ CONSTANT(GZIP_ENCODED, "GD_EG", 2),
CONSTANT(TEXT_ENCODED, "GD_ET", 2),
CONSTANT(SLIM_ENCODED, "GD_ES", 2),
- CONSTANT(GZIP_ENCODED, "GD_EG", 2),
- CONSTANT(BZIP2_ENCODED, "GD_EB", 2),
- CONSTANT(LZMA_ENCODED, "GD_EL", 2),
+ CONSTANT(ZZIP_ENCODED, "GD_EZ", 2),
CONSTANT(NO_ENTRY, "GD_NOE", 3),
CONSTANT(RAW_ENTRY, "GD_RWE", 3),
Modified: trunk/getdata/configure.ac
===================================================================
--- trunk/getdata/configure.ac 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/configure.ac 2011-12-28 17:35:32 UTC (rev 640)
@@ -823,6 +823,7 @@
[unslim],[slimdopen])
GD_CHECK_ENCODING([gzip],[z],[gzopen],[zlib.h],[gzip],[gunzip],[])
GD_CHECK_ENCODING([lzma],[lzma],[lzma_auto_decoder],[lzma.h],[xz],[],[])
+GD_CHECK_ENCODING([zzip],[zzip],[zzip_open],[zzip/lib.h],[zip],[unzip],[])
if test ! -z "${LIBS}"; then
PRIVATE_LIBS="${LIBS} ${PRIVATE_LIBS}"
Modified: trunk/getdata/src/Makefile.am
===================================================================
--- trunk/getdata/src/Makefile.am 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/src/Makefile.am 2011-12-28 17:35:32 UTC (rev 640)
@@ -64,14 +64,23 @@
endif
endif
+if USE_ZZIP
if USE_MODULES
+LIBGETDATAZZIP_LA=libgetdatazzip.la
+DLOPEN_LIBGETDATAZZIP_LA=-dlopen libgetdatazzip.la
+else
+ZZIP_C=zzip.c
+endif
+endif
+
+if USE_MODULES
EXPORT_DYNAMIC=-export-dynamic
DGETDATA_MODULEDIR=-DGETDATA_MODULEDIR="\"$(moduledir)\""
else
EXTERNAL_CPPFLAGS=$(SLIM_CPPFLAGS) $(GZIP_CPPFLAGS) $(BZIP2_CPPFLAGS) \
- $(LZMA_CPPFLAGS)
+ $(LZMA_CPPFLAGS) $(ZZIP_CPPFLAGS)
EXTERNAL_LDFLAGS=$(SLIM_LDFLAGS) $(GZIP_LDFLAGS) $(BZIP2_LDFLAGS) \
- $(LZMA_LDFLAGS)
+ $(LZMA_LDFLAGS) $(ZZIP_LDFLAGS)
endif
if INCLUDE_LEGACY_API
@@ -102,7 +111,8 @@
lib_LTLIBRARIES = libgetdata.la
module_LTLIBRARIES = ${LIBGETDATASLIM_LA} ${LIBGETDATAGZIP_LA} \
- ${LIBGETDATABZIP2_LA} ${LIBGETDATALZMA_LA}
+ ${LIBGETDATABZIP2_LA} ${LIBGETDATALZMA_LA} \
+ ${LIBGETDATAZZIP_LA}
libgetdata_la_SOURCES = add.c ascii.c ${BZIP2_C} close.c common.c compat.c \
constant.c ${DEBUG_C} del.c encoding.c endian.c \
entry.c errors.c field_list.c flimits.c flush.c fpos.c \
@@ -110,34 +120,41 @@
include.c ${LEGACY_C} ${LZMA_C} meta_list.c mod.c \
move.c name.c native.c nfields.c nframes.c nmeta.c \
open.c parse.c protect.c putdata.c raw.c sie.c \
- ${SLIM_C} spf.c string.c types.c ${GETDATA_LEGACY_H} \
- internal.h nan.h
+ ${SLIM_C} spf.c string.c types.c ${ZZIP_C} \
+ ${GETDATA_LEGACY_H} internal.h nan.h
libgetdata_la_LDFLAGS = $(EXPORT_DYNAMIC) -export-symbols-regex '^[^_]' \
-version-info \
${GETDATA_IFACE_VERSION}:${GETDATA_IMPL_REVISION}:${GETDATA_IFACE_AGE} \
$(EXTERNAL_LDFLAGS)
libgetdata_la_LIBADD = $(LIBLTDL) $(DLOPEN_LIBGETDATASLIM_LA) \
$(DLOPEN_LIBGETDATAGZIP_LA) \
- $(DLOPEN_LIBGETDATABZIP2_LA) $(DLOPEN_LIBGETDATALZMA_LA)
+ $(DLOPEN_LIBGETDATABZIP2_LA) \
+ $(DLOPEN_LIBGETDATALZMA_LA) \
+ $(DLOPEN_LIBGETDATAZZIP_LA)
-libgetdataslim_la_SOURCES = slim.c ${DEBUG_C}
+libgetdataslim_la_SOURCES = slim.c
libgetdataslim_la_LDFLAGS = $(SLIM_LDFLAGS) -release $(PACKAGE_VERSION) \
-module
libgetdataslim_la_CPPFLAGS = $(AM_CPPFLAGS) $(SLIM_CPPFLAGS)
-libgetdatagzip_la_SOURCES = gzip.c ${DEBUG_C}
+libgetdatagzip_la_SOURCES = gzip.c
libgetdatagzip_la_LDFLAGS = $(GZIP_LDFLAGS) -release $(PACKAGE_VERSION) -module
libgetdatagzip_la_CPPFLAGS = $(AM_CPPFLAGS) $(GZIP_CPPFLAGS)
-libgetdatabzip2_la_SOURCES = bzip.c ${DEBUG_C}
+libgetdatabzip2_la_SOURCES = bzip.c
libgetdatabzip2_la_LDFLAGS = $(BZIP2_LDFLAGS) -release $(PACKAGE_VERSION) \
-module
libgetdatabzip2_la_CPPFLAGS = $(AM_CPPFLAGS) $(BZIP2_CPPFLAGS)
-libgetdatalzma_la_SOURCES = lzma.c ${DEBUG_C}
+libgetdatalzma_la_SOURCES = lzma.c
libgetdatalzma_la_LDFLAGS = $(LZMA_LDFLAGS) -release $(PACKAGE_VERSION) \
-module
libgetdatalzma_la_CPPFLAGS = $(AM_CPPFLAGS) $(LZMA_CPPFLAGS)
+libgetdatazzip_la_SOURCES = zzip.c
+libgetdatazzip_la_LDFLAGS = $(ZZIP_LDFLAGS) -release $(PACKAGE_VERSION) \
+ -module
+libgetdatazzip_la_CPPFLAGS = $(AM_CPPFLAGS) $(ZZIP_CPPFLAGS)
+
clean-local:
rm -rf *~ getdata.pc
Modified: trunk/getdata/src/del.c
===================================================================
--- trunk/getdata/src/del.c 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/src/del.c 2011-12-28 17:35:32 UTC (rev 640)
@@ -319,13 +319,15 @@
return -1;
}
- if (!_GD_Supports(D, E, GD_EF_UNLINK)) {
+ if (!_GD_Supports(D, E, GD_EF_NAME | GD_EF_UNLINK)) {
free(del_list);
dreturn("%i", -1);
return -1;
}
- if (_GD_SetEncodedName(D, E->e->u.raw.file, E->e->u.raw.filebase, 0)) {
+ if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D, E->e->u.raw.file,
+ E->e->u.raw.filebase, 0, 0))
+ {
free(del_list);
dreturn("%i", -1);
return -1;
Modified: trunk/getdata/src/encoding.c
===================================================================
--- trunk/getdata/src/encoding.c 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/src/encoding.c 2011-12-28 17:35:32 UTC (rev 640)
@@ -32,8 +32,8 @@
#endif
/* encoding schemas */
-#define GD_EF_NULL_SET NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
- &_GD_GenericMove, &_GD_GenericUnlink
+#define GD_EF_NULL_SET &_GD_GenericName, NULL, NULL, NULL, NULL, NULL, \
+ NULL, NULL, &_GD_GenericMove, &_GD_GenericUnlink
#ifdef USE_MODULES
#define GD_EXT_ENCODING(sc,ex,ec,af,ff) \
{ sc,ex,ec,af,ff,GD_EF_PROVIDES,GD_EF_NULL_SET }
@@ -42,8 +42,9 @@
#endif
struct encoding_t _gd_ef[GD_N_SUBENCODINGS] = {
{ GD_UNENCODED, "", GD_EF_ECOR, NULL, "none", 0,
- &_GD_RawOpen, &_GD_RawClose, &_GD_RawSeek, &_GD_RawRead, &_GD_RawSize,
- &_GD_RawWrite, &_GD_RawSync, &_GD_GenericMove, &_GD_GenericUnlink
+ &_GD_GenericName, &_GD_RawOpen, &_GD_RawClose, &_GD_RawSeek, &_GD_RawRead,
+ &_GD_RawSize, &_GD_RawWrite, &_GD_RawSync, &_GD_GenericMove,
+ &_GD_GenericUnlink
},
#ifdef USE_GZIP
@@ -51,8 +52,9 @@
GD_EF_OPEN | GD_EF_CLOSE | GD_EF_SEEK | GD_EF_READ | GD_EF_SIZE | \
GD_EF_WRITE | GD_EF_SYNC
#define GD_INT_FUNCS \
- &_GD_GzipOpen, &_GD_GzipClose, &_GD_GzipSeek, &_GD_GzipRead, &_GD_GzipSize, \
- &_GD_GzipWrite, &_GD_GzipSync, &_GD_GenericMove, &_GD_GenericUnlink
+ &_GD_GenericName, &_GD_GzipOpen, &_GD_GzipClose, &_GD_GzipSeek, \
+ &_GD_GzipRead, &_GD_GzipSize, &_GD_GzipWrite, &_GD_GzipSync, \
+ &_GD_GenericMove, &_GD_GenericUnlink
#else
#define GD_EF_PROVIDES 0
#define GD_INT_FUNCS GD_EF_NULL_SET
@@ -67,9 +69,9 @@
#define GD_EF_PROVIDES \
GD_EF_OPEN | GD_EF_CLOSE | GD_EF_SEEK | GD_EF_READ | GD_EF_SIZE
#define GD_INT_FUNCS \
- &_GD_Bzip2Open, &_GD_Bzip2Close, &_GD_Bzip2Seek, &_GD_Bzip2Read, \
- &_GD_Bzip2Size, NULL /* WRITE */, NULL /* SYNC */, &_GD_GenericMove, \
- &_GD_GenericUnlink
+ &_GD_GenericName, &_GD_Bzip2Open, &_GD_Bzip2Close, &_GD_Bzip2Seek, \
+ &_GD_Bzip2Read, &_GD_Bzip2Size, NULL /* WRITE */, NULL /* SYNC */, \
+ &_GD_GenericMove, &_GD_GenericUnlink
#else
#define GD_INT_FUNCS GD_EF_NULL_SET
#define GD_EF_PROVIDES 0
@@ -83,8 +85,9 @@
#define GD_EF_PROVIDES \
GD_EF_OPEN | GD_EF_CLOSE | GD_EF_SEEK | GD_EF_READ | GD_EF_SIZE
#define GD_INT_FUNCS \
- &_GD_SlimOpen, &_GD_SlimClose, &_GD_SlimSeek, &_GD_SlimRead, &_GD_SlimSize, \
- NULL /* WRITE */, NULL /* SYNC */, &_GD_GenericMove, &_GD_GenericUnlink
+ &_GD_GenericName, &_GD_SlimOpen, &_GD_SlimClose, &_GD_SlimSeek, \
+ &_GD_SlimRead, &_GD_SlimSize, NULL /* WRITE */, NULL /* SYNC */, \
+ &_GD_GenericMove, &_GD_GenericUnlink
#else
#define GD_INT_FUNCS GD_EF_NULL_SET
#define GD_EF_PROVIDES 0
@@ -98,8 +101,9 @@
#define GD_EF_PROVIDES \
GD_EF_OPEN | GD_EF_CLOSE | GD_EF_SEEK | GD_EF_READ | GD_EF_SIZE
#define GD_INT_FUNCS \
- &_GD_LzmaOpen, &_GD_LzmaClose, &_GD_LzmaSeek, &_GD_LzmaRead, &_GD_LzmaSize, \
- NULL /* WRITE */, NULL /* SYNC */, &_GD_GenericMove, &_GD_GenericUnlink
+ &_GD_GenericName, &_GD_LzmaOpen, &_GD_LzmaClose, &_GD_LzmaSeek, \
+ &_GD_LzmaRead, &_GD_LzmaSize, NULL /* WRITE */, NULL /* SYNC */, \
+ &_GD_GenericMove, &_GD_GenericUnlink
#else
#define GD_INT_FUNCS GD_EF_NULL_SET
#define GD_EF_PROVIDES 0
@@ -111,19 +115,36 @@
{ GD_TEXT_ENCODED, ".txt", 0, NULL, "text", 0,
- &_GD_AsciiOpen, &_GD_AsciiClose, &_GD_AsciiSeek, &_GD_AsciiRead,
- &_GD_AsciiSize, &_GD_AsciiWrite, &_GD_AsciiSync, &_GD_GenericMove,
- &_GD_GenericUnlink
+ &_GD_GenericName, &_GD_AsciiOpen, &_GD_AsciiClose, &_GD_AsciiSeek,
+ &_GD_AsciiRead, &_GD_AsciiSize, &_GD_AsciiWrite, &_GD_AsciiSync,
+ &_GD_GenericMove, &_GD_GenericUnlink
},
{ GD_SIE_ENCODED, ".sie", GD_EF_ECOR | GD_EF_SWAP, NULL, "sie", 0,
- &_GD_SampIndOpen, &_GD_SampIndClose, &_GD_SampIndSeek, &_GD_SampIndRead,
- &_GD_SampIndSize, &_GD_SampIndWrite, &_GD_SampIndSync, &_GD_GenericMove,
- &_GD_GenericUnlink
+ &_GD_GenericName, &_GD_SampIndOpen, &_GD_SampIndClose, &_GD_SampIndSeek,
+ &_GD_SampIndRead, &_GD_SampIndSize, &_GD_SampIndWrite, &_GD_SampIndSync,
+ &_GD_GenericMove, &_GD_GenericUnlink
},
+
+#ifdef USE_ZZIP
+#define GD_EF_PROVIDES \
+ GD_EF_NAME | GD_EF_OPEN | GD_EF_CLOSE | GD_EF_SEEK | GD_EF_READ | GD_EF_SIZE
+#define GD_INT_FUNCS \
+ &_GD_ZzipName, &_GD_ZzipOpen, &_GD_ZzipClose, &_GD_ZzipSeek, &_GD_ZzipRead, \
+ &_GD_ZzipSize, NULL /* WRITE */, NULL /* SYNC */, &_GD_GenericMove, \
+ &_GD_GenericUnlink
+#else
+#define GD_INT_FUNCS GD_EF_NULL_SET
+#define GD_EF_PROVIDES 0
+#endif
+ GD_EXT_ENCODING(GD_ZZIP_ENCODED, NULL, GD_EF_ECOR, "Zzip", "zzip"),
+#undef GD_INT_FUNCS
+#undef GD_EF_PROVIDES
+
+
{ GD_ENC_UNSUPPORTED, "", 0, "", "", 0,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
},
};
@@ -218,6 +239,9 @@
free(library);
/* Try to resolve the symbols */
+ if (_gd_ef[encoding].provides & GD_EF_NAME)
+ _gd_ef[encoding].name = (gd_ef_name_t)_GD_ResolveSymbol(lib,
+ _gd_ef + encoding, "Name");
if (_gd_ef[encoding].provides & GD_EF_OPEN)
_gd_ef[encoding].open = (gd_ef_open_t)_GD_ResolveSymbol(lib,
_gd_ef + encoding, "Open");
@@ -252,6 +276,7 @@
#endif
ret =
+ (funcs & GD_EF_NAME && _gd_ef[encoding].name == NULL) ||
(funcs & GD_EF_OPEN && _gd_ef[encoding].open == NULL) ||
(funcs & GD_EF_CLOSE && _gd_ef[encoding].close == NULL) ||
(funcs & GD_EF_SEEK && _gd_ef[encoding].seek == NULL) ||
@@ -435,7 +460,7 @@
mode &= ~GD_FILE_TOUCH;
if (!(mode & GD_FILE_TEMP)) {
- if (!_GD_Supports(D, E, GD_EF_OPEN | funcs)) {
+ if (!_GD_Supports(D, E, GD_EF_NAME | GD_EF_OPEN | funcs)) {
dreturn("%i", 1);
return 1;
}
@@ -476,8 +501,7 @@
if (mode & GD_FILE_TEMP) {
/* create temporary file in file[1] */
- if (_GD_SetEncodedName(D, E->e->u.raw.file + 1, filebase, 1))
- {
+ if ((*enc->name)(D, E->e->u.raw.file + 1, filebase, 1, 0)) {
; /* error already set */
} else if ((temp_fd = _GD_MakeTempFile(D, D->fragment[fragment].dirfd,
E->e->u.raw.file[1].name)) < 0)
@@ -500,7 +524,7 @@
if (oop_write) {
/* an out-of-place write requires us to open a temporary file and pass
* in its fd */
- if (_GD_SetEncodedName(D, E->e->u.raw.file + 1, filebase, 1)) {
+ if ((*enc->name)(D, E->e->u.raw.file + 1, filebase, 1, 0)) {
dreturn("%i", 1);
return 1;
} else if ((temp_fd = _GD_MakeTempFile(D,
@@ -521,7 +545,7 @@
/* open a regular file, if necessary */
if (E->e->u.raw.file[0].idata < 0) {
- if (_GD_SetEncodedName(D, E->e->u.raw.file, filebase, 0)) {
+ if ((*enc->name)(D, E->e->u.raw.file, filebase, 0, 0)) {
dreturn("%i", 1);
return 1;
} else if ((*enc->open)(D->fragment[E->fragment_index].dirfd,
@@ -545,9 +569,8 @@
}
/* Figure out the encoding scheme */
-static unsigned long _GD_ResolveEncoding(const DIRFILE *D gd_unused_d,
- const char* name, unsigned long scheme, int dirfd,
- struct _gd_raw_file *file)
+static unsigned long _GD_ResolveEncoding(DIRFILE *D, const char* name,
+ unsigned long scheme, int dirfd, struct _gd_raw_file *file)
{
char *candidate;
int i;
@@ -558,20 +581,32 @@
for (i = 0; _gd_ef[i].scheme != GD_ENC_UNSUPPORTED; i++) {
if (scheme == GD_AUTO_ENCODED || scheme == _gd_ef[i].scheme) {
- candidate = (char *)malloc(len + strlen(_gd_ef[i].ext) + 1);
- if (candidate) {
+ if (_gd_ef[i].ext) {
+ candidate = (char *)malloc(len + strlen(_gd_ef[i].ext) + 1);
+ if (!candidate)
+ continue;
+
strcat(strcpy(candidate, name), _gd_ef[i].ext);
+ } else {
+ if (_GD_MissingFramework(i, GD_EF_NAME))
+ continue;
- if (gd_StatAt(D, dirfd, candidate, &statbuf, 0) == 0)
- if (S_ISREG(statbuf.st_mode)) {
- if (file != NULL)
- file->subenc = i;
- free(candidate);
- dreturn("%08lx", _gd_ef[i].scheme);
- return _gd_ef[i].scheme;
- }
- free(candidate);
+ if ((*_gd_ef[i].name)(D, file, name, 0, 1))
+ continue;
+
+ candidate = file->name;
+ file->name = NULL;
}
+
+ if (gd_StatAt(D, dirfd, candidate, &statbuf, 0) == 0)
+ if (S_ISREG(statbuf.st_mode)) {
+ if (file != NULL)
+ file->subenc = i;
+ free(candidate);
+ dreturn("%08lx", _gd_ef[i].scheme);
+ return _gd_ef[i].scheme;
+ }
+ free(candidate);
}
}
@@ -623,10 +658,10 @@
return 1;
}
-int _GD_SetEncodedName(DIRFILE* D, struct _gd_raw_file* file, const char* base,
- int temp)
+int _GD_GenericName(DIRFILE* D, struct _gd_raw_file* file, const char* base,
+ int temp, int resolv __gd_unused)
{
- dtrace("%p, %p, \"%s\", %i", D, file, base, temp);
+ dtrace("%p, %p, \"%s\", %i, <unused>", D, file, base, temp);
if (file->name == NULL) {
file->D = D;
@@ -706,8 +741,8 @@
/* discard the old file */
_GD_FiniRawIO(D, raw_entry[i], fragment, GD_FINIRAW_DISCARD);
- if (_GD_SetEncodedName(D, raw_entry[i]->e->u.raw.file,
- raw_entry[i]->e->u.raw.filebase, 0))
+ if ((*_gd_ef[temp.subenc].name)(D, raw_entry[i]->e->u.raw.file,
+ raw_entry[i]->e->u.raw.filebase, 0, 0))
{
raw_entry[i]->e->u.raw.file[0].name = temp.name;
raw_entry[i]->e->u.raw.file[0].subenc = temp.subenc;
Modified: trunk/getdata/src/entry.c
===================================================================
--- trunk/getdata/src/entry.c 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/src/entry.c 2011-12-28 17:35:32 UTC (rev 640)
@@ -322,7 +322,7 @@
if (E->e->u.raw.file[0].name == NULL) {
/* ensure encoding sybtype is known */
- if (!_GD_Supports(D, E, 0)) {
+ if (!_GD_Supports(D, E, GD_EF_NAME)) {
dreturn("%p", NULL);
return NULL;
}
@@ -331,7 +331,8 @@
_GD_SetError(D, GD_E_UNKNOWN_ENCODING, GD_E_UNENC_UNDET, NULL, 0, NULL);
dreturn("%p", NULL);
return NULL;
- } else if (_GD_SetEncodedName(D, E->e->u.raw.file, E->e->u.raw.filebase, 0))
+ } else if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D, E->e->u.raw.file,
+ E->e->u.raw.filebase, 0, 0))
{
dreturn("%p", NULL);
return NULL;
Modified: trunk/getdata/src/flimits.c
===================================================================
--- trunk/getdata/src/flimits.c 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/src/flimits.c 2011-12-28 17:35:32 UTC (rev 640)
@@ -188,11 +188,14 @@
*is_index = 0;
switch (E->field_type) {
case GD_RAW_ENTRY:
- if (!_GD_Supports(D, E, GD_EF_SIZE))
+ if (!_GD_Supports(D, E, GD_EF_NAME | GD_EF_SIZE))
break;
- if (_GD_SetEncodedName(D, E->e->u.raw.file, E->e->u.raw.filebase, 0))
+ if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D, E->e->u.raw.file,
+ E->e->u.raw.filebase, 0, 0))
+ {
break;
+ }
ns = (*_gd_ef[E->e->u.raw.file[0].subenc].size)(
D->fragment[E->fragment_index].dirfd, E->e->u.raw.file,
Modified: trunk/getdata/src/getdata.h.in
===================================================================
--- trunk/getdata/src/getdata.h.in 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/src/getdata.h.in 2011-12-28 17:35:32 UTC (rev 640)
@@ -440,6 +440,7 @@
#define GD_BZIP2_ENCODED 0x05000000 /* Data are bzip2 encoded */
#define GD_LZMA_ENCODED 0x06000000 /* Data are xz encoded */
#define GD_SIE_ENCODED 0x07000000 /* Data are sample index encoded */
+#define GD_ZZIP_ENCODED 0x08000000 /* Data are zzip encoded */
#define GD_ENC_UNSUPPORTED GD_ENCODING /* Encoding unsupported */
/* delete flags */
Modified: trunk/getdata/src/gzip.c
===================================================================
--- trunk/getdata/src/gzip.c 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/src/gzip.c 2011-12-28 17:35:32 UTC (rev 640)
@@ -41,7 +41,7 @@
unsigned int mode)
{
const char *gzmode = "w";
- dtrace("%i, %p, <unused>, %u", fd, file, mode);
+ dtrace("%i, %p, <unused>, 0x%X", fd, file, mode);
if (mode & GD_FILE_READ) {
file->idata = gd_OpenAt(file->D, fd, file->name, O_RDONLY | O_BINARY, 0666);
Modified: trunk/getdata/src/internal.h
===================================================================
--- trunk/getdata/src/internal.h 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/src/internal.h 2011-12-28 17:35:32 UTC (rev 640)
@@ -728,12 +728,14 @@
#define GD_ENC_LZMA_RAW 5
#define GD_ENC_XZ_RAW 6
#define GD_ENC_SIE 7
-#define GD_ENC_UNKNOWN 8
+#define GD_ENC_ZZIP 8
+#define GD_ENC_UNKNOWN 9
#define GD_N_SUBENCODINGS (GD_ENC_UNKNOWN + 1)
-#define GD_EF_OPEN 0x0001
-#define GD_EF_CLOSE 0x0002
+#define GD_EF_NAME 0x0001
+#define GD_EF_OPEN 0x0002
+#define GD_EF_CLOSE 0x0004
#define GD_EF_SEEK 0x0008
#define GD_EF_READ 0x0010
#define GD_EF_SIZE 0x0020
@@ -755,6 +757,8 @@
# define SCREWY_FLOATS
#endif
+typedef int (*gd_ef_name_t)(DIRFILE *D, struct _gd_raw_file*, const char*, int,
+ int);
typedef int (*gd_ef_open_t)(int, struct _gd_raw_file*, int, unsigned int);
typedef off64_t (*gd_ef_seek_t)(struct _gd_raw_file*, off64_t, gd_type_t,
unsigned int);
@@ -779,6 +783,7 @@
const char* affix;
const char* ffname;
unsigned int provides;
+ gd_ef_name_t name;
gd_ef_open_t open;
gd_ef_close_t close;
gd_ef_seek_t seek;
@@ -959,6 +964,7 @@
void _GD_Flush(DIRFILE* D, gd_entry_t *E, int);
void _GD_FlushMeta(DIRFILE* D, int fragment, int force);
void _GD_FreeE(DIRFILE *D, gd_entry_t* E, int priv);
+int _GD_GenericName(DIRFILE*, struct _gd_raw_file*, const char*, int, int);
off64_t _GD_GetEOF(DIRFILE *D, gd_entry_t* E, const char *parent,
int *is_index);
off64_t _GD_GetFilePos(DIRFILE *D, gd_entry_t *E, off64_t index_pos);
@@ -1004,8 +1010,6 @@
char *_GD_ParseFragment(FILE*, DIRFILE*, int, int*, unsigned long int*, int);
void _GD_ReadLinterpFile(DIRFILE* D, gd_entry_t *E);
void _GD_ReleaseDir(DIRFILE *D, int dirfd);
-int _GD_SetEncodedName(DIRFILE* D, struct _gd_raw_file* file, const char* base,
- int temp);
void _GD_SetError(DIRFILE* D, int error, int suberror, const char* format_file,
int line, const char* token);
int _GD_SetTablePath(DIRFILE *D, gd_entry_t *E, struct _gd_private_entry *e);
@@ -1109,6 +1113,16 @@
off64_t _GD_SampIndSize(int, struct _gd_raw_file* file, gd_type_t data_type,
int swap);
+/* zzip I/O methods */
+int _GD_ZzipOpen(int, struct _gd_raw_file* file, int swap, unsigned int);
+off64_t _GD_ZzipSeek(struct _gd_raw_file* file, off64_t count,
+ gd_type_t data_type, unsigned int);
+ssize_t _GD_ZzipRead(struct _gd_raw_file* file, void *ptr, gd_type_t data_type,
+ size_t nmemb);
+int _GD_ZzipClose(struct _gd_raw_file* file);
+off64_t _GD_ZzipSize(int, struct _gd_raw_file* file, gd_type_t data_type,
+ int swap);
+
/* allocation boilerplates */
_gd_static_inline void *_GD_Malloc(DIRFILE *D, size_t size)
{
Modified: trunk/getdata/src/move.c
===================================================================
--- trunk/getdata/src/move.c 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/src/move.c 2011-12-28 17:35:32 UTC (rev 640)
@@ -82,8 +82,8 @@
}
/* input encoding check */
- if (!_GD_Supports(D, E, GD_EF_OPEN | GD_EF_CLOSE | GD_EF_SEEK | GD_EF_READ
- | GD_EF_UNLINK))
+ if (!_GD_Supports(D, E, GD_EF_NAME | GD_EF_OPEN | GD_EF_CLOSE | GD_EF_SEEK |
+ GD_EF_READ | GD_EF_UNLINK))
{
free(new_filebase);
dreturn("%i", -1);
@@ -243,7 +243,9 @@
E->e->u.raw.file[0].name = NULL;
E->e->u.raw.file[0].subenc = subencoding;
- if (_GD_SetEncodedName(D, E->e->u.raw.file, new_filebase, 0)) {
+ if ((*_gd_ef[E->e->u.raw.file[0].subenc].name)(D, E->e->u.raw.file,
+ new_filebase, 0, 0))
+ {
E->e->u.raw.file[0].name = temp.name;
E->e->u.raw.file[0].subenc = temp.subenc;
} else if (_GD_FiniRawIO(D, E, new_fragment, GD_FINIRAW_KEEP |
Modified: trunk/getdata/src/name.c
===================================================================
--- trunk/getdata/src/name.c 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/src/name.c 2011-12-28 17:35:32 UTC (rev 640)
@@ -497,7 +497,7 @@
return -1;
}
- if (!_GD_Supports(D, E, GD_EF_MOVE)) {
+ if (!_GD_Supports(D, E, GD_EF_NAME | GD_EF_MOVE)) {
free(name);
free(filebase);
dreturn("%i", -1);
@@ -506,14 +506,16 @@
memcpy(&temp, E->e->u.raw.file, sizeof(struct _gd_raw_file));
temp.name = NULL;
- if (_GD_SetEncodedName(D, &temp, filebase, 0)) {
+ if ((*_gd_ef[temp.subenc].name)(D, &temp, filebase, 0, 0)) {
free(name);
free(filebase);
dreturn("%i", -1);
return -1;
}
- if (_GD_SetEncodedName(D, E->e->u.raw.file, E->e->u.raw.filebase, 0)) {
+ if ((*_gd_ef[temp.subenc].name)(D, E->e->u.raw.file, E->e->u.raw.filebase,
+ 0, 0))
+ {
free(name);
free(filebase);
dreturn("%i", -1);
Modified: trunk/getdata/src/nframes.c
===================================================================
--- trunk/getdata/src/nframes.c 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/src/nframes.c 2011-12-28 17:35:32 UTC (rev 640)
@@ -41,13 +41,14 @@
return 0;
}
- if (!_GD_Supports(D, D->reference_field, GD_EF_SIZE)) {
+ if (!_GD_Supports(D, D->reference_field, GD_EF_NAME | GD_EF_SIZE)) {
dreturn("%i", 0);
return 0;
}
- if (_GD_SetEncodedName(D, D->reference_field->e->u.raw.file,
- D->reference_field->e->u.raw.filebase, 0))
+ if ((*_gd_ef[D->reference_field->e->u.raw.file[0].subenc].name)(D,
+ D->reference_field->e->u.raw.file,
+ D->reference_field->e->u.raw.filebase, 0, 0))
{
dreturn("%i", 0);
return 0;
Added: trunk/getdata/src/zzip.c
===================================================================
--- trunk/getdata/src/zzip.c (rev 0)
+++ trunk/getdata/src/zzip.c 2011-12-28 17:35:32 UTC (rev 640)
@@ -0,0 +1,204 @@
+/* Copyright (C) 2011 D. V. Wiebe
+ *
+ ***************************************************************************
+ *
+ * This file is part of the GetData project.
+ *
+ * GetData is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * GetData is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with GetData; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+#include "internal.h"
+
+#ifdef HAVE_ZZIP_LIB_H
+#include <zzip/lib.h>
+#endif
+
+#ifdef USE_MODULES
+#define _GD_ZzipName libgetdatazzip_LTX_GD_ZzipName
+#define _GD_ZzipOpen libgetdatazzip_LTX_GD_ZzipOpen
+#define _GD_ZzipSeek libgetdatazzip_LTX_GD_ZzipSeek
+#define _GD_ZzipRead libgetdatazzip_LTX_GD_ZzipRead
+#define _GD_ZzipClose libgetdatazzip_LTX_GD_ZzipClose
+#define _GD_ZzipSize libgetdatazzip_LTX_GD_ZzipSize
+#endif
+
+/* The zzip encoding scheme looks just like the regular ol' C IO. */
+
+int _GD_ZzipName(DIRFILE* D, struct _gd_raw_file* file, const char* base,
+ int temp __gd_unused, int resolv)
+{
+ dtrace("%p, %p, \"%s\", <unused>, %i", D, file, base, resolv);
+
+ if (resolv) {
+ free(file->name);
+ file->name = strdup("raw.zip");
+ dreturn("%i", (file->name == NULL) ? -1 : 0);
+ return (file->name == NULL) ? -1 : 0;
+ }
+
+ if (file->name == NULL) {
+ file->D = D;
+ file->name = (char *)malloc(strlen(base) + 5);
+ if (file->name == NULL) {
+ _GD_SetError(D, GD_E_ALLOC, 0, NULL, 0, NULL);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ strcpy(file->name, "raw/");
+ strcpy(file->name + 4, base);
+ }
+
+ dreturn("%i (%s)", 0, file->name);
+ return 0;
+}
+
+int _GD_ZzipOpen(int dirfd, struct _gd_raw_file* file, int swap __gd_unused,
+ unsigned int mode __gd_unused)
+{
+ char *ptr1, *ptr2;
+ size_t len;
+
+ dtrace("%i, %p, <unused>, <unused>", dirfd, file);
+
+ /* zziplib doesn't seem to have a way to do these path shenannigans nicely */
+ ptr1 = gd_MakeFullPathOnly(file->D, dirfd, "");
+ if (ptr1 == NULL) {
+ dreturn("%i", 1);
+ return 1;
+ }
+
+ len = strlen(ptr1);
+ ptr2 = realloc(ptr1, len + strlen(file->name) + 2);
+ if (ptr2 == NULL) {
+ dreturn("%i", 1);
+ return 1;
+ }
+
+ ptr2[len] = '/';
+ strcpy(ptr2 + len + 1, file->name);
+
+ file->edata = zzip_open(ptr2, O_RDONLY);
+ free(ptr2);
+
+ if (file->edata == NULL) {
+ file->idata = -1;
+ dreturn("%i", 1);
+ return 1;
+ }
+
+ file->idata = 0;
+ file->mode = GD_FILE_READ;
+ dreturn("%i", 0);
+ return 0;
+}
+
+off64_t _GD_ZzipSeek(struct _gd_raw_file* file, off64_t count,
+ gd_type_t data_type, unsigned int mode __gd_unused)
+{
+ off64_t n;
+
+ dtrace("%p, %lli, 0x%X, <unused>", file, (long long)count, data_type);
+
+ n = file->pos = (off64_t)zzip_seek(file->edata,
+ (off_t)(count * GD_SIZE(data_type)), SEEK_SET);
+
+ if (n >= 0)
+ n /= GD_SIZE(data_type);
+
+ dreturn("%lli", (long long)n);
+ return n;
+}
+
+ssize_t _GD_ZzipRead(struct _gd_raw_file *file, void *data,
+ gd_type_t data_type, size_t nmemb)
+{
+ ssize_t n;
+
+ dtrace("%p, %p, 0x%X, %zu", file, data, data_type, nmemb);
+
+ n = zzip_read(file->edata, data, GD_SIZE(data_type) * nmemb);
+
+ if (n >= 0)
+ n /= GD_SIZE(data_type);
+
+ dreturn("%lli", (long long)n);
+ return n;
+}
+
+int _GD_ZzipClose(struct _gd_raw_file *file)
+{
+ int ret;
+
+ dtrace("%p", file);
+
+ ret = zzip_close(file->edata);
+
+ if (!ret) {
+ file->idata = -1;
+ file->edata = NULL;
+ }
+
+ dreturn("%i", ret);
+ return ret;
+}
+
+off64_t _GD_ZzipSize(int dirfd, struct _gd_raw_file *file, gd_type_t data_type,
+ int swap __gd_unused)
+{
+ ssize_t len;
+ char *ptr1, *ptr2;
+ ZZIP_FILE *fp;
+ off64_t size = 0;
+
+ dtrace("%i, %p, 0x%X, <unused>", dirfd, file, data_type);
+
+ /* zziplib doesn't seem to have a way to do these path shenannigans nicely */
+ ptr1 = gd_MakeFullPathOnly(file->D, dirfd, "");
+ if (ptr1 == NULL) {
+ dreturn("%i", 1);
+ return 1;
+ }
+
+ len = strlen(ptr1);
+ ptr2 = realloc(ptr1, len + strlen(file->name) + 2);
+ if (ptr2 == NULL) {
+ dreturn("%i", 1);
+ return 1;
+ }
+
+ ptr2[len] = '/';
+ strcpy(ptr2 + len + 1, file->name);
+
+ fp = zzip_open(ptr2, O_RDONLY);
+ free(ptr2);
+
+ if (fp == NULL) {
+ file->idata = -1;
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ if ((size = (off64_t)zzip_seek(fp, 0, SEEK_END)) == -1) {
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ zzip_close(fp);
+
+ size /= GD_SIZE(data_type);
+
+ dreturn("%lli", (long long)size);
+ return size;
+}
Property changes on: trunk/getdata/test
___________________________________________________________________
Modified: svn:ignore
- Makefile
Makefile.in
*.o
*.odirfile
*.swp
*.exe
.deps
.libs
add
add_affix
add_alias
add_bit
add_bit_bitnum
add_bit_bitsize
add_bit_invalid
add_bit_numbits
add_carray
add_clincom
add_code
add_const
add_cpolynom
add_crecip
add_crecip89
add_divide
add_divide_invalid
add_duplicate
add_format
add_invalid
add_lincom
add_lincom_invalid
add_lincom_nfields
add_linterp
add_linterp_invalid
add_multiply
add_multiply_invalid
add_phase
add_phase_invalid
add_polynom
add_protect
add_raw
add_raw_include
add_raw_invalid
add_raw_spf
add_raw_type
add_rdonly
add_recip
add_resolv
add_sbit
add_scalar
add_scalar_carray
add_sort
add_spec
add_spec_directive
add_spec_invalid
add_spec_meta
add_spec_resolv
add_string
add_string_affix
add_type
add_window
add_window_op
alias_list
alias_list_alias
alias_list_missing
alias_num
alias_num_alias
alias_num_missing
alias_target
alias_target_alias
alias_target_missing
alter_bit_bitnum
alter_bit_numbits
alter_carray_len
alter_carray_type
alter_const
alter_cpolynom
alter_crecip
alter_crecip89
alter_crecip_zero
alter_divide
alter_entry
alter_entry_affix
alter_entry_hidden
alter_entry_recode
alter_entry_scalar2a
alter_entry_scalar2n
alter_entry_scalar3
alter_entry_scalar4
alter_lincom_23
alter_lincom_32
alter_lincom_input
alter_lincom_offset
alter_lincom_slope
alter_linterp
alter_linterp_move
alter_mspec
alter_mspec_affix
alter_multiply
alter_phase
alter_polynom_coeff
alter_polynom_input
alter_polynom_ord
alter_raw_spf
alter_raw_type
alter_recip
alter_recip_zero
alter_spec
alter_spec_affix
alter_spec_meta
alter_window
ascii_add
ascii_get
ascii_get_get
ascii_nframes
ascii_put
bof
bof_lincom
bof_phase
bzip_get
bzip_get_get
bzip_move_from
bzip_nframes
bzip_put
close
close_bad
close_discard
close_null
convert_complex128_complex64
convert_complex128_float64
convert_complex128_int64
convert_complex128_uint64
convert_complex64_complex128
convert_complex64_float64
convert_complex64_int64
convert_complex64_uint64
convert_float32_complex128
convert_float32_complex64
convert_float32_float64
convert_float32_int16
convert_float32_int32
convert_float32_int64
convert_float32_int8
convert_float32_uint16
convert_float32_uint32
convert_float32_uint64
convert_float32_uint8
convert_float64_complex128
convert_float64_complex64
convert_float64_float32
convert_float64_int16
convert_float64_int32
convert_float64_int64
convert_float64_int8
convert_float64_uint16
convert_float64_uint32
convert_float64_uint64
convert_float64_uint8
convert_int16_complex128
convert_int16_complex64
convert_int16_float32
convert_int16_float64
convert_int16_int32
convert_int16_int64
convert_int16_int8
convert_int16_uint16
convert_int16_uint32
convert_int16_uint64
convert_int16_uint8
convert_int32_complex128
convert_int32_complex64
convert_int32_float32
convert_int32_float64
convert_int32_int16
convert_int32_int64
convert_int32_int8
convert_int32_uint16
convert_int32_uint32
convert_int32_uint64
convert_int32_uint8
convert_int64_complex128
convert_int64_complex64
convert_int64_float32
convert_int64_float64
convert_int64_int16
convert_int64_int32
convert_int64_int8
convert_int64_uint16
convert_int64_uint32
convert_int64_uint64
convert_int64_uint8
convert_int8_complex128
convert_int8_complex64
convert_int8_float32
convert_int8_float64
convert_int8_int16
convert_int8_int32
convert_int8_int64
convert_int8_uint16
convert_int8_uint32
convert_int8_uint64
convert_int8_uint8
convert_uint16_complex128
convert_uint16_complex64
convert_uint16_float32
convert_uint16_float64
convert_uint16_int16
convert_uint16_int32
convert_uint16_int64
convert_uint16_int8
convert_uint16_uint32
convert_uint16_uint64
convert_uint16_uint8
convert_uint32_complex128
convert_uint32_complex64
convert_uint32_float32
convert_uint32_float64
convert_uint32_int16
convert_uint32_int32
convert_uint32_int64
convert_uint32_int8
convert_uint32_uint16
convert_uint32_uint64
convert_uint32_uint8
convert_uint64_complex128
convert_uint64_complex64
convert_uint64_float32
convert_uint64_float64
convert_uint64_int16
convert_uint64_int32
convert_uint64_int64
convert_uint64_int8
convert_uint64_uint16
convert_uint64_uint32
convert_uint64_uint8
convert_uint8_complex128
convert_uint8_complex64
convert_uint8_float32
convert_uint8_float64
convert_uint8_int16
convert_uint8_int32
convert_uint8_int64
convert_uint8_int8
convert_uint8_uint16
convert_uint8_uint32
convert_uint8_uint64
creat
creat_excl
creat_rdonly
cvlist
cvlist_array
cvlist_array_hidden
cvlist_array_meta
cvlist_array_meta_hidden
cvlist_hidden
cvlist_invalid
cvlist_meta
cvlist_meta_hidden
cvlist_meta_invalid
del
del_carray
del_carray_deref
del_const
del_const_deref
del_const_force
del_data
del_derived
del_derived_after
del_derived_force
del_meta
del_meta_force
dfes_bit
dfes_divide
dfes_lincom
dfes_linterp
dfes_multiply
dfes_null
dfes_phase
dfes_raw
dfes_recip
dfes_zero
encode_alter
encode_get
encode_move
endian_alter
endian_alter_sie
endian_get
endian_move
entry_bad_code
entry_bit
entry_bit_scalar
entry_divide
entry_invalid
entry_lincom
entry_lincom_scalar
entry_linterp
entry_multiply
entry_phase
entry_phase_scalar
entry_polynom
entry_polynom_scalar
entry_raw
entry_raw_scalar
entry_raw_scalar_code
entry_raw_scalar_type
entry_recip
entry_scalar_repr
entry_type
entry_type_alias
entry_window
entry_window_scalar
eof
eof_index
eof_lincom
eof_phase
error
error_error
error_num
error_short
file
file_code
file_type
flist
flist_hidden
flist_invalid
flist_meta
flist_meta_hidden
flist_meta_invalid
flist_type
flist_type_hidden
flist_type_invalid
flist_type_meta
flist_type_meta_hidden
flist_type_meta_invalid
flush
flush_all
flush_bad_code
flush_invalid
flush_meta
flush_spec
foffs_alter
foffs_get
foffs_move
fragment_affix
fragment_affix_alter
fragment_affix_alter2
fragment_affix_dup
fragment_index
fragment_index_alias
fragment_name
fragment_name_oor
fragment_num
fragment_parent
get64
get_bad_code
get_bit
get_carray
get_carray_len
get_carray_slice
get_char
get_clincom
get_complex128
get_complex64
get_const
get_const_complex
get_const_repr
get_cpolynom
get_divide
get_endian16
get_endian32
get_endian64
get_endian8
get_endian_complex128_arm
get_endian_complex128_big
get_endian_complex128_little
get_endian_complex64_arm
get_endian_complex64_big
get_endian_complex64_little
get_endian_float32_arm
get_endian_float32_big
get_endian_float32_little
get_endian_float64_arm
get_endian_float64_big
get_endian_float64_little
get_ff
get_float32
get_float64
get_foffs
get_fs
get_here
get_here_foffs
get_heres
get_int16
get_int32
get_int64
get_int8
get_invalid
get_lincom1
get_lincom2
get_lincom3
get_lincom_noin
get_lincom_non
get_linterp
get_linterp_noin
get_linterp_notab
get_linterp_sort
get_multiply
get_multiply_noin
get_nonexistent
get_null
get_off64
get_phase
get_phase_affix
get_polynom
get_polynom_noin
get_recip
get_recip_const
get_recurse
get_rofs
get_sbit
get_sf
get_ss
get_type
get_uint16
get_uint32
get_uint64
get_window
get_window_clr
get_window_ge
get_window_gt
get_window_le
get_window_lt
get_window_ne
get_window_set
get_zero
global_name
global_ref
global_ref_empty
global_ref_set
gzip_add
gzip_get
gzip_get_get
gzip_get_put
gzip_move_from
gzip_move_to
gzip_nframes
gzip_put
gzip_put_get
header_complex
hide
hide_hidden
hide_unhide
include
include_accmode
include_affix
include_auto
include_cb
include_creat
include_ignore
include_index
include_invalid
include_nonexistent
include_pc
include_ref
include_syntax
index
index_domain
index_range
legacy_get
legacy_get_put
legacy_get_rofs
legacy_nframes
legacy_nonexistent
legacy_put
legacy_spf
lzma_get
lzma_nframes
madd
madd_affix
madd_alias
madd_bit
madd_bit_invalid
madd_carray
madd_clincom
madd_const
madd_cpolynom
madd_crecip
madd_crecip89
madd_divide
madd_index
madd_lincom
madd_lincom_invalid
madd_linterp
madd_linterp_invalid
madd_multiply
madd_multiply_invalid
madd_phase
madd_phase_invalid
madd_polynom
madd_recip
madd_sbit
madd_spec
madd_spec_directive
madd_spec_invalid
madd_spec_resolv
madd_string
madd_window
move
move_affix
move_affix_dup
move_alias
move_data_enc_ar
move_data_enc_ra
move_data_endian
move_data_foffs
move_data_nop
move_index
move_meta
move_protect
move_subdir
name
name_affix
name_affix_bad
name_after
name_after_const
name_dup
name_move
name_update
name_update_const
nfields
nfields_hidden
nfields_invalid
nfields_type
nfields_type_hidden
nfields_type_invalid
nfields_vector
nfields_vector_hidden
nfields_vector_invalid
nframes
nframes64
nframes_empty
nframes_invalid
nframes_off64
nframes_spf
nmeta
nmeta_hidden
nmeta_invalid
nmeta_parent
nmeta_type
nmeta_type_hidden
nmeta_type_invalid
nmeta_type_parent
nmeta_vectors
nmeta_vectors_del
nmeta_vectors_hidden
nmeta_vectors_invalid
nmeta_vectors_parent
open
open_cb_abort
open_cb_cont
open_cb_ignore
open_cb_invalid
open_cb_rescan
open_eaccess
open_nonexistent
open_notdirfile
parse_alias
parse_alias_code
parse_alias_dup
parse_alias_meta
parse_alias_missing
parse_badline
parse_bit
parse_bit4
parse_bit_bitnum
parse_bit_bitsize
parse_bit_ncols
parse_bit_numbits
parse_bit_scalar
parse_carray
parse_carray_long
parse_const
parse_const_ncols
parse_divide
parse_duplicate
parse_duplicate_ignore
parse_endian_bad
parse_endian_big
parse_endian_force
parse_endian_little
parse_endian_slash
parse_eol
parse_foffs
parse_foffs_include
parse_foffs_slash
parse_hidden
parse_hidden_field
parse_hidden_meta
parse_include
parse_include_absolute
parse_include_absrel
parse_include_loop
parse_include_nonexistent
parse_include_prefix
parse_include_prefix_dup
parse_include_preprefix
parse_include_relabs
parse_include_relrel
parse_include_slash
parse_include_suffix
parse_include_sufsuffix
parse_index
parse_lincom
parse_lincom_ncols1
parse_lincom_ncols2
parse_lincom_nfields
parse_lincom_nofields
parse_lincom_non
parse_lincom_non_ncols
parse_lincom_scalar
parse_linterp
parse_linterp_ncols
parse_malias
parse_malias_dup
parse_meta
parse_meta_affix
parse_meta_alias
parse_meta_implicit
parse_meta_implicit2
parse_meta_implicit_affix
parse_meta_index
parse_meta_index2
parse_meta_jump
parse_meta_malias
parse_meta_meta
parse_meta_parent
parse_meta_raw
parse_multiply
parse_multiply_ncols
parse_name
parse_name_dot
parse_name_ext
parse_name_pedantic
parse_ncols
parse_phase
parse_phase_ncols
parse_phase_scalar
parse_polynom
parse_polynom_ncols1
parse_polynom_ncols2
parse_polynom_scalar
parse_protect_all
parse_protect_bad
parse_protect_data
parse_protect_format
parse_protect_none
parse_quote
parse_quote_mismatch
parse_raw
parse_raw_char
parse_raw_ncols
parse_raw_scalar
parse_raw_spf
parse_raw_type
parse_recip
parse_ref
parse_ref_nonexistent
parse_sbit
parse_sort
parse_string
parse_string_ncols
parse_string_null
parse_version
parse_version_89
parse_version_98
parse_version_include
parse_version_p8
parse_version_p9
parse_version_permissive
parse_version_slash
parse_whitespace
parse_window
parse_window_ncols
parse_window_op
parse_window_scalar
protect_alter
protect_get
put64
put_bad_code
put_bit
put_bof
put_carray
put_carray_slice
put_char
put_complex128
put_complex64
put_const
put_const_protect
put_divide
put_endian16
put_endian32
put_endian64
put_endian8
put_endian_complex128_arm
put_endian_complex128_big
put_endian_complex128_little
put_endian_complex64_arm
put_endian_complex64_big
put_endian_complex64_little
put_endian_float32_arm
put_endian_float32_big
put_endian_float32_little
put_endian_float64_arm
put_endian_float64_big
put_endian_float64_little
put_ff
put_float32
put_float64
put_foffs
put_fs
put_here
put_heres
put_int16
put_int32
put_int64
put_int8
put_invalid
put_lincom1
put_lincom2
put_lincom_noin
put_linterp
put_linterp_noin
put_linterp_nomono
put_linterp_notab
put_linterp_reverse
put_multiply
put_null
put_off64
put_phase
put_phase_noin
put_polynom1
put_polynom2
put_polynom_noin
put_protect
put_rdonly
put_recip
put_recurse
put_repr
put_rofs
put_sbit
put_sf
put_ss
put_string
put_string_protect
put_type
put_uint16
put_uint32
put_uint64
put_window
ref
ref_none
ref_two
repr_a
repr_float32
repr_float64
repr_i
repr_int16
repr_int32
repr_int64
repr_int8
repr_m
repr_r
repr_real_a
repr_real_i
repr_real_m
repr_real_r
repr_uint16
repr_uint32
repr_uint64
repr_uint8
seek64
seek_cur
seek_end
seek_foffs
seek_set
sie_get_big
sie_get_little
sie_move_from
sie_move_to
sie_nframes_big
sie_nframes_little
sie_put_big
sie_put_little
slim_get
slim_nframes
slim_put
spf
spf_alias
spf_alias_meta
spf_alias_missing
spf_divide
spf_lincom
spf_multiply
spf_polynom
spf_recip
spf_recurse
svlist
svlist_hidden
svlist_invalid
svlist_meta
svlist_meta_hidden
svlist_meta_invalid
tell
tell64
trunc
trunc_rdonly
trunc_rofs
unclude
unclude_del
unclude_move
version_0
version_0_write
version_1
version_1_write
version_2
version_2_write
version_3
version_3_write
version_4
version_4_write
version_5
version_5_strict
version_5_write
version_6
version_6_strict
version_6_write
version_7
version_7_strict
version_7_write
version_8
version_8_strict
version_8_write
version_9
version_9_strict
version_9_write
vlist
vlist_alias
vlist_hidden
vlist_invalid
vlist_meta
vlist_meta_hidden
vlist_meta_invalid
xz_get
xz_nframes
+ Makefile
Makefile.in
*.o
*.odirfile
*.swp
*.exe
.deps
.libs
add
add_affix
add_alias
add_bit
add_bit_bitnum
add_bit_bitsize
add_bit_invalid
add_bit_numbits
add_carray
add_clincom
add_code
add_const
add_cpolynom
add_crecip
add_crecip89
add_divide
add_divide_invalid
add_duplicate
add_format
add_invalid
add_lincom
add_lincom_invalid
add_lincom_nfields
add_linterp
add_linterp_invalid
add_multiply
add_multiply_invalid
add_phase
add_phase_invalid
add_polynom
add_protect
add_raw
add_raw_include
add_raw_invalid
add_raw_spf
add_raw_type
add_rdonly
add_recip
add_resolv
add_sbit
add_scalar
add_scalar_carray
add_sort
add_spec
add_spec_directive
add_spec_invalid
add_spec_meta
add_spec_resolv
add_string
add_string_affix
add_type
add_window
add_window_op
alias_list
alias_list_alias
alias_list_missing
alias_num
alias_num_alias
alias_num_missing
alias_target
alias_target_alias
alias_target_missing
alter_bit_bitnum
alter_bit_numbits
alter_carray_len
alter_carray_type
alter_const
alter_cpolynom
alter_crecip
alter_crecip89
alter_crecip_zero
alter_divide
alter_entry
alter_entry_affix
alter_entry_hidden
alter_entry_recode
alter_entry_scalar2a
alter_entry_scalar2n
alter_entry_scalar3
alter_entry_scalar4
alter_lincom_23
alter_lincom_32
alter_lincom_input
alter_lincom_offset
alter_lincom_slope
alter_linterp
alter_linterp_move
alter_mspec
alter_mspec_affix
alter_multiply
alter_phase
alter_polynom_coeff
alter_polynom_input
alter_polynom_ord
alter_raw_spf
alter_raw_type
alter_recip
alter_recip_zero
alter_spec
alter_spec_affix
alter_spec_meta
alter_window
ascii_add
ascii_get
ascii_get_get
ascii_nframes
ascii_put
bof
bof_lincom
bof_phase
bzip_get
bzip_get_get
bzip_move_from
bzip_nframes
bzip_put
close
close_bad
close_discard
close_null
convert_complex128_complex64
convert_complex128_float64
convert_complex128_int64
convert_complex128_uint64
convert_complex64_complex128
convert_complex64_float64
convert_complex64_int64
convert_complex64_uint64
convert_float32_complex128
convert_float32_complex64
convert_float32_float64
convert_float32_int16
convert_float32_int32
convert_float32_int64
convert_float32_int8
convert_float32_uint16
convert_float32_uint32
convert_float32_uint64
convert_float32_uint8
convert_float64_complex128
convert_float64_complex64
convert_float64_float32
convert_float64_int16
convert_float64_int32
convert_float64_int64
convert_float64_int8
convert_float64_uint16
convert_float64_uint32
convert_float64_uint64
convert_float64_uint8
convert_int16_complex128
convert_int16_complex64
convert_int16_float32
convert_int16_float64
convert_int16_int32
convert_int16_int64
convert_int16_int8
convert_int16_uint16
convert_int16_uint32
convert_int16_uint64
convert_int16_uint8
convert_int32_complex128
convert_int32_complex64
convert_int32_float32
convert_int32_float64
convert_int32_int16
convert_int32_int64
convert_int32_int8
convert_int32_uint16
convert_int32_uint32
convert_int32_uint64
convert_int32_uint8
convert_int64_complex128
convert_int64_complex64
convert_int64_float32
convert_int64_float64
convert_int64_int16
convert_int64_int32
convert_int64_int8
convert_int64_uint16
convert_int64_uint32
convert_int64_uint64
convert_int64_uint8
convert_int8_complex128
convert_int8_complex64
convert_int8_float32
convert_int8_float64
convert_int8_int16
convert_int8_int32
convert_int8_int64
convert_int8_uint16
convert_int8_uint32
convert_int8_uint64
convert_int8_uint8
convert_uint16_complex128
convert_uint16_complex64
convert_uint16_float32
convert_uint16_float64
convert_uint16_int16
convert_uint16_int32
convert_uint16_int64
convert_uint16_int8
convert_uint16_uint32
convert_uint16_uint64
convert_uint16_uint8
convert_uint32_complex128
convert_uint32_complex64
convert_uint32_float32
convert_uint32_float64
convert_uint32_int16
convert_uint32_int32
convert_uint32_int64
convert_uint32_int8
convert_uint32_uint16
convert_uint32_uint64
convert_uint32_uint8
convert_uint64_complex128
convert_uint64_complex64
convert_uint64_float32
convert_uint64_float64
convert_uint64_int16
convert_uint64_int32
convert_uint64_int64
convert_uint64_int8
convert_uint64_uint16
convert_uint64_uint32
convert_uint64_uint8
convert_uint8_complex128
convert_uint8_complex64
convert_uint8_float32
convert_uint8_float64
convert_uint8_int16
convert_uint8_int32
convert_uint8_int64
convert_uint8_int8
convert_uint8_uint16
convert_uint8_uint32
convert_uint8_uint64
creat
creat_excl
creat_rdonly
cvlist
cvlist_array
cvlist_array_hidden
cvlist_array_meta
cvlist_array_meta_hidden
cvlist_hidden
cvlist_invalid
cvlist_meta
cvlist_meta_hidden
cvlist_meta_invalid
del
del_carray
del_carray_deref
del_const
del_const_deref
del_const_force
del_data
del_derived
del_derived_after
del_derived_force
del_meta
del_meta_force
dfes_bit
dfes_divide
dfes_lincom
dfes_linterp
dfes_multiply
dfes_null
dfes_phase
dfes_raw
dfes_recip
dfes_zero
encode_alter
encode_get
encode_move
endian_alter
endian_alter_sie
endian_get
endian_move
entry_bad_code
entry_bit
entry_bit_scalar
entry_divide
entry_invalid
entry_lincom
entry_lincom_scalar
entry_linterp
entry_multiply
entry_phase
entry_phase_scalar
entry_polynom
entry_polynom_scalar
entry_raw
entry_raw_scalar
entry_raw_scalar_code
entry_raw_scalar_type
entry_recip
entry_scalar_repr
entry_type
entry_type_alias
entry_window
entry_window_scalar
eof
eof_index
eof_lincom
eof_phase
error
error_error
error_num
error_short
file
file_code
file_type
flist
flist_hidden
flist_invalid
flist_meta
flist_meta_hidden
flist_meta_invalid
flist_type
flist_type_hidden
flist_type_invalid
flist_type_meta
flist_type_meta_hidden
flist_type_meta_invalid
flush
flush_all
flush_bad_code
flush_invalid
flush_meta
flush_spec
foffs_alter
foffs_get
foffs_move
fragment_affix
fragment_affix_alter
fragment_affix_alter2
fragment_affix_dup
fragment_index
fragment_index_alias
fragment_name
fragment_name_oor
fragment_num
fragment_parent
get64
get_bad_code
get_bit
get_carray
get_carray_len
get_carray_slice
get_char
get_clincom
get_complex128
get_complex64
get_const
get_const_complex
get_const_repr
get_cpolynom
get_divide
get_endian16
get_endian32
get_endian64
get_endian8
get_endian_complex128_arm
get_endian_complex128_big
get_endian_complex128_little
get_endian_complex64_arm
get_endian_complex64_big
get_endian_complex64_little
get_endian_float32_arm
get_endian_float32_big
get_endian_float32_little
get_endian_float64_arm
get_endian_float64_big
get_endian_float64_little
get_ff
get_float32
get_float64
get_foffs
get_fs
get_here
get_here_foffs
get_heres
get_int16
get_int32
get_int64
get_int8
get_invalid
get_lincom1
get_lincom2
get_lincom3
get_lincom_noin
get_lincom_non
get_linterp
get_linterp_noin
get_linterp_notab
get_linterp_sort
get_multiply
get_multiply_noin
get_nonexistent
get_null
get_off64
get_phase
get_phase_affix
get_polynom
get_polynom_noin
get_recip
get_recip_const
get_recurse
get_rofs
get_sbit
get_sf
get_ss
get_type
get_uint16
get_uint32
get_uint64
get_window
get_window_clr
get_window_ge
get_window_gt
get_window_le
get_window_lt
get_window_ne
get_window_set
get_zero
global_name
global_ref
global_ref_empty
global_ref_set
gzip_add
gzip_get
gzip_get_get
gzip_get_put
gzip_move_from
gzip_move_to
gzip_nframes
gzip_put
gzip_put_get
header_complex
hide
hide_hidden
hide_unhide
include
include_accmode
include_affix
include_auto
include_cb
include_creat
include_ignore
include_index
include_invalid
include_nonexistent
include_pc
include_ref
include_syntax
index
index_domain
index_range
legacy_get
legacy_get_put
legacy_get_rofs
legacy_nframes
legacy_nonexistent
legacy_put
legacy_spf
lzma_get
lzma_nframes
madd
madd_affix
madd_alias
madd_bit
madd_bit_invalid
madd_carray
madd_clincom
madd_const
madd_cpolynom
madd_crecip
madd_crecip89
madd_divide
madd_index
madd_lincom
madd_lincom_invalid
madd_linterp
madd_linterp_invalid
madd_multiply
madd_multiply_invalid
madd_phase
madd_phase_invalid
madd_polynom
madd_recip
madd_sbit
madd_spec
madd_spec_directive
madd_spec_invalid
madd_spec_resolv
madd_string
madd_window
move
move_affix
move_affix_dup
move_alias
move_data_enc_ar
move_data_enc_ra
move_data_endian
move_data_foffs
move_data_nop
move_index
move_meta
move_protect
move_subdir
name
name_affix
name_affix_bad
name_after
name_after_const
name_dup
name_move
name_update
name_update_const
nfields
nfields_hidden
nfields_invalid
nfields_type
nfields_type_hidden
nfields_type_invalid
nfields_vector
nfields_vector_hidden
nfields_vector_invalid
nframes
nframes64
nframes_empty
nframes_invalid
nframes_off64
nframes_spf
nmeta
nmeta_hidden
nmeta_invalid
nmeta_parent
nmeta_type
nmeta_type_hidden
nmeta_type_invalid
nmeta_type_parent
nmeta_vectors
nmeta_vectors_del
nmeta_vectors_hidden
nmeta_vectors_invalid
nmeta_vectors_parent
open
open_cb_abort
open_cb_cont
open_cb_ignore
open_cb_invalid
open_cb_rescan
open_eaccess
open_nonexistent
open_notdirfile
parse_alias
parse_alias_code
parse_alias_dup
parse_alias_meta
parse_alias_missing
parse_badline
parse_bit
parse_bit4
parse_bit_bitnum
parse_bit_bitsize
parse_bit_ncols
parse_bit_numbits
parse_bit_scalar
parse_carray
parse_carray_long
parse_const
parse_const_ncols
parse_divide
parse_duplicate
parse_duplicate_ignore
parse_endian_bad
parse_endian_big
parse_endian_force
parse_endian_little
parse_endian_slash
parse_eol
parse_foffs
parse_foffs_include
parse_foffs_slash
parse_hidden
parse_hidden_field
parse_hidden_meta
parse_include
parse_include_absolute
parse_include_absrel
parse_include_loop
parse_include_nonexistent
parse_include_prefix
parse_include_prefix_dup
parse_include_preprefix
parse_include_relabs
parse_include_relrel
parse_include_slash
parse_include_suffix
parse_include_sufsuffix
parse_index
parse_lincom
parse_lincom_ncols1
parse_lincom_ncols2
parse_lincom_nfields
parse_lincom_nofields
parse_lincom_non
parse_lincom_non_ncols
parse_lincom_scalar
parse_linterp
parse_linterp_ncols
parse_malias
parse_malias_dup
parse_meta
parse_meta_affix
parse_meta_alias
parse_meta_implicit
parse_meta_implicit2
parse_meta_implicit_affix
parse_meta_index
parse_meta_index2
parse_meta_jump
parse_meta_malias
parse_meta_meta
parse_meta_parent
parse_meta_raw
parse_multiply
parse_multiply_ncols
parse_name
parse_name_dot
parse_name_ext
parse_name_pedantic
parse_ncols
parse_phase
parse_phase_ncols
parse_phase_scalar
parse_polynom
parse_polynom_ncols1
parse_polynom_ncols2
parse_polynom_scalar
parse_protect_all
parse_protect_bad
parse_protect_data
parse_protect_format
parse_protect_none
parse_quote
parse_quote_mismatch
parse_raw
parse_raw_char
parse_raw_ncols
parse_raw_scalar
parse_raw_spf
parse_raw_type
parse_recip
parse_ref
parse_ref_nonexistent
parse_sbit
parse_sort
parse_string
parse_string_ncols
parse_string_null
parse_version
parse_version_89
parse_version_98
parse_version_include
parse_version_p8
parse_version_p9
parse_version_permissive
parse_version_slash
parse_whitespace
parse_window
parse_window_ncols
parse_window_op
parse_window_scalar
protect_alter
protect_get
put64
put_bad_code
put_bit
put_bof
put_carray
put_carray_slice
put_char
put_complex128
put_complex64
put_const
put_const_protect
put_divide
put_endian16
put_endian32
put_endian64
put_endian8
put_endian_complex128_arm
put_endian_complex128_big
put_endian_complex128_little
put_endian_complex64_arm
put_endian_complex64_big
put_endian_complex64_little
put_endian_float32_arm
put_endian_float32_big
put_endian_float32_little
put_endian_float64_arm
put_endian_float64_big
put_endian_float64_little
put_ff
put_float32
put_float64
put_foffs
put_fs
put_here
put_heres
put_int16
put_int32
put_int64
put_int8
put_invalid
put_lincom1
put_lincom2
put_lincom_noin
put_linterp
put_linterp_noin
put_linterp_nomono
put_linterp_notab
put_linterp_reverse
put_multiply
put_null
put_off64
put_phase
put_phase_noin
put_polynom1
put_polynom2
put_polynom_noin
put_protect
put_rdonly
put_recip
put_recurse
put_repr
put_rofs
put_sbit
put_sf
put_ss
put_string
put_string_protect
put_type
put_uint16
put_uint32
put_uint64
put_window
ref
ref_none
ref_two
repr_a
repr_float32
repr_float64
repr_i
repr_int16
repr_int32
repr_int64
repr_int8
repr_m
repr_r
repr_real_a
repr_real_i
repr_real_m
repr_real_r
repr_uint16
repr_uint32
repr_uint64
repr_uint8
seek64
seek_cur
seek_end
seek_foffs
seek_set
sie_get_big
sie_get_little
sie_move_from
sie_move_to
sie_nframes_big
sie_nframes_little
sie_put_big
sie_put_little
slim_get
slim_nframes
slim_put
spf
spf_alias
spf_alias_meta
spf_alias_missing
spf_divide
spf_lincom
spf_multiply
spf_polynom
spf_recip
spf_recurse
svlist
svlist_hidden
svlist_invalid
svlist_meta
svlist_meta_hidden
svlist_meta_invalid
tell
tell64
trunc
trunc_rdonly
trunc_rofs
unclude
unclude_del
unclude_move
version_0
version_0_write
version_1
version_1_write
version_2
version_2_write
version_3
version_3_write
version_4
version_4_write
version_5
version_5_strict
version_5_write
version_6
version_6_strict
version_6_write
version_7
version_7_strict
version_7_write
version_8
version_8_strict
version_8_write
version_9
version_9_strict
version_9_write
vlist
vlist_alias
vlist_hidden
vlist_invalid
vlist_meta
vlist_meta_hidden
vlist_meta_invalid
xz_get
xz_nframes
zzip_get
zzip_get_get
zzip_nframes
Modified: trunk/getdata/test/Makefile.am
===================================================================
--- trunk/getdata/test/Makefile.am 2011-12-27 06:37:42 UTC (rev 639)
+++ trunk/getdata/test/Makefile.am 2011-12-28 17:35:32 UTC (rev 640)
@@ -343,6 +343,8 @@
XZ_TESTS=xz_get xz_nframes
+ZZIP_TESTS=zzip_get zzip_get_get zzip_nframes
+
TESTS=$(ADD_TESTS) $(ALIAS_TESTS) $(ALTER_TESTS) $(ASCII_TESTS) \
$(BOF_TESTS) $(BZIP_TESTS) $(CLOSE_TESTS) $(CONVERT_TESTS) \
$(CREAT_TESTS) $(CVLIST_TESTS) $(DEL_TESTS) $(DFES_TESTS) \
@@ -356,7 +358,7 @@
$(PUT_TESTS) $(REF_TESTS) $(REPR_TESTS) $(SEEK_TESTS) \
$(SIE_TESTS) $(SLIM_TESTS) $(SPF_TESTS) $(SVLIST_TESTS) \
$(TELL_TESTS) $(TRUNC_TESTS) $(UNCLUDE_TESTS) $(VERSION_TESTS) \
- $(VLIST_TESTS) $(XZ_TESTS)
+ $(VLIST_TESTS) $(XZ_TESTS) $(ZZIP_TESTS)
check_PROGRAMS=$(TESTS)
Modified: trunk/getdata/test/add_alias.c
===================================================================
--- trunk/...
[truncated message content] |
|
From: <ket...@us...> - 2011-12-27 06:37:51
|
Revision: 639
http://getdata.svn.sourceforge.net/getdata/?rev=639&view=rev
Author: ketiltrout
Date: 2011-12-27 06:37:42 +0000 (Tue, 27 Dec 2011)
Log Message:
-----------
Update bindings for DSV9. Fix field list inclusion tests.
Modified Paths:
--------------
trunk/getdata/ChangeLog
trunk/getdata/TODO
trunk/getdata/bindings/cxx/Makefile.am
trunk/getdata/bindings/cxx/bitentry.cpp
trunk/getdata/bindings/cxx/carrayentry.cpp
trunk/getdata/bindings/cxx/constentry.cpp
trunk/getdata/bindings/cxx/dirfile.cpp
trunk/getdata/bindings/cxx/divideentry.cpp
trunk/getdata/bindings/cxx/entry.cpp
trunk/getdata/bindings/cxx/fragment.cpp
trunk/getdata/bindings/cxx/getdata/dirfile.h
trunk/getdata/bindings/cxx/getdata/entry.h
trunk/getdata/bindings/cxx/getdata/fragment.h
trunk/getdata/bindings/cxx/getdata/rawentry.h
trunk/getdata/bindings/cxx/indexentry.cpp
trunk/getdata/bindings/cxx/lincomentry.cpp
trunk/getdata/bindings/cxx/linterpentry.cpp
trunk/getdata/bindings/cxx/multiplyentry.cpp
trunk/getdata/bindings/cxx/phaseentry.cpp
trunk/getdata/bindings/cxx/polynomentry.cpp
trunk/getdata/bindings/cxx/rawentry.cpp
trunk/getdata/bindings/cxx/recipentry.cpp
trunk/getdata/bindings/cxx/sbitentry.cpp
trunk/getdata/bindings/cxx/stringentry.cpp
trunk/getdata/bindings/cxx/test/Makefile.am
trunk/getdata/bindings/cxx/test/big_test.cpp
trunk/getdata/bindings/f77/Makefile.am
trunk/getdata/bindings/f77/fgetdata.c
trunk/getdata/bindings/f77/getdata.f.in
trunk/getdata/bindings/f77/getdata.f90.in
trunk/getdata/bindings/f77/test/big_test.f
trunk/getdata/bindings/f77/test/big_test95.f90
trunk/getdata/bindings/idl/Makefile.am
trunk/getdata/bindings/idl/getdata.c
trunk/getdata/bindings/idl/test/big_test.pro
trunk/getdata/bindings/make_parameters.c
trunk/getdata/bindings/perl/GetData.xs
trunk/getdata/bindings/perl/Makefile.am
trunk/getdata/bindings/perl/simple_funcs.pl
trunk/getdata/bindings/perl/simple_funcs.xsin
trunk/getdata/bindings/perl/t/big_test.t
trunk/getdata/bindings/perl/t/callback.t
trunk/getdata/bindings/perl/typemap
trunk/getdata/bindings/python/pydirfile.c
trunk/getdata/bindings/python/pyentry.c
trunk/getdata/bindings/python/pyfragment.c
trunk/getdata/bindings/python/pygetdata.c
trunk/getdata/bindings/python/pygetdata.h
trunk/getdata/bindings/python/test/big_test.py
trunk/getdata/doc/README.cxx
trunk/getdata/doc/README.f77
trunk/getdata/doc/README.f95
trunk/getdata/doc/README.idl
trunk/getdata/doc/list.tests
trunk/getdata/src/add.c
trunk/getdata/src/close.c
trunk/getdata/src/debug.c
trunk/getdata/src/entry.c
trunk/getdata/src/field_list.c
trunk/getdata/src/flush.c
trunk/getdata/src/fragment.c
trunk/getdata/src/internal.h
trunk/getdata/src/meta_list.c
trunk/getdata/src/mod.c
trunk/getdata/src/name.c
trunk/getdata/test/Makefile.am
trunk/getdata/test/add_alias.c
trunk/getdata/test/add_resolv.c
trunk/getdata/test/add_spec_resolv.c
trunk/getdata/test/alias_target.c
trunk/getdata/test/alias_target_alias.c
trunk/getdata/test/alias_target_missing.c
trunk/getdata/test/fragment_affix_alter2.c
trunk/getdata/test/madd_alias.c
trunk/getdata/test/madd_spec_resolv.c
Added Paths:
-----------
trunk/getdata/bindings/cxx/getdata/windowentry.h
trunk/getdata/bindings/cxx/internal.h
trunk/getdata/bindings/cxx/windowentry.cpp
trunk/getdata/test/vlist_alias.c
Property Changed:
----------------
trunk/getdata/test/
Modified: trunk/getdata/ChangeLog
===================================================================
--- trunk/getdata/ChangeLog 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/ChangeLog 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,3 +1,45 @@
+2011-12-27 D. V. Wiebe <ge...@ke...> svn:639
+ * src/add.c (gd_madd_lincom gd_madd_clincom gd_madd_linterp gd_madd_bit
+ gd_madd_sbit gd_madd_multiply gd_madd_phase gd_madd_polynom gd_madd_cpolynom
+ gd_madd_string gd_madd_const gd_madd_carray): Zero entry before
+ initialisation.
+
+ * src/fragment.c (gd_alter_affixes): Allow {pre,suf}fix == NULL to indicate
+ no change.
+
+ * src/entry.c (_GD_FreeE): Handle aliases.
+
+ * src/close.c (_GD_FreeD): Free fragment affixes.
+
+ * src/debug.c (gd_colnil gd_coladd gd_colsub): Export debugging symbols.
+
+ * src/field_list.c (_GD_ListEntry): Added.
+ * src/field_list.c (gd_constants gd_carrays gd_strings gd_field_list_by_type
+ gd_vector_list gd_field_list) src/meta_list.c (gd_mconstants gd_mcarrays
+ gd_mstrings gd_mfield_list_by_type gd_mvector_list gd_mfield_list): Call
+ _GD_ListEntry.
+
+ * bindings/python/pyentry.c bindings/python/pyfragment.c
+ bindings/python/pydirfile.c: Update for DSV9.
+ * bindings/cxx/fragment.cpp bindings/cxx/entry.cpp bindings/cxx/dirfile.cpp
+ bindings/cxx/getdata/entry.h bindings/cxx/getdata/dirfile.h: Update for
+ DSV9.
+ * bindings/cxx/windowentry.cpp bindings/cxx/getdata/windowentry.h: Added.
+ * bindings/perl/GetData.xs bindings/perl/simple_funcs.xsin: Update for DSV9.
+ * bindings/f77/fgetdata.c bindings/f77/getdata.f90.in: Update for DSV9.
+ * bindings/idl/getdata.c: Update for DSV9. Removed most of the function
+ aliases.
+
+ * bindings/make_parameters.c: Update for DSV9. Add missing
+ GD_E_UNKNWON_ENCODING.
+
+ * bindings/python/pygetdata.c (initpygetdata): Handle gaps in
+ gdpy_exception_list. Fix exception list.
+
+ * bindings/python/pyentry.c (gdpy_entry_settable): Set correct parameter.
+
+ * test/vlist_alias.c: Added.
+
2011-12-20 D. V. Wiebe <ge...@ke...> svn:638
* src/entry.c (_GD_GetScalar _GD_CalculateEntry) src/common.c (_GD_GetRepr
_GD_BadInput _GD_FindFieldAndRepr: Optionally prohibit setting errors (for
Modified: trunk/getdata/TODO
===================================================================
--- trunk/getdata/TODO 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/TODO 2011-12-27 06:37:42 UTC (rev 639)
@@ -2,5 +2,3 @@
* Hashed compressed files
* linterp table path munging [MH]
* Make webpage suck less
-
-* aliasing [MT]
Modified: trunk/getdata/bindings/cxx/Makefile.am
===================================================================
--- trunk/getdata/bindings/cxx/Makefile.am 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/Makefile.am 2011-12-27 06:37:42 UTC (rev 639)
@@ -41,7 +41,8 @@
getdata/stringentry.h getdata/indexentry.h \
getdata/sbitentry.h getdata/polynomentry.h \
getdata/fragment.h getdata/divideentry.h \
- getdata/recipentry.h getdata/carrayentry.h
+ getdata/recipentry.h getdata/carrayentry.h \
+ getdata/windowentry.h
lib_LTLIBRARIES=libgetdata++.la
libgetdata___la_SOURCES = dirfile.cpp bitentry.cpp carrayentry.cpp \
@@ -49,10 +50,10 @@
fragment.cpp indexentry.cpp lincomentry.cpp \
linterpentry.cpp multiplyentry.cpp phaseentry.cpp \
polynomentry.cpp rawentry.cpp recipentry.cpp \
- sbitentry.cpp stringentry.cpp \
- ${getdata_include_HEADERS}
+ sbitentry.cpp stringentry.cpp windowentry.cpp \
+ ${getdata_include_HEADERS} internal.h
libgetdata___la_LIBADD=../../src/libgetdata.la
libgetdata___la_LDFLAGS = -version-info @GETDATAXX_VERSION@
clean-local:
- rm -rvf *~ getdata/*~
+ rm -rf *~ getdata/*~
Modified: trunk/getdata/bindings/cxx/bitentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/bitentry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/bitentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008-2010 D. V. Wiebe
+// Copyright (C) 2008-2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,17 +18,8 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <cstring>
-#include <stdlib.h>
-
-using namespace GetData;
-
BitEntry::BitEntry(const char* field_code, const char* in_field,
gd_bit_t bitnum, gd_bit_t numbits, int fragment_index) : Entry()
{
Modified: trunk/getdata/bindings/cxx/carrayentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/carrayentry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/carrayentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010 D. V. Wiebe
+// Copyright (C) 2010-2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,16 +18,8 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <cstring>
-
-using namespace GetData;
-
CarrayEntry::CarrayEntry(const char* field_code, DataType data_type,
size_t array_len, int fragment_index)
{
Modified: trunk/getdata/bindings/cxx/constentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/constentry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/constentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008, 2010 D. V. Wiebe
+// Copyright (C) 2008, 2010, 2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,14 +18,8 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <cstring>
-
using namespace GetData;
ConstEntry::ConstEntry(const char* field_code, DataType data_type,
Modified: trunk/getdata/bindings/cxx/dirfile.cpp
===================================================================
--- trunk/getdata/bindings/cxx/dirfile.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/dirfile.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -18,25 +18,13 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <stdlib.h>
-
-#ifdef _MSC_VER
-#define __gd_unused
-#else
-#define __gd_unused __attribute__ (( unused ))
-#endif
-using namespace GetData;
-
Dirfile::Dirfile()
{
D = gd_invalid_dirfile();
error_string = NULL;
+ reference_name = NULL;
}
Dirfile::Dirfile(const char* filedir, unsigned long flags,
@@ -44,18 +32,20 @@
{
D = gd_cbopen(filedir, flags, sehandler, extra);
error_string = NULL;
+ reference_name = NULL;
}
Dirfile::Dirfile(DIRFILE* dirfile)
{
D = dirfile;
error_string = NULL;
+ reference_name = NULL;
}
Dirfile::~Dirfile()
{
- if (error_string != NULL)
- free(error_string);
+ free(error_string);
+ free(reference_name);
gd_close(D);
}
@@ -117,6 +107,8 @@
return new GetData::StringEntry(this, field_code);
case IndexEntryType:
return new GetData::IndexEntry(this, field_code);
+ case WindowEntryType:
+ return new GetData::WindowEntry(this, field_code);
case NoEntryType:
break;
}
@@ -350,14 +342,16 @@
return gd_nfragments(D);
}
-const char* Dirfile::ReferenceFilename() const
+const char* Dirfile::ReferenceFilename()
{
const char* ref = gd_reference(D, NULL);
if (ref == NULL)
return NULL;
- return gd_raw_filename(D, ref);
+ free(reference_name);
+ reference_name = gd_raw_filename(D, ref);
+ return reference_name;
}
int Dirfile::Discard()
@@ -456,3 +450,66 @@
{
return gd_tell(D, field_code);
}
+
+int Dirfile::AddAlias(const char* field_code, const char* target,
+ int fragment_index) const
+{
+ return gd_add_alias(D, field_code, target, fragment_index);
+}
+
+const char** Dirfile::Aliases(const char* field_code) const
+{
+ return gd_aliases(D, field_code);
+}
+
+const char* Dirfile::AliasTarget(const char* field_code) const
+{
+ return gd_alias_target(D, field_code);
+}
+
+int Dirfile::DeleteAlias(const char* field_code, int flags) const
+{
+ return gd_delete_alias(D, field_code, flags);
+}
+
+int Dirfile::Hide(const char* field_code) const
+{
+ return gd_hide(D, field_code);
+}
+
+int Dirfile::Hidden(const char* field_code) const
+{
+ return gd_hidden(D, field_code);
+}
+
+int Dirfile::IncludeAffix(const char *file, int fragment_index,
+ const char* prefix, const char* suffix, unsigned long flags) const
+{
+ return gd_include_affix(D, file, fragment_index, prefix, suffix, flags);
+}
+
+int Dirfile::MAddAlias(const char* parent, const char* name, const char* target)
+ const
+{
+ return gd_madd_alias(D, parent, name, target);
+}
+
+int Dirfile::MoveAlias(const char* field_code, int new_fragment) const
+{
+ return gd_move_alias(D, field_code, new_fragment);
+}
+
+int Dirfile::NAliases(const char* field_code) const
+{
+ return gd_naliases(D, field_code);
+}
+
+int Dirfile::Sync(const char* field_code) const
+{
+ return gd_sync(D, field_code);
+}
+
+int Dirfile::UnHide(const char* field_code) const
+{
+ return gd_unhide(D, field_code);
+}
Modified: trunk/getdata/bindings/cxx/divideentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/divideentry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/divideentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010 D. V. Wiebe
+// Copyright (C) 2010-2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,15 +18,8 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <stdlib.h>
-#include <cstring>
-
using namespace GetData;
DivideEntry::DivideEntry(const char* field_code, const char* in_field1,
Modified: trunk/getdata/bindings/cxx/entry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/entry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/entry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008-2010 D. V. Wiebe
+// Copyright (C) 2008-2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,15 +18,8 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <stdlib.h>
-#include <cstring>
-
using namespace GetData;
Entry::Entry()
@@ -154,6 +147,7 @@
case GD_RAW_ENTRY:
case GD_PHASE_ENTRY:
case GD_RECIP_ENTRY:
+ case GD_WINDOW_ENTRY:
if (index >= 1)
return 0;
break;
Modified: trunk/getdata/bindings/cxx/fragment.cpp
===================================================================
--- trunk/getdata/bindings/cxx/fragment.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/fragment.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008, 2010 D. V. Wiebe
+// Copyright (C) 2008, 2010, 2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,19 +18,14 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <stdlib.h>
-#include <cstring>
-
using namespace GetData;
Fragment::Fragment(const GetData::Dirfile *dirfile, int index)
{
+ dtrace("%p, %i", dirfile, index);
+
D = dirfile;
ind = index;
@@ -40,11 +35,15 @@
prot = gd_protection(D->D, index);
name = gd_fragmentname(D->D, index);
parent = (index == 0) ? -1 : gd_parent_fragment(D->D, index);
+ gd_fragment_affixes(D->D, index, &prefix, &suffix);
+
+ dreturnvoid();
}
Fragment::~Fragment()
{
- ;
+ free(prefix);
+ free(suffix);
}
int Fragment::ReWrite() const
@@ -91,3 +90,25 @@
return ret;
}
+
+int Fragment::SetPrefix(const char* new_prefix)
+{
+ int ret = gd_alter_affixes(D->D, ind, new_prefix, suffix);
+
+ free(prefix);
+ free(suffix);
+ if (!ret)
+ ret = gd_fragment_affixes(D->D, ind, &prefix, &suffix);
+ return ret;
+}
+
+int Fragment::SetSuffix(const char* new_suffix)
+{
+ int ret = gd_alter_affixes(D->D, ind, prefix, new_suffix);
+
+ free(prefix);
+ free(suffix);
+ if (!ret)
+ ret = gd_fragment_affixes(D->D, ind, &prefix, &suffix);
+ return ret;
+}
Modified: trunk/getdata/bindings/cxx/getdata/dirfile.h
===================================================================
--- trunk/getdata/bindings/cxx/getdata/dirfile.h 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/getdata/dirfile.h 2011-12-27 06:37:42 UTC (rev 639)
@@ -51,6 +51,7 @@
#include <getdata/multiplyentry.h>
#include <getdata/divideentry.h>
#include <getdata/recipentry.h>
+#include <getdata/windowentry.h>
namespace GetData {
@@ -69,6 +70,7 @@
friend class RecipEntry;
friend class PhaseEntry;
friend class PolynomEntry;
+ friend class WindowEntry;
friend class ConstEntry;
friend class CarrayEntry;
friend class StringEntry;
@@ -87,8 +89,15 @@
int Add(GetData::Entry &entry) const;
+ int AddAlias(const char *field_code, const char *target,
+ int fragment_index = 0) const;
+
int AddSpec(const char *spec, int fragment_index = 0) const;
+ const char** Aliases(const char* field_code) const;
+
+ const char* AliasTarget(const char* field_code) const;
+
int AlterSpec(const char* spec, int recode = 0) const;
off_t BoF(const char *field_code) const;
@@ -103,6 +112,8 @@
int Delete(const char* field_code, int flags = 0) const;
+ int DeleteAlias(const char* field_code, int flags = 0) const;
+
int Discard();
GetData::Entry* Entry(const char *field_code) const;
@@ -142,11 +153,22 @@
size_t GetString(const char *field_code, size_t len, char *data_out)
const;
+ int Hide(const char* field_code) const;
+
+ int Hidden(const char* field_code) const;
+
int Include(const char *file, int fragment_index = 0,
unsigned long flags = 0) const;
+ int IncludeAffix(const char *file, int fragment_index = 0,
+ const char* prefix = NULL, const char* suffix = NULL,
+ unsigned long flags = 0) const;
+
int MAdd(GetData::Entry &entry, const char *parent) const;
+ int MAddAlias(const char* parent, const char* name, const char* target)
+ const;
+
int MAddSpec(const char *spec, const char *parent) const;
int MAlterSpec(const char *line, const char *parent, int recode = 0)
@@ -165,8 +187,12 @@
const char **MStrings(const char *parent) const;
+ int MoveAlias(const char* field_code, int new_fragment) const;
+
const char **MVectorList(const char *parent) const;
+ int NAliases(const char* field_code) const;
+
unsigned int NFields() const;
unsigned int NFieldsByType(EntryType type) const;
@@ -201,7 +227,7 @@
GetData::RawEntry *Reference(const char* field_code = NULL) const;
- const char *ReferenceFilename() const;
+ const char *ReferenceFilename();
unsigned int SamplesPerFrame(const char *field_code) const;
@@ -215,8 +241,12 @@
const char **Strings() const;
+ int Sync(const char *field_code = NULL) const;
+
off_t Tell(const char* field_code) const;
+ int UnHide(const char* field_code) const;
+
int UnInclude(int fragment_index, int del = 0) const;
int Validate(const char* field_code) const;
@@ -227,6 +257,7 @@
DIRFILE* D;
char *error_string;
+ char *reference_name;
};
}
Modified: trunk/getdata/bindings/cxx/getdata/entry.h
===================================================================
--- trunk/getdata/bindings/cxx/getdata/entry.h 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/getdata/entry.h 2011-12-27 06:37:42 UTC (rev 639)
@@ -68,9 +68,21 @@
StringEntryType = GD_STRING_ENTRY,
IndexEntryType = GD_INDEX_ENTRY,
DivideEntryType = GD_DIVIDE_ENTRY,
- RecipEntryType = GD_RECIP_ENTRY
+ RecipEntryType = GD_RECIP_ENTRY,
+ WindowEntryType = GD_WINDOW_ENTRY
};
+ enum WindOpType {
+ WindOpEq = GD_WINDOP_EQ,
+ WindOpNe = GD_WINDOP_NE,
+ WindOpGe = GD_WINDOP_GE,
+ WindOpGt = GD_WINDOP_GT,
+ WindOpLe = GD_WINDOP_LE,
+ WindOpLt = GD_WINDOP_LT,
+ WindOpSet = GD_WINDOP_SET,
+ WindOpClr = GD_WINDOP_CLR
+ };
+
class Entry {
friend class Dirfile;
@@ -208,6 +220,22 @@
0;
};
+ /* WINDOW methods */
+ virtual const char *Check() const {
+ return (E.field_type == GD_WINDOW_ENTRY) ? E.in_fields[1] : 0;
+ };
+
+ virtual WindOpType WindOp() const {
+ return (E.field_type == GD_WINDOW_ENTRY) ? (WindOpType)E.u.window.windop
+ : (WindOpType)0;
+ }
+
+ virtual gd_triplet_t Threshold() const {
+ gd_triplet_t zero;
+ zero.r = 0;
+ return (E.field_type == GD_WINDOW_ENTRY) ? E.u.window.threshold : zero;
+ }
+
void SetName(const char* name);
void SetFragmentIndex(int fragment_index);
Modified: trunk/getdata/bindings/cxx/getdata/fragment.h
===================================================================
--- trunk/getdata/bindings/cxx/getdata/fragment.h 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/getdata/fragment.h 2011-12-27 06:37:42 UTC (rev 639)
@@ -68,18 +68,26 @@
int Parent() const { return parent; }
+ const char *Prefix() { return prefix; };
+
int Protection() const { return prot; }
int ReWrite() const;
+ const char *Suffix() { return suffix; };
+
int SetEncoding(EncodingScheme encoding, int recode = 0);
int SetEndianness(unsigned long byte_sex, int recode = 0);
int SetFrameOffset(off_t offset, int recode = 0);
+ int SetPrefix(const char *preix);
+
int SetProtection(int protection_level);
+ int SetSuffix(const char *suffix);
+
protected:
Fragment(const Dirfile *dirfile, int index);
@@ -90,6 +98,8 @@
int prot;
off_t off;
const char* name;
+ char* prefix;
+ char* suffix;
int parent;
};
}
Modified: trunk/getdata/bindings/cxx/getdata/rawentry.h
===================================================================
--- trunk/getdata/bindings/cxx/getdata/rawentry.h 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/getdata/rawentry.h 2011-12-27 06:37:42 UTC (rev 639)
@@ -32,11 +32,16 @@
friend class Dirfile;
public:
- RawEntry() : Entry() { E.field_type = GD_RAW_ENTRY; };
+ RawEntry() : Entry() {
+ E.field_type = GD_RAW_ENTRY;
+ filename = NULL;
+ };
RawEntry(const char* field_code, DataType data_type, gd_spf_t spf,
int fragment_index = 0);
+ virtual ~RawEntry();
+
virtual gd_spf_t SamplesPerFrame() const { return E.u.raw.spf; };
virtual DataType RawType() const { return (DataType)E.u.raw.data_type; };
@@ -52,7 +57,9 @@
private:
RawEntry(const GetData::Dirfile *dirfile, const char* field_code) :
- Entry(dirfile, field_code) { };
+ Entry(dirfile, field_code) { filename = NULL; };
+
+ char *filename;
};
}
Added: trunk/getdata/bindings/cxx/getdata/windowentry.h
===================================================================
--- trunk/getdata/bindings/cxx/getdata/windowentry.h (rev 0)
+++ trunk/getdata/bindings/cxx/getdata/windowentry.h 2011-12-27 06:37:42 UTC (rev 639)
@@ -0,0 +1,67 @@
+// Copyright (C) 2011 D. V. Wiebe
+//
+///////////////////////////////////////////////////////////////////////////
+//
+// This file is part of the GetData project.
+//
+// GetData is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2.1 of the License, or (at your
+// option) any later version.
+//
+// GetData is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+// License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with GetData; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+
+#ifndef GETDATA_WINDOWENTRY_H
+#define GETDATA_WINDOWENTRY_H
+
+#include <getdata/entry.h>
+
+namespace GetData {
+
+ class Dirfile;
+
+ class WindowEntry : public Entry {
+ friend class Dirfile;
+
+ public:
+ WindowEntry() : Entry() { E.field_type = GD_WINDOW_ENTRY; };
+
+ WindowEntry(const char* field_code, const char* in_field,
+ const char *check_Field, WindOpType windop, gd_triplet_t threshold,
+ int fragment_index = 0);
+
+ virtual const char *Check() const { return E.in_fields[1]; };
+
+ virtual const char *Input() const { return E.in_fields[0]; };
+
+ virtual const char *Scalar() const { return E.scalar[0]; }
+
+ virtual int ScalarIndex() const { return E.scalar_ind[0]; };
+
+ virtual WindOpType WindOp() const {
+ return (WindOpType)E.u.window.windop;
+ };
+
+ virtual gd_triplet_t Threshold() const { return E.u.window.threshold; };
+
+ virtual int SetInput(const char* field);
+ virtual int SetCheck(const char* field);
+ virtual int SetWindOp(WindOpType windop);
+ virtual int SetThreshold(gd_triplet_t threshold);
+ virtual int SetThreshold(const char* threshold);
+
+ private:
+ WindowEntry(const GetData::Dirfile *dirfile, const char* field_code) :
+ Entry(dirfile, field_code) { };
+ };
+}
+
+#endif
Modified: trunk/getdata/bindings/cxx/indexentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/indexentry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/indexentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008, 2010 D. V. Wiebe
+// Copyright (C) 2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,10 +18,4 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
-
-using namespace GetData;
+#include "internal.h"
Added: trunk/getdata/bindings/cxx/internal.h
===================================================================
--- trunk/getdata/bindings/cxx/internal.h (rev 0)
+++ trunk/getdata/bindings/cxx/internal.h 2011-12-27 06:37:42 UTC (rev 639)
@@ -0,0 +1,61 @@
+// Copyright (C) 2011 D. V. Wiebe
+//
+///////////////////////////////////////////////////////////////////////////
+//
+// This file is part of the GetData project.
+//
+// GetData is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2.1 of the License, or (at your
+// option) any later version.
+//
+// GetData is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+// License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with GetData; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#ifdef HAVE_CONFIG_H
+#include "../../src/config.h"
+#endif
+#undef GETDATA_LEGACY_API
+#include "getdata/dirfile.h"
+
+#include <cstring>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+
+/* debugging macros */
+#ifdef GETDATA_DEBUG
+extern "C" const char* gd_colnil(void);
+extern "C" const char* gd_coladd(void);
+extern "C" const char* gd_colsub(void);
+#define dtracevoid() printf("%s %s()\n", gd_coladd(), __FUNCTION__)
+#define dtrace(fmt, ...) printf("%s %s(" fmt ")\n", gd_coladd(), \
+ __FUNCTION__, ##__VA_ARGS__)
+#define dprintf(fmt, ...) printf("%s %s:%i " fmt "\n", gd_colnil(), \
+ __FUNCTION__, __LINE__, ##__VA_ARGS__)
+#define dreturnvoid() printf("%s %s = (nil)\n", gd_colsub(), __FUNCTION__)
+#define dreturn(fmt, ...) printf("%s %s = " fmt "\n", gd_colsub(), \
+ __FUNCTION__, ##__VA_ARGS__)
+#define dwatch(fmt, v) printf("%s %s = " fmt "\n", gd_colnil(), #v, v)
+#else
+#define dtracevoid()
+#define dtrace(...)
+#define dprintf(...)
+#define dreturnvoid()
+#define dreturn(...)
+#define dwatch(...)
+#endif
+
+#ifdef _MSC_VER
+#define __gd_unused
+#else
+#define __gd_unused __attribute__ (( unused ))
+#endif
+
+using namespace GetData;
Modified: trunk/getdata/bindings/cxx/lincomentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/lincomentry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/lincomentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008-2010 D. V. Wiebe
+// Copyright (C) 2008-2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,15 +18,8 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <stdlib.h>
-#include <cstring>
-
using namespace GetData;
LincomEntry::LincomEntry(const char* field_code, int n_fields,
Modified: trunk/getdata/bindings/cxx/linterpentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/linterpentry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/linterpentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008, 2010 D. V. Wiebe
+// Copyright (C) 2008, 2010, 2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,15 +18,8 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <stdlib.h>
-#include <cstring>
-
using namespace GetData;
LinterpEntry::LinterpEntry(const char* field_code, const char* in_field,
Modified: trunk/getdata/bindings/cxx/multiplyentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/multiplyentry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/multiplyentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008, 2010 D. V. Wiebe
+// Copyright (C) 2008, 2010, 2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,15 +18,8 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <stdlib.h>
-#include <cstring>
-
using namespace GetData;
MultiplyEntry::MultiplyEntry(const char* field_code, const char* in_field1,
Modified: trunk/getdata/bindings/cxx/phaseentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/phaseentry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/phaseentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008-2010 D. V. Wiebe
+// Copyright (C) 2008-2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,15 +18,8 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <stdlib.h>
-#include <cstring>
-
using namespace GetData;
PhaseEntry::PhaseEntry(const char* field_code, const char* in_field,
Modified: trunk/getdata/bindings/cxx/polynomentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/polynomentry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/polynomentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2009, 2010 D. V. Wiebe
+// Copyright (C) 2009, 2010, 2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,15 +18,8 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <stdlib.h>
-#include <cstring>
-
using namespace GetData;
PolynomEntry::PolynomEntry(const char* field_code, int poly_ord,
Modified: trunk/getdata/bindings/cxx/rawentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/rawentry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/rawentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008-2010 D. V. Wiebe
+// Copyright (C) 2008-2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,16 +18,8 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <cstring>
-#include <stdlib.h>
-#include <stdint.h>
-
using namespace GetData;
RawEntry::RawEntry(const char* field_code, DataType data_type, gd_spf_t spf,
@@ -40,6 +32,11 @@
E.fragment_index = fragment_index;
}
+RawEntry::~RawEntry()
+{
+ free(filename);
+}
+
int RawEntry::SetSamplesPerFrame(gd_spf_t spf, int recode)
{
E.u.raw.spf = spf;
@@ -78,5 +75,7 @@
const char* RawEntry::FileName()
{
- return gd_raw_filename(D->D, E.field);
+ free(filename);
+ filename = gd_raw_filename(D->D, E.field);
+ return filename;
}
Modified: trunk/getdata/bindings/cxx/recipentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/recipentry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/recipentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010 D. V. Wiebe
+// Copyright (C) 2010-2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,15 +18,8 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <stdlib.h>
-#include <cstring>
-
using namespace GetData;
RecipEntry::RecipEntry(const char* field_code, const char* in_field1,
Modified: trunk/getdata/bindings/cxx/sbitentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/sbitentry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/sbitentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008-2010 D. V. Wiebe
+// Copyright (C) 2008-2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,15 +18,8 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <cstring>
-#include <stdlib.h>
-
using namespace GetData;
SBitEntry::SBitEntry(const char* field_code, const char* in_field,
Modified: trunk/getdata/bindings/cxx/stringentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/stringentry.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/stringentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008, 2010 D. V. Wiebe
+// Copyright (C) 2008, 2010, 2011 D. V. Wiebe
//
///////////////////////////////////////////////////////////////////////////
//
@@ -18,14 +18,8 @@
// along with GetData; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-#ifdef HAVE_CONFIG_H
-#include "../../src/config.h"
-#endif
-#undef GETDATA_LEGACY_API
-#include "getdata/dirfile.h"
+#include "internal.h"
-#include <cstring>
-
using namespace GetData;
StringEntry::StringEntry(const char* field_code, int fragment_index)
Modified: trunk/getdata/bindings/cxx/test/Makefile.am
===================================================================
--- trunk/getdata/bindings/cxx/test/Makefile.am 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/test/Makefile.am 2011-12-27 06:37:42 UTC (rev 639)
@@ -28,7 +28,7 @@
WEXTRA=-Wextra
endif
-INCLUDES = ${WALL} $(WEXTRA) -I$(srcdir)/.. -I$(top_srcdir)/src -D__TEST__=\"$@\"
+INCLUDES = ${WALL} $(WEXTRA) -I$(srcdir)/.. -I$(top_srcdir)/src
LDADD=../libgetdata++.la
TESTS=big_test
Modified: trunk/getdata/bindings/cxx/test/big_test.cpp
===================================================================
--- trunk/getdata/bindings/cxx/test/big_test.cpp 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/cxx/test/big_test.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -60,6 +60,13 @@
#define CHECK_NONNULL(t,v) \
if ((v) == NULL) { ne++; cerr << "p[" << t << "] = " << (v) << endl; }
+#define CHECK_NULL(t,v) \
+ if ((v) != NULL) { ne++; cerr << "p[" << t << "] = " << (v) << endl; }
+
+#define CHECK_NULL2(t,n,v) \
+ if ((v) != NULL) { \
+ ne++; cerr << "n[" << t << ", " << n << "] = " << (v) << endl; }
+
#define CHECK_INT(t,v,g) \
if ((v) != (g)) { ne++; cerr << "n[" << t << "] = " << (v) << endl; }
#define CHECK_INT2(t,n,v,g) \
@@ -104,11 +111,12 @@
int main(void)
{
- const char* filedir = __TEST__ "dirfile";
- const char* format = __TEST__ "dirfile/format";
- const char* form2 = __TEST__ "dirfile/form2";
- const char* new1 = __TEST__ "dirfile/new1";
- const char* data = __TEST__ "dirfile/data";
+ const char* filedir = "dirfile";
+ const char* format = "dirfile/format";
+ const char* format1 = "dirfile/format1";
+ const char* form2 = "dirfile/form2";
+ const char* new1 = "dirfile/new1";
+ const char* data = "dirfile/data";
const char* format_data =
"/ENDIAN little\n"
"data RAW INT8 8\n"
@@ -126,9 +134,11 @@
"div DIVIDE mult bit\n"
"recip RECIP div 6.5;4.3\n"
"phase PHASE data 11\n"
+ "window WINDOW linterp mult LT 4.1\n"
+ "/ALIAS alias data\n"
"string STRING \"Zaphod Beeblebrox\"\n";
const char* form2_data = "const2 CONST INT8 -19\n";
- const int nfields = 14;
+ const int nfields = 16;
unsigned char c[8];
unsigned char data_data[80];
signed char sc;
@@ -155,13 +165,15 @@
ConstEntry cent, *cep;
CarrayEntry aent, *aep;
StringEntry gent;
+ WindowEntry went, *wep;
Fragment *frag;
+ gd_triplet_t thresh;
- char* fields[nfields + 7] = {(char*)"INDEX", (char*)"bit", (char*)"carray",
- (char*)"const", (char*)"data", (char*)"div", (char*)"lincom",
- (char*)"linterp", (char*)"mult", (char*)"phase", (char*)"polynom",
- (char*)"recip", (char*)"sbit", (char*)"string", NULL, NULL, NULL, NULL,
- NULL, NULL, NULL};
+ char* fields[nfields + 7] = {(char*)"INDEX", (char*)"alias", (char*)"bit",
+ (char*)"carray", (char*)"const", (char*)"data", (char*)"div",
+ (char*)"lincom", (char*)"linterp", (char*)"mult", (char*)"phase",
+ (char*)"polynom", (char*)"recip", (char*)"sbit", (char*)"string",
+ (char*)"window", NULL, NULL, NULL, NULL, NULL, NULL, NULL};
char *strings[3];
// Write the test dirfile
@@ -623,30 +635,32 @@
// 44: Dirfile::NVectors check
n = d->NVectors();
CHECK_OK(44);
- CHECK_INT(44,n,21);
+ CHECK_INT(44,n,23);
// 45: Dirfile::VectorList check
fields[0] = (char*)"INDEX";
- fields[1] = (char*)"bit";
- fields[2] = (char*)"data";
- fields[3] = (char*)"div";
- fields[4] = (char*)"lincom";
- fields[5] = (char*)"linterp";
- fields[6] = (char*)"mult";
- fields[7] = (char*)"new1";
- fields[8] = (char*)"new10";
- fields[9] = (char*)"new2";
- fields[10] = (char*)"new3";
- fields[11] = (char*)"new4";
- fields[12] = (char*)"new5";
- fields[13] = (char*)"new6";
- fields[14] = (char*)"new7";
- fields[15] = (char*)"new8";
- fields[16] = (char*)"new9";
- fields[17] = (char*)"phase";
- fields[18] = (char*)"polynom";
- fields[19] = (char*)"recip";
- fields[20] = (char*)"sbit";
+ fields[1] = (char*)"alias";
+ fields[2] = (char*)"bit";
+ fields[3] = (char*)"data";
+ fields[4] = (char*)"div";
+ fields[5] = (char*)"lincom";
+ fields[6] = (char*)"linterp";
+ fields[7] = (char*)"mult";
+ fields[8] = (char*)"new1";
+ fields[9] = (char*)"new10";
+ fields[10] = (char*)"new2";
+ fields[11] = (char*)"new3";
+ fields[12] = (char*)"new4";
+ fields[13] = (char*)"new5";
+ fields[14] = (char*)"new6";
+ fields[15] = (char*)"new7";
+ fields[16] = (char*)"new8";
+ fields[17] = (char*)"new9";
+ fields[18] = (char*)"phase";
+ fields[19] = (char*)"polynom";
+ fields[20] = (char*)"recip";
+ fields[21] = (char*)"sbit";
+ fields[22] = (char*)"window";
list = d->VectorList();
CHECK_OK(45);
CHECK_STRING_ARRAY(45,n,list[i],fields[i]);
@@ -956,7 +970,7 @@
// 80: Dirfile::Name check
str = d->Name();
CHECK_OK(80);
- CHECK_STRING(80,str,__TEST__ "dirfile");
+ CHECK_STRING(80,str,"dirfile");
// 81: Fragment::Parent check
frag = d->Fragment(1);
@@ -1222,7 +1236,7 @@
// 157: Dirfile::Standards check
n = d->Standards();
CHECK_OK2(157,1);
- CHECK_INT(157,n,8);
+ CHECK_INT(157,n,9);
d->Standards(0);
CHECK_ERROR2(157,2,GD_E_BAD_VERSION);
@@ -1364,15 +1378,195 @@
CHECK_OK(204);
CHECK_INT(204,n,288);
+ // 205: gd_hide check
+ n = d->Hide("data");
+ CHECK_OK(205);
+ // 206: gd_hidden check
+ n = d->Hidden("data");
+ CHECK_OK2(206, 1);
+ CHECK_INT2(206, 1, n, 1);
+ n = d->Hidden("lincom");
+ CHECK_OK2(206, 2);
+ CHECK_INT2(206, 2, n, 0);
+ // 207: gd_unhide check
+ n = d->UnHide("data");
+ CHECK_OK2(206, 1);
+ n = d->Hidden("data");
+ CHECK_OK2(206, 2);
+ CHECK_INT2(206, 2, n, 0);
+
+ // 208: gd_sync check
+ d->Sync("data");
+ CHECK_OK(208);
+
+ // 209: gd_flush check
+ d->Flush("data");
+ CHECK_OK(209);
+
+ // 210: gd_metaflush check
+ d->MetaFlush();
+ CHECK_OK(210);
+
+ // 211: gd_entry (WINDOW) check
+ ent = d->Entry("window");
+ CHECK_OK(211);
+ CHECK_INT2(211, 1, ent->Type(), WindowEntryType);
+ CHECK_INT2(211, 2, ent->FragmentIndex(), 0);
+ CHECK_INT2(211, 3, ent->WindOp(), WindOpLt);
+ CHECK_STRING2(211, 4, ent->Input(), "linterp");
+ CHECK_STRING2(211, 5, ent->Check(), "mult");
+ CHECK_DOUBLE2(211, 6, ent->Threshold().r, 4.1);
+ delete ent;
+
+ // 212: Dirfile::Add / WindowEntry check
+ went.SetName("new18");
+ went.SetFragmentIndex(0);
+ went.SetInput("in1");
+ went.SetCheck("in2");
+ went.SetWindOp(WindOpNe);
+ thresh.i = 32;
+ went.SetThreshold(thresh);
+ d->Add(went);
+ CHECK_OK2(212, 1);
+
+ ent = d->Entry("new18");
+ CHECK_OK2(212, 2);
+ CHECK_INT2(212, 1, ent->Type(), WindowEntryType);
+ CHECK_INT2(212, 2, ent->FragmentIndex(), 0);
+ CHECK_INT2(212, 3, ent->WindOp(), WindOpNe);
+ CHECK_STRING2(212, 4, ent->Input(), "in1");
+ CHECK_STRING2(212, 5, ent->Check(), "in2");
+ CHECK_INT2(212, 6, ent->Threshold().i, 32);
+ delete ent;
+
+ // 214: gd_madd_window_i check
+ went.Dissociate();
+ went.SetName("mnew18");
+ went.SetInput("in2");
+ went.SetCheck("in3");
+ went.SetWindOp(WindOpSet);
+ thresh.u = 128;
+ went.SetThreshold(thresh);
+ d->MAdd(went, "data");
+ CHECK_OK2(214, 1);
+
+ ent = d->Entry("data/mnew18");
+ CHECK_OK2(214, 2);
+ CHECK_INT2(214, 1, ent->Type(), WindowEntryType);
+ CHECK_INT2(214, 2, ent->FragmentIndex(), 0);
+ CHECK_INT2(214, 3, ent->WindOp(), WindOpSet);
+ CHECK_STRING2(214, 4, ent->Input(), "in2");
+ CHECK_STRING2(214, 5, ent->Check(), "in3");
+ CHECK_INT2(214, 6, ent->Threshold().u, 128);
+ delete ent;
+
+ // 217: gd_alter_window_r check
+ wep = reinterpret_cast<WindowEntry*>(d->Entry("new18"));
+ wep->SetInput("in3");
+ wep->SetCheck("in4");
+ wep->SetWindOp(WindOpGe);
+ thresh.r = 32e3;
+ wep->SetThreshold(thresh);
+ CHECK_OK2(217, 1);
+ delete wep;
+
+ ent = d->Entry("new18");
+ CHECK_OK2(217, 2);
+ CHECK_INT2(217, 1, ent->Type(), WindowEntryType);
+ CHECK_INT2(217, 2, ent->FragmentIndex(), 0);
+ CHECK_INT2(217, 3, ent->WindOp(), WindOpGe);
+ CHECK_STRING2(217, 4, ent->Input(), "in3");
+ CHECK_STRING2(217, 5, ent->Check(), "in4");
+ CHECK_DOUBLE2(217, 6, ent->Threshold().r, 32e3);
+ delete ent;
+
+ // 218: gd_alias_target check
+ str = d->AliasTarget("alias");
+ CHECK_OK(218);
+ CHECK_STRING(218, str, "data");
+
+ // 219: gd_add_alias check
+ d->AddAlias("new20", "data", 0);
+ CHECK_OK2(219, 1);
+
+ str = d->AliasTarget("new20");
+ CHECK_OK2(219, 2);
+ CHECK_STRING(219, str, "data");
+
+ // 220: gd_madd_alias check
+ d->MAddAlias("data", "mnew20", "data");
+ CHECK_OK2(220, 1);
+
+ str = d->AliasTarget("data/mnew20");
+ CHECK_OK2(220, 2);
+ CHECK_STRING(220, str, "data");
+
+ // 221: gd_naliases check
+ n = d->NAliases("data");
+ CHECK_OK(221);
+ CHECK_INT(221, n, 4);
+
+ // 222: gd_aliases check
+ fields[1] = (char*)"data";
+ fields[2] = (char*)"alias";
+ fields[3] = (char*)"data/mnew20";
+ fields[4] = (char*)"new20";
+ list = d->Aliases("data");
+ CHECK_OK(222);
+ CHECK_STRING_ARRAY(222,i,list[i],fields[i]);
+
+ // 223: gd_include_affix check
+ d->IncludeAffix("format1", 0, "A", "Z", GD_CREAT | GD_EXCL);
+ CHECK_OK(223);
+
+ // 224: gd_move_alias check
+ d->MoveAlias("new20", 1);
+ CHECK_OK2(224, 1);
+
+ n = d->FragmentIndex("Anew20Z");
+ CHECK_OK2(224, 2);
+ CHECK_INT(224, n, 1);
+
+ // 225: gd_delete_alias check
+ d->DeleteAlias("Anew20Z", 0);
+ CHECK_OK2(225, 1);
+
+ n = d->FragmentIndex("Anew20Z");
+ CHECK_ERROR2(225, 2, GD_E_BAD_CODE);
+ CHECK_INT(225, n, -1);
+
+ // 226: gd_fragment_affixes check
+ frag = d->Fragment(1);
+
+ CHECK_STRING2(226, 1, frag->Prefix(), "A");
+ CHECK_STRING2(226, 2, frag->Suffix(), "Z");
+
+ // 227: gd_alter_affixes check
+ frag->SetPrefix("B");
+ CHECK_OK2(227, 1);
+ frag->SetSuffix("C");
+ CHECK_OK2(227, 2);
+
+ CHECK_STRING2(227, 3, frag->Prefix(), "B");
+ CHECK_STRING2(227, 3, frag->Suffix(), "C");
+ delete frag;
+
+
+
+
+
+
+
// ===================================================================
d->Discard();
delete d;
unlink(data);
unlink(new1);
unlink(format);
+ unlink(format1);
unlink(form2);
rmdir(filedir);
Added: trunk/getdata/bindings/cxx/windowentry.cpp
===================================================================
--- trunk/getdata/bindings/cxx/windowentry.cpp (rev 0)
+++ trunk/getdata/bindings/cxx/windowentry.cpp 2011-12-27 06:37:42 UTC (rev 639)
@@ -0,0 +1,152 @@
+// Copyright (C) 2011 D. V. Wiebe
+//
+///////////////////////////////////////////////////////////////////////////
+//
+// This file is part of the GetData project.
+//
+// GetData is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2.1 of the License, or (at your
+// option) any later version.
+//
+// GetData is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+// License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with GetData; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#include "internal.h"
+
+WindowEntry::WindowEntry(const char* field_code, const char* in_field,
+ const char* check, WindOpType windop, gd_triplet_t threshold,
+ int fragment_index) : Entry()
+{
+ dtrace("\"%s\", \"%s\", \"%s\", %i, {%g,%llx,%lli}, %i", field_code,
+ in_field, check, (unsigned)windop, threshold.r,
+ (unsigned long long)threshold.u, (long long)threshold.i, fragment_index);
+
+ E.field = strdup(field_code);
+ E.field_type = GD_WINDOW_ENTRY;
+ E.in_fields[0] = strdup(in_field);
+ E.in_fields[1] = strdup(check);
+ E.scalar[0] = 0;
+ E.u.window.windop = (gd_windop_t)windop;
+ E.u.window.threshold = threshold;
+ E.fragment_index = fragment_index;
+
+ dreturnvoid();
+}
+
+int WindowEntry::SetInput(const char* field)
+{
+ int ret = 0;
+
+ dtrace("\"%s\"", field);
+
+ char* ptr = strdup(field);
+
+ if (ptr == NULL) {
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ free(E.in_fields[0]);
+ E.in_fields[0] = ptr;
+
+ if (D != NULL)
+ ret = gd_alter_entry(D->D, E.field, &E, 0);
+
+ dreturn("%i", ret);
+ return ret;
+}
+
+int WindowEntry::SetCheck(const char* field)
+{
+ int ret = 0;
+
+ dtrace("\"%s\"", field);
+
+ char* ptr = strdup(field);
+
+ if (ptr == NULL) {
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ free(E.in_fields[1]);
+ E.in_fields[1] = ptr;
+
+ if (D != NULL)
+ ret = gd_alter_entry(D->D, E.field, &E, 0);
+
+ dreturn("%i", ret);
+ return ret;
+}
+
+int WindowEntry::SetWindOp(WindOpType windop)
+{
+ int ret = 0;
+
+ dtrace("0x%X", (unsigned)windop);
+
+ E.u.window.windop = (gd_windop_t)windop;
+
+ if (D != NULL)
+ ret = gd_alter_entry(D->D, E.field, &E, 0);
+
+ dreturn("%i", ret);
+ return ret;
+}
+
+int WindowEntry::SetThreshold(gd_triplet_t threshold)
+{
+ int ret = 0;
+
+ dtrace("{%g,%llX,%lli}", threshold.r, threshold.u, threshold.i);
+
+ E.u.window.threshold = threshold;
+
+ if (D != NULL)
+ ret = gd_alter_entry(D->D, E.field, &E, 0);
+
+ dreturn("%i", ret);
+ return ret;
+}
+
+int WindowEntry::SetThreshold(const char *threshold)
+{
+ int r = 0;
+
+ dtrace("\"%s\"", threshold);
+
+ SetScalar(0, threshold);
+
+ if (D != NULL) {
+ r = gd_alter_entry(D->D, E.field, &E, 0);
+
+ if (!r) {
+ switch(E.u.window.windop) {
+ case GD_WINDOP_EQ:
+ case GD_WINDOP_NE:
+ r = gd_get_constant(D->D, threshold, GD_INT64,
+ &E.u.window.threshold.i);
+ break;
+ case GD_WINDOP_SET:
+ case GD_WINDOP_CLR:
+ r = gd_get_constant(D->D, threshold, GD_UINT64,
+ &E.u.window.threshold.u);
+ break;
+ default:
+ r = gd_get_constant(D->D, threshold, GD_FLOAT64,
+ &E.u.window.threshold.r);
+ break;
+ }
+ }
+ }
+
+ dreturn("%i", r);
+ return r;
+}
Modified: trunk/getdata/bindings/f77/Makefile.am
===================================================================
--- trunk/getdata/bindings/f77/Makefile.am 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/f77/Makefile.am 2011-12-27 06:37:42 UTC (rev 639)
@@ -44,10 +44,6 @@
F95_LIB=libf95getdata.la
endif
-if GETDATA_DEBUG
-DEBUG_C = ../../src/debug.c
-endif
-
FCFLAGS += $(FC_WALL) $(FC_WEXTRA)
INCLUDES = -I$(top_srcdir)/src
EXTRA_DIST=getdata.f.in getdata.f90.in
@@ -61,7 +57,7 @@
lib_LTLIBRARIES=libfgetdata.la $(F95_LIB)
libfgetdata_la_CPPFLAGS = ${CC_WALL} $(CC_WEXTRA)
-libfgetdata_la_SOURCES = fgetdata.c fgetdata.h $(DEBUG_C)
+libfgetdata_la_SOURCES = fgetdata.c fgetdata.h
libfgetdata_la_LIBADD=../../src/libgetdata.la
libfgetdata_la_LDFLAGS = -version-info @FGETDATA_VERSION@
Modified: trunk/getdata/bindings/f77/fgetdata.c
===================================================================
--- trunk/getdata/bindings/f77/fgetdata.c 2011-12-20 20:49:05 UTC (rev 638)
+++ trunk/getdata/bindings/f77/fgetdata.c 2011-12-27 06:37:42 UTC (rev 639)
@@ -122,6 +122,33 @@
dreturnvoid();
}
+/* create a gd_triple_t value */
+static gd_triplet_t _GDF_SetTriplet(gd_windop_t op, const void *data)
+{
+ dtrace("%i, %p", op, data);
+
+ gd_triplet_t t;
+
+ switch(op) {
+ case GD_WINDOP_EQ:
+ case GD_WINDOP_NE:
+ t.i = *(int*)data;
+ dreturn("%lli", (long long)t.i);
+ break;
+ case GD_WINDOP_SET:
+ case GD_WINDOP_CLR:
+ t.u = *(int*)data;
+ dreturn("%llu", (unsigned long long)t.u);
+ break;
+ default:
+ t.r = *(double*)data;
+ dreturn("%g", t.r);
+ break;
+ }
+
+ return t;
+}
+
/* create a Fortran space padded string */
static int _GDF_FString(char* dest, int *dlen, const char* src)
{
@@ -180,28 +207,38 @@
void F77_FUNC(gdopen, GDOPEN) (int* dirfile, const char* dirfilename,
const int* dirfilename_l, const int* flags)
{
+ dtrace("%p, %p, %i, %i", dirfile, dirfilename, *dirfilename_l, *flags);
+
char* out = (char *)malloc(*dirfilename_l + 1);
*dirfile = _GDF_SetDirfile(gd_open(_GDF_CString(out, dirfilename,
*dirfilename_l), *flags));
free(out);
+
+ dreturn("%i", *dirfile);
}
/* gd_close wrapper */
void F77_FUNC(gdclos, GDCLOS) (const int* dirfile)
{
+ dtrace("%i", *dirfile);
+
if (*dirfile != 0) {
gd_close(_GDF_GetDirfile(*dirfile));
_GDF_ClearDirfile(*dirfile);
}
+
+ dreturnvoid();
}
/* gd_flush wrapper */
void F77_FUNC(gdflsh, GDFLSH) (const int* dirfile, const char* field_code,
const int* field_code_l)
{
+ dtrace("%i, %p, %i", *dirfile, field_code, *field_code_l);
+
if (field_code_l == 0)
gd_flush(_GDF_GetDirfile(*dirfile), NULL);
else {
@@ -210,6 +247,8 @@
*field_code_l));
free(out);
}
+
+ dreturnvoid();
}
/* gd_getdata wrapper */
@@ -793,6 +832,51 @@
dreturnvoid();
}
+/* gd_entry wrapper for WINDOW */
+void F77_FUNC(gdgewd, GDGEWD) (char *in_field, int *in_field_l,
+ char *check_field, int *check_field_l, int *windop, int *ithreshold,
+ double *rthreshold, int *fragment_index, const int *dirfile,
+ const char *field_code, const int *field_code_l)
+{
+ char *fc;
+ gd_entry_t E;
+
+ dtrace("%p, %i, %p, %i, %p, %p, %p, %p, %i, %p, %i", in_field, *in_field_l,
+ check_field, *check_field_l, windop, ithreshold, rthreshold,
+ fragment_index, *dirfile, field_code, *field_code_l);
+
+ fc = (char *)malloc(*field_code_l + 1);
+
+ if (gd_entry(_GDF_GetDirfile(*dirfile), _GDF_CString(fc, field_code,
+ *field_code_l), &E) || E.field_type != GD_WINDOW_ENTRY)
+ *in_field_l = 0;
+ else {
+ _GDF_FString(in_field, in_field_l, E.in_fields[0]);
+ _GDF_FString(check_field, check_field_l, E.in_fields[1]);
+ switch (E.EN(window,windop)) {
+ case GD_WINDOP_EQ:
+ case GD_WINDOP_NE:
+ *ithreshold = E.EN(window,threshold.i);
+ break;
+ case GD_WINDOP_SET:
+ case GD_WINDOP_CLR:
+ *ithreshold = E.EN(window,threshold.u);
+ break;
+ default:
+ *rthreshold = E.EN(window,threshold.r);
+ break;
+ }
+ *fragment_index = E.fragment_index;
+ gd_free_entry_strings(&E);
+ }
+
+ *windop = E.EN(window,windop);
+
+ free(fc);
+
+ dreturnvoid();
+}
+
/* gd_entry wrapper for RECIP */
void F77_FUNC(gdgerc, GDGERC) (char* in_field, int* in_field_l,
double* dividend, int* fragment_index, const int* dirfile,
@@ -931,12 +1015,17 @@
void F77_FUNC(gdfrgi, GDFRGI) (int* fragment_index, const int* dirfile,
const char* field_code, const int* field_code_l)
{
+ dtrace("%p, %i, %p, %i", fragment_index, *dirfile, field_code,
+ *field_code_l);
+
char* fc = (char *)malloc(*field_code_l + 1);
*fragment_index = gd_fragment_index(_GDF_GetDirfile(*dirfile),
_GDF_CString(fc, field_code, *field_code_l));
free(fc);
+
+ dreturn("%i", *fragment_index);
}
/* gd_add_raw wrapper */
@@ -1297,7 +1386,11 @@
/* gd_metaflush wrapper */
void F77_FUNC(gdmfls, GDMFLS) (const int* dirfile)
{
+ dtrace("%i", *dirfile);
+
gd_metaflush(_GDF_GetDirfile(*dirfile));
+
+ dreturnvoid();
}
/* gd_rewrite_fragment wrapper */
@@ -1386,26 +1479,30 @@
const char* parent, const int* parent_l, const int* type,
const int* field_num)
{
- const char** fl;
+ const char **fl;
unsigned int nfields;
- DIRFILE* D = _GDF_GetDirfile(*dirfile);
- char* pa = (char *)malloc(*parent_l + 1);
+ DIRFILE *D;
+ char *pa;
+ dtrace("%p, %i, %i, %p, %i, 0x%X, %i", name, *name_l, *dirfile, parent,
+ *parent_l, *type, *field_num);
+
+ D = _GDF_GetDirfile(*dirfile);
+ pa = (char *)malloc(*parent_l + 1);
+
_GDF_CString(pa, parent, *parent_l);
nfields = gd_nmfields_by_type(D, pa, (gd_entype_t)*type);
- if (D->error) {
- free(pa);
- return;
+ if (!D->error) {
+ if (*field_num > 0 && *field_num <= (int)nfields) {
+ fl = gd_mfield_list_by_type(D, pa, (gd_entype_t)*type);
+ _GDF_FString(name, name_l, fl[*field_num - 1]);
+ } else
+ *name_l = 0;
}
- if (*field_num > 0 && *field_num <= (int)nfields) {
- fl = gd_mfield_list_by_type(D, pa, (gd_entype_t)*type);
- _GDF_FString(name, name_l, fl[*field_num - 1]);
- } else
- *name_l = 0;
-
free(pa);
+ dreturnvoid();
}
/* gd_mvector_list wrapper -- this only returns one field name */
@@ -2012,7 +2109,7 @@
int l = *len;
*size = gd_get_string(_GDF_GetDirfile(*dirfile), _GDF_CString(fc, field_code,
- *field_code_l), (size_t)*len, out) - 1;
+ *field_code_l), (size_t)*len, out) - 1;
_GDF_FString(data_out, &l, out);
free(fc);
@@ -2547,14 +2644,20 @@
void F77_FUNC(gdrwfn, GDRWFN) (char* name, int* name_l, const int* dirfile,
const char* field_code, const int* field_code_l)
{
+ dtrace("%p, %i, %i, %p, %i", name, *name_l, *dirfile, field_code,
+ *field_code_l);
+
char* fc = (char *)malloc(*field_code_l + 1);
- const char* fn = gd_raw_filename(_GDF_GetDirfile(*dirfile), _GDF_CString(fc,
+ char* fn = gd_raw_filename(_GDF_GetDirfile(*dirfile), _GDF_CString(fc,
field_code, *field_code_l));
_GDF_FString(name, name_l, fn);
free(fc);
+ free(fn);
+
+ dreturn("%i", *name_l);
}
/* gd_reference wrapper */
@@ -2837,6 +2940,7 @@
case GD_RECIP_ENTRY:
case GD_RAW_ENTRY:
case GD_PHASE_ENTRY:
+ case GD_WINDOW_ENTRY:
if (*index > 1)
ok = 0;
break;
@@ -2907,6 +3011,7 @@
case GD_RAW_ENTRY:
case GD_PHASE_ENTRY:
case GD_RECIP_ENTRY:
+ case GD_WINDOW_ENTRY:
if (*index > 1)
ok = 0;...
[truncated message content] |
|
From: <ket...@us...> - 2011-12-20 20:49:15
|
Revision: 638
http://getdata.svn.sourceforge.net/getdata/?rev=638&view=rev
Author: ketiltrout
Date: 2011-12-20 20:49:05 +0000 (Tue, 20 Dec 2011)
Log Message:
-----------
Added /ALIAS. Fix post rename screw-ups. Fix bug in _GD_GetSPF.
Modified Paths:
--------------
trunk/getdata/ChangeLog
trunk/getdata/configure.ac
trunk/getdata/src/add.c
trunk/getdata/src/common.c
trunk/getdata/src/constant.c
trunk/getdata/src/del.c
trunk/getdata/src/entry.c
trunk/getdata/src/errors.c
trunk/getdata/src/field_list.c
trunk/getdata/src/flimits.c
trunk/getdata/src/flush.c
trunk/getdata/src/fpos.c
trunk/getdata/src/fragment.c
trunk/getdata/src/getdata.c
trunk/getdata/src/getdata.h.in
trunk/getdata/src/globals.c
trunk/getdata/src/include.c
trunk/getdata/src/index.c
trunk/getdata/src/internal.h
trunk/getdata/src/meta_list.c
trunk/getdata/src/mod.c
trunk/getdata/src/move.c
trunk/getdata/src/name.c
trunk/getdata/src/native.c
trunk/getdata/src/nmeta.c
trunk/getdata/src/open.c
trunk/getdata/src/parse.c
trunk/getdata/src/putdata.c
trunk/getdata/src/spf.c
trunk/getdata/src/string.c
trunk/getdata/test/Makefile.am
trunk/getdata/test/lzma_get.c
trunk/getdata/test/name_move.c
trunk/getdata/test/version_6_write.c
trunk/getdata/test/version_9_write.c
trunk/getdata/test/xz_get.c
Added Paths:
-----------
trunk/getdata/test/add_alias.c
trunk/getdata/test/add_resolv.c
trunk/getdata/test/add_spec_resolv.c
trunk/getdata/test/alias_list.c
trunk/getdata/test/alias_list_alias.c
trunk/getdata/test/alias_list_missing.c
trunk/getdata/test/alias_num.c
trunk/getdata/test/alias_num_alias.c
trunk/getdata/test/alias_num_missing.c
trunk/getdata/test/alias_target.c
trunk/getdata/test/alias_target_alias.c
trunk/getdata/test/alias_target_missing.c
trunk/getdata/test/del_derived_after.c
trunk/getdata/test/entry_type_alias.c
trunk/getdata/test/fragment_index_alias.c
trunk/getdata/test/fragment_num.c
trunk/getdata/test/fragment_parent.c
trunk/getdata/test/hide_hidden.c
trunk/getdata/test/madd_alias.c
trunk/getdata/test/madd_spec_resolv.c
trunk/getdata/test/move_alias.c
trunk/getdata/test/name_after.c
trunk/getdata/test/name_after_const.c
trunk/getdata/test/name_update.c
trunk/getdata/test/name_update_const.c
trunk/getdata/test/parse_alias.c
trunk/getdata/test/parse_alias_code.c
trunk/getdata/test/parse_alias_dup.c
trunk/getdata/test/parse_alias_meta.c
trunk/getdata/test/parse_alias_missing.c
trunk/getdata/test/parse_malias.c
trunk/getdata/test/parse_malias_dup.c
trunk/getdata/test/parse_meta_alias.c
trunk/getdata/test/parse_meta_jump.c
trunk/getdata/test/parse_meta_malias.c
trunk/getdata/test/spf_alias.c
trunk/getdata/test/spf_alias_meta.c
trunk/getdata/test/spf_alias_missing.c
Removed Paths:
-------------
trunk/getdata/test/nfragments.c
trunk/getdata/test/parent.c
Property Changed:
----------------
trunk/getdata/test/
Modified: trunk/getdata/ChangeLog
===================================================================
--- trunk/getdata/ChangeLog 2011-12-13 02:53:25 UTC (rev 637)
+++ trunk/getdata/ChangeLog 2011-12-20 20:49:05 UTC (rev 638)
@@ -1,3 +1,61 @@
+2011-12-20 D. V. Wiebe <ge...@ke...> svn:638
+ * src/entry.c (_GD_GetScalar _GD_CalculateEntry) src/common.c (_GD_GetRepr
+ _GD_BadInput _GD_FindFieldAndRepr: Optionally prohibit setting errors (for
+ use by the post-rename update stuff).
+ * src/errors.c: Added GD_E_FORMAT_ALIAS, GD_E_DEL_ALIAS.
+ * src/flush.c (_GD_FieldSpec): Write aliases. Also tweaked to allow slashed
+ metafield specification with DSV7.
+ * src/del.c (_GD_ClearDerived): Handle aliases.
+ * src/parse.c (_GD_CheckParent _GD_ParseAlias _GD_ResolveAlias
+ _GD_UpdateAliases) src/add.c (_GD_AddAlias gd_add_alias gd_madd_alias): Added.
+ * src/parse.c (_GD_ParseFieldSpec): Call _GD_CheckParent.
+ * src/parse.c (_GD_ParseDirective): Use a switch to reduce the number of
+ strcmps done. Handle /ALIAS.
+ * src/parse.c (_GD_ParseFragment): Optionally call _GD_UpdateAliases to
+ resolve aliases.
+ * src/add.c (_GD_Add gd_madd_spec gd_add_spec): Update aliases after addition.
+
+ * src/common.c (_GD_FindField): Optionally dealias names.
+
+ * src/del.c (_GD_Delete): Renamed from gd_delete().
+ * src/del.c (gd_delete gd_delete_alias): Added.
+
+ * src/name.c (_GD_UpdateScalar _GD_InvalidateConst _GD_UpdateInField
+ _GD_InvalidateVect): Added.
+ * src/name.c (_GD_Rename): Renamed from gd_rename(). Handle cleaning up
+ after the rename.
+
+ * src/move.c (_GD_Move): Renamed from gd_move().
+
+ * src/name.c (_GD_ValidateField): Permit is_dot = NULL.
+
+ * src/entry.c (gd_alias_target gd_aliases gd_naliases gd_hidden) src/move.c
+ (gd_move gd_move_alias) src/name.c (gd_rename gd_rename_alias): Added.
+
+ * src/alias.c (gd_fragment_index gd_hide gd_unhide): Call _GD_FindField
+ instead of _GD_FindFieldAndRepr to avoid resolving aliases. As a side effect,
+ these function will no long ignore representation suffices.
+
+ * src/flush.c (_GD_StringEscapeise): Handle writing slashed meta-fields.
+
+ * src/spf.c (_GD_GetSPF): Ensure return is zero on error.
+
+ * test/alias_num_missing.c alias_target_missing.c spf_alias_missing.c
+ alias_list.c del_derived_after.c madd_spec_resolv.c parse_alias_meta.c
+ entry_type_alias.c spf_alias.c name_after_const.c parse_malias_dup.c
+ add_alias.c alias_target.c alias_list_alias.c add_resolv.c spf_alias_meta.c
+ move_alias.c name_after.c parse_meta_jump.c parse_alias_missing.c
+ name_update_const.c madd_alias.c parse_alias_dup.c fragment_index_alias.c
+ add_spec_resolv.c alias_target_alias.c name_update.c hide_hidden.c
+ alias_num_alias.c parse_malias.c parse_alias_code.c parse_alias.c
+ alias_num.c parse_meta_malias.c parse_meta_alias.c alias_list_missing.c:
+ Added.
+
+ * test/fragment_parent.c: Renamed from test/parent.c.
+ * test/fragment_num.c: Renamed from test/nfragments.c.
+
+ * test/version_9_write.c: Update.
+
2011-12-13 D. V. Wiebe <ge...@ke...> svn:637
* test/fragment_affix_alter2.c test/fragment_affix_alter.c
test/fragment_affix_dup.c test/fragment_affix.c test/include_affix.c: Added.
Modified: trunk/getdata/configure.ac
===================================================================
--- trunk/getdata/configure.ac 2011-12-13 02:53:25 UTC (rev 637)
+++ trunk/getdata/configure.ac 2011-12-20 20:49:05 UTC (rev 638)
@@ -536,7 +536,8 @@
echo "*** Looking for additional header files"
echo
AC_CHECK_HEADERS([asm/unaligned.h Availability.h byteswap.h direct.h fcntl.h \
- io.h libgen.h libkern/OSByteOrder.h stdint.h sys/endian.h \
+ inttypes.h io.h libgen.h libkern/OSByteOrder.h stdint.h \
+ sys/endian.h sys/file.h sys/param.h sys/stat.h sys/types.h \
unistd.h])
if test "x$disable_c99" = "xno"; then
AC_CHECK_HEADERS([complex.h])
Modified: trunk/getdata/src/add.c
===================================================================
--- trunk/getdata/src/add.c 2011-12-13 02:53:25 UTC (rev 637)
+++ trunk/getdata/src/add.c 2011-12-20 20:49:05 UTC (rev 638)
@@ -65,16 +65,16 @@
/* check parent */
if (parent != NULL) {
- /* make sure it's not a meta field already */
- if (strchr(parent, '/') != NULL) {
+ P = _GD_FindField(D, parent, D->entry, D->n_entries, 1, NULL);
+ if (P == NULL) {
_GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_MISSING, NULL, 0, parent);
dreturn("%p", NULL);
return NULL;
}
- P = _GD_FindField(D, parent, D->entry, D->n_entries, NULL);
- if (P == NULL) {
- _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_MISSING, NULL, 0, parent);
+ /* make sure it's not a meta field already */
+ if (P->e->n_meta == -1) {
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_INVALID, NULL, 0, parent);
dreturn("%p", NULL);
return NULL;
}
@@ -97,9 +97,7 @@
}
/* check for duplicate field */
- E = _GD_FindField(D, temp_buffer, D->entry, D->n_entries, &u);
-
- if (E != NULL) { /* matched */
+ if (_GD_FindField(D, temp_buffer, D->entry, D->n_entries, 1, &u)) {
_GD_SetError(D, GD_E_DUPLICATE, 0, NULL, 0, temp_buffer);
free(temp_buffer);
dreturn("%p", NULL);
@@ -480,6 +478,9 @@
D->list_validity = 0;
D->type_list_validity = 0;
+ /* Update aliases */
+ _GD_UpdateAliases(D);
+
dreturn("%p", E);
return E;
}
@@ -513,7 +514,7 @@
/* Find parent -- we don't do code mungeing here because we don't know
* which fragment this is yet. */
- E = _GD_FindField(D, parent, D->entry, D->n_entries, NULL);
+ E = _GD_FindField(D, parent, D->entry, D->n_entries, 1, NULL);
if (E == NULL) {
_GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_MISSING, NULL, 0, parent);
dreturn("%i", -1);
@@ -546,6 +547,9 @@
return -1;
}
+ /* Update aliases */
+ _GD_UpdateAliases(D);
+
D->fragment[me].modified = 1;
D->flags &= ~GD_HAVE_VERSION;
dreturn("%i", 0);
@@ -608,6 +612,9 @@
return -1;
}
+ /* Update aliases */
+ _GD_UpdateAliases(D);
+
D->fragment[fragment_index].modified = 1;
D->flags &= ~GD_HAVE_VERSION;
dreturn("%i", 0);
@@ -1762,3 +1769,159 @@
dreturn("%i", D->error ? -1 : 0);
return D->error ? -1 : 0;
}
+
+/* add an alias */
+static int _GD_AddAlias(DIRFILE *D, const char *parent, const char *field_code,
+ const char *target, int fragment_index)
+{
+ unsigned u;
+ int offset;
+ char *munged_code;
+ gd_entry_t *E, *P = NULL;
+ dtrace("%p, \"%s\", \"%s\", \"%s\", %i", D, parent, field_code, target,
+ fragment_index);
+
+ /* Early checks */
+ if (D->flags & GD_INVALID)
+ _GD_SetError(D, GD_E_BAD_DIRFILE, 0, NULL, 0, NULL);
+ else if ((D->flags & GD_ACCMODE) == GD_RDONLY)
+ _GD_SetError(D, GD_E_ACCMODE, 0, NULL, 0, NULL);
+ else if (fragment_index < 0 || fragment_index >= D->n_fragment)
+ _GD_SetError(D, GD_E_BAD_INDEX, 0, NULL, fragment_index, NULL);
+ else if (D->fragment[fragment_index].protection & GD_PROTECT_FORMAT)
+ _GD_SetError(D, GD_E_PROTECTED, GD_E_PROTECTED_FORMAT, NULL, 0,
+ D->fragment[fragment_index].cname);
+
+ if (D->error) {
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ _GD_ClearError(D);
+
+ if (parent != NULL) {
+ /* look for parent */
+ P = _GD_FindField(D, parent, D->entry, D->n_entries, 1, NULL);
+ if (P == NULL) {
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_MISSING, NULL, 0, parent);
+ dreturn("%i", -1);
+ return -1;
+ }
+ fragment_index = P->fragment_index;
+
+ /* make sure it's not a meta field already */
+ if (P->e->n_meta == -1) {
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_INVALID, NULL, 0, parent);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ offset = strlen(parent) + 1;
+ munged_code = (char *)_GD_Malloc(D, offset + strlen(field_code) + 1);
+ if (munged_code) {
+ strcpy(munged_code, parent);
+ munged_code[offset - 1] = '/';
+ strcpy(munged_code + offset, field_code);
+ }
+ } else
+ /* Apply prefix and suffix */
+ munged_code = _GD_MungeFromFrag(D, NULL, fragment_index, field_code,
+ &offset);
+
+ if (D->error) {
+ free(munged_code);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ /* check alias name */
+ if (munged_code && _GD_ValidateField(munged_code + offset, D->standards, 1, 0,
+ NULL))
+ {
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_INVALID, NULL, 0, field_code);
+ } else if (_GD_FindField(D, munged_code, D->entry, D->n_entries, 1, &u))
+ _GD_SetError(D, GD_E_DUPLICATE, 0, NULL, 0, munged_code);
+
+ if (D->error) {
+ free(munged_code);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ /* create and store */
+ E = (gd_entry_t *)_GD_Malloc(D, sizeof(gd_entry_t));
+ if (E == NULL) {
+ dreturn("%i", -1);
+ return -1;
+ }
+ memset(E, 0, sizeof(gd_entry_t));
+ E->e = (struct _gd_private_entry *)_GD_Malloc(D,
+ sizeof(struct _gd_private_entry));
+ if (E->e == NULL) {
+ free(E);
+ dreturn("%i", -1);
+ return -1;
+ }
+ memset(E->e, 0, sizeof(struct _gd_private_entry));
+
+ E->field = munged_code;
+ E->fragment_index = fragment_index;
+ E->in_fields[0] = _GD_Strdup(D, target);
+ E->field_type = GD_ALIAS_ENTRY;
+ E->e->calculated = 1;
+
+ if (D->error) {
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ /* add the entry and resort the entry list */
+ _GD_InsertSort(D, E, u);
+ D->n_entries++;
+ D->fragment[fragment_index].modified = 1;
+ D->flags &= ~GD_HAVE_VERSION;
+
+ /* Invalidate the field lists */
+ D->list_validity = 0;
+ D->type_list_validity = 0;
+
+ /* Update aliases */
+ _GD_UpdateAliases(D);
+
+ dreturn("%i", 0);
+ return 0;
+}
+
+int gd_add_alias(DIRFILE *D, const char *alias_name, const char *target_code,
+ int fragment_index) gd_nothrow
+{
+ int ret;
+
+ dtrace("%p, \"%s\", \"%s\", %i", D, alias_name, target_code, fragment_index);
+
+ if (D->flags & GD_INVALID) {
+ _GD_SetError(D, GD_E_BAD_DIRFILE, 0, NULL, 0, NULL);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ _GD_ClearError(D);
+
+ ret = _GD_AddAlias(D, NULL, alias_name, target_code, fragment_index);
+
+ dreturn("%i", ret);
+ return ret;
+}
+
+int gd_madd_alias(DIRFILE *D, const char *parent, const char *alias_name,
+ const char *target_code) gd_nothrow
+{
+ int ret;
+
+ dtrace("%p, \"%s\", \"%s\", \"%s\"", D, parent, alias_name, target_code);
+
+ ret = _GD_AddAlias(D, parent, alias_name, target_code, 0);
+
+ dreturn("%i", ret);
+ return ret;
+}
Modified: trunk/getdata/src/common.c
===================================================================
--- trunk/getdata/src/common.c 2011-12-13 02:53:25 UTC (rev 637)
+++ trunk/getdata/src/common.c 2011-12-20 20:49:05 UTC (rev 638)
@@ -96,13 +96,16 @@
}
/* Binary search to find the field */
-gd_entry_t* _GD_FindField(DIRFILE* D, const char* field_code,
- gd_entry_t** list, unsigned int u, unsigned int *index)
+gd_entry_t *_GD_FindField(const DIRFILE *D, const char *field_code,
+ gd_entry_t **list, unsigned int u, int dealias, unsigned int *index)
{
int c;
+ char *ptr;
+ gd_entry_t *E = NULL;
unsigned int i, l = 0;
+ const unsigned int ou = u;
- dtrace("%p, \"%s\", %p, %u, %p", D, field_code, list, u, index);
+ dtrace("%p, \"%s\", %p, %u, %i, %p", D, field_code, list, u, dealias, index);
/* handle FILEFRAM */
if (D->standards < 6 && (D->flags & GD_PEDANTIC) &&
@@ -117,19 +120,48 @@
else if (c > 0)
l = i + 1;
else {
- if (index != NULL)
+ E = list[i];
+ if (dealias && E && E->field_type == GD_ALIAS_ENTRY)
+ E = E->e->entry[0];
+
+ if (index != NULL)
*index = i;
- dreturn("%p", list[i]);
- return list[i];
+ dreturn("%p", E);
+ return E;
}
}
- if (index != NULL)
+ if (index != NULL)
*index = u;
- dreturn("%p", NULL);
- return NULL;
+ /* not found perhaps it's an subfield of an aliased field? */
+ if ((ptr = strchr(field_code, '/'))) {
+ char *new_code = strdup(field_code);
+ if (new_code) {
+ new_code[ptr - field_code] = '\0';
+ E = _GD_FindField(D, new_code, list, ou, 0, NULL);
+ free(new_code);
+
+ if (E && E->field_type == GD_ALIAS_ENTRY && E->e->entry[0]) {
+ size_t plen = strlen(E->e->entry[0]->field);
+ new_code = malloc(plen + strlen(ptr));
+ if (new_code) {
+ strcpy(new_code, E->e->entry[0]->field);
+ new_code[plen] = '/';
+ strcpy(new_code + plen + 1, ptr + 1);
+
+ E = _GD_FindField(D, new_code, list, ou, 1, NULL);
+
+ free(new_code);
+ }
+ } else
+ E = NULL;
+ }
+ }
+
+ dreturn("%p", E);
+ return E;
}
/* Insertion sort the entry list */
@@ -770,12 +802,13 @@
dreturnvoid();
}
-int _GD_GetRepr(DIRFILE* D, const char* field_code_in, char** field_code)
+int _GD_GetRepr(DIRFILE *D, const char *field_code_in, char **field_code,
+ int err)
{
int repr = GD_REPR_NONE;
const int field_code_len = strlen(field_code_in);
- dtrace("%p, \"%s\", %p", D, field_code_in, field_code);
+ dtrace("%p, \"%s\", %p, %i", D, field_code_in, field_code, err);
*field_code = (char *)field_code_in;
/* find the representation, if any */
@@ -794,8 +827,9 @@
repr = GD_REPR_ARG;
break;
default:
- _GD_SetError(D, GD_E_BAD_REPR, GD_E_REPR_UNKNOWN, NULL, 0,
- field_code_in + field_code_len - 1);
+ if (err)
+ _GD_SetError(D, GD_E_BAD_REPR, GD_E_REPR_UNKNOWN, NULL, 0,
+ field_code_in + field_code_len - 1);
dreturn("%i", 0);
return 0;
}
@@ -811,21 +845,21 @@
}
/* Ensure that an input field has been identified (with error checking) */
-int _GD_BadInput(DIRFILE* D, gd_entry_t* E, int i)
+int _GD_BadInput(DIRFILE *D, gd_entry_t *E, int i, int err)
{
char *code, *munged_code;
int offset;
- dtrace("%p, %p, %i", D, E, i);
+ dtrace("%p, %p, %i, %i", D, E, i, err);
if (E->e->entry[i] == NULL) {
munged_code = _GD_MungeFromFrag(D, NULL, E->fragment_index, E->in_fields[i],
&offset);
if (munged_code)
E->e->entry[i] = _GD_FindFieldAndRepr(D, munged_code, &code,
- &E->e->repr[i], NULL, 1);
+ &E->e->repr[i], NULL, 1, err);
- if (D->error) {
+ if (E->e->entry[i] == NULL) {
free(munged_code);
dreturn("%i", 1);
return 1;
@@ -850,18 +884,19 @@
}
/* Find the entry and the representation */
-gd_entry_t* _GD_FindFieldAndRepr(DIRFILE* D, const char* field_code_in,
- char** field_code, int* repr, unsigned int *index, int set)
+gd_entry_t *_GD_FindFieldAndRepr(DIRFILE *D, const char *field_code_in,
+ char **field_code, int *repr, unsigned int *index, int set, int err)
{
- gd_entry_t* E = NULL;
+ gd_entry_t *E = NULL;
- dtrace("%p, \"%s\", %p, %p, %p, %i", D, field_code_in, field_code, repr,
- index, set);
+ dtrace("%p, \"%s\", %p, %p, %p, %i, %i", D, field_code_in, field_code, repr,
+ index, set, err);
- E = _GD_FindField(D, field_code_in, D->dot_list, D->n_dot, NULL);
+ if (D->n_dot > 0)
+ E = _GD_FindField(D, field_code_in, D->dot_list, D->n_dot, 1, NULL);
if (E == NULL) {
- *repr = _GD_GetRepr(D, field_code_in, field_code);
+ *repr = _GD_GetRepr(D, field_code_in, field_code, err);
if (D->error) {
dreturn("%p", NULL);
@@ -873,10 +908,11 @@
}
if (E == NULL || index != NULL)
- E = _GD_FindField(D, *field_code, D->entry, D->n_entries, index);
+ E = _GD_FindField(D, *field_code, D->entry, D->n_entries, 1, index);
if (E == NULL && set) {
- _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_MISSING, NULL, 0, field_code_in);
+ if (err)
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_MISSING, NULL, 0, field_code_in);
if (field_code_in != *field_code)
free(*field_code);
}
Modified: trunk/getdata/src/constant.c
===================================================================
--- trunk/getdata/src/constant.c 2011-12-13 02:53:25 UTC (rev 637)
+++ trunk/getdata/src/constant.c 2011-12-20 20:49:05 UTC (rev 638)
@@ -38,7 +38,8 @@
_GD_ClearError(D);
- entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1,
+ 1);
if (D->error) {
dreturn("%i", -1);
@@ -81,7 +82,8 @@
_GD_ClearError(D);
- entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1,
+ 1);
if (D->error) {
dreturn("%i", -1);
@@ -124,7 +126,8 @@
_GD_ClearError(D);
- entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1,
+ 1);
if (D->error) {
dreturn("%i", -1);
@@ -165,7 +168,8 @@
_GD_ClearError(D);
- entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1,
+ 1);
if (D->error) {
dreturn("%i", 0);
@@ -212,7 +216,8 @@
_GD_ClearError(D);
- entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1,
+ 1);
if (D->error) {
dreturn("%i", -1);
@@ -271,7 +276,8 @@
_GD_ClearError(D);
- entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1,
+ 1);
if (D->error) {
dreturn("%i", -1);
@@ -330,7 +336,8 @@
_GD_ClearError(D);
- entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1,
+ 1);
if (D->error) {
dreturn("%i", -1);
Modified: trunk/getdata/src/del.c
===================================================================
--- trunk/getdata/src/del.c 2011-12-13 02:53:25 UTC (rev 637)
+++ trunk/getdata/src/del.c 2011-12-20 20:49:05 UTC (rev 638)
@@ -71,6 +71,14 @@
case GD_CARRAY_ENTRY:
case GD_STRING_ENTRY:
break;
+ default:
+ if (E->field_type == GD_ALIAS_ENTRY)
+ if (E->e->entry[0] == C) {
+ if (check)
+ _GD_SetError(D, GD_E_DELETE, GD_E_DEL_ALIAS, E->field, 0, C->field);
+ else
+ E->e->entry[0] = NULL;
+ }
}
dreturnvoid();
@@ -85,7 +93,7 @@
dtrace("%p, %p, %p, %i, %i, 0x%03x, %p", D, E, C, check, i, type, data);
if (E->scalar[i] != NULL) {
- repr = _GD_GetRepr(D, E->scalar[i], &field_code);
+ repr = _GD_GetRepr(D, E->scalar[i], &field_code, 1);
if (D->error) {
dreturn("%i", 1);
@@ -203,42 +211,26 @@
dreturnvoid();
}
-int gd_delete(DIRFILE* D, const char* field_code_in, int flags)
+static int _GD_Delete(DIRFILE *D, gd_entry_t *E, unsigned int index,
+ unsigned int flags)
{
- unsigned int index;
unsigned int first, last = 0;
- int n_del, i, repr, len;
+ int n_del, i, len;
unsigned int j;
- char *field_code;
char **new_ref = NULL;
- gd_entry_t *reference = NULL, *E;
+ gd_entry_t *reference = NULL;
gd_entry_t **del_list;
- dtrace("%p, \"%s\", 0x%X", D, field_code_in, flags);
+ dtrace("%p, %p, %u, 0x%X", D, E, index, flags);
- if (D->flags & GD_INVALID) {/* don't crash */
- _GD_SetError(D, GD_E_BAD_DIRFILE, 0, NULL, 0, NULL);
- dreturn("%i", -1);
- return -1;
- }
-
if ((D->flags & GD_ACCMODE) != GD_RDWR) {
_GD_SetError(D, GD_E_ACCMODE, 0, NULL, 0, NULL);
dreturn("%i", -1);
return -1;
}
- _GD_ClearError(D);
+ len = strlen(E->field);
- E = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, &index, 1);
-
- if (D->error) {
- dreturn("%i", -1);
- return -1;
- }
-
- len = strlen(field_code);
-
/* check protection */
if (D->fragment[E->fragment_index].protection & GD_PROTECT_FORMAT) {
_GD_SetError(D, GD_E_PROTECTED, GD_E_PROTECTED_FORMAT, NULL, 0,
@@ -250,18 +242,16 @@
/* If this field has metafields, and we weren't asked to delete those too,
* complain */
if (E->e->n_meta > 0 && ~flags & GD_DEL_META) {
- _GD_SetError(D, GD_E_DELETE, GD_E_DEL_META, NULL, 0, field_code);
+ _GD_SetError(D, GD_E_DELETE, GD_E_DEL_META, NULL, 0, E->field);
dreturn("%i", -1);
return -1;
} else if (E->e->n_meta > 0) {
/* find one of the meta fields -- it's not true that metafields are
* necessarily sorted directly after their parent */
if (_GD_FindField(D, E->e->p.meta_entry[0]->field, D->entry, D->n_entries,
- &first) == NULL)
+ 0, &first) == NULL)
{
_GD_InternalError(D);
- if (field_code != field_code_in)
- free(field_code);
dreturn("%i", -1);
return -1;
}
@@ -271,26 +261,23 @@
* search linearly in both directions until we find something that isn't a
* meta field of our parent */
while (first > 0)
- if (strncmp(D->entry[first - 1]->field, field_code, len) == 0 &&
+ if (strncmp(D->entry[first - 1]->field, E->field, len) == 0 &&
D->entry[first - 1]->field[len] == '/')
first--;
else
break;
while (last < D->n_entries - 1)
- if (strncmp(D->entry[last + 1]->field, field_code, len) == 0 &&
+ if (strncmp(D->entry[last + 1]->field, E->field, len) == 0 &&
D->entry[last + 1]->field[len] == '/')
last++;
else
break;
}
- if (field_code != field_code_in)
- free(field_code);
-
/* gather a list of fields */
- del_list = (gd_entry_t **)_GD_Malloc(D,
- sizeof(gd_entry_t*) * ((E->e->n_meta == -1) ? 1 : 1 + E->e->n_meta));
+ del_list = (gd_entry_t **)_GD_Malloc(D, sizeof(gd_entry_t*) *
+ (((E->e->n_meta == -1) ? 0 : E->e->n_meta) + 1));
if (del_list == NULL) {
dreturn("%i", -1);
@@ -311,7 +298,7 @@
del_list[i]->field_type == GD_CARRAY_ENTRY) &&
~flags & GD_DEL_DEREF)
_GD_DeReference(D, D->entry[j], del_list[i], 1);
- else if (~del_list[i]->field_type & GD_SCALAR_ENTRY)
+ else if (del_list[i]->field_type != GD_STRING_ENTRY)
_GD_ClearDerived(D, D->entry[j], del_list[i], 1);
if (D->error) {
@@ -391,7 +378,7 @@
if (in_scope) {
new_ref[i] = _GD_Strdup(D, D->entry[j]->field);
- if (new_ref == NULL) {
+ if (new_ref[i] == NULL) {
for (f = 0; f < i; ++f)
free(new_ref[f]);
free(new_ref);
@@ -430,7 +417,7 @@
if ((del_list[i]->field_type == GD_CONST_ENTRY ||
del_list[i]->field_type == GD_CARRAY_ENTRY) && flags & GD_DEL_DEREF)
_GD_DeReference(D, D->entry[j], del_list[i], 0);
- else if (~del_list[i]->field_type & GD_SCALAR_ENTRY)
+ else if (del_list[i]->field_type != GD_STRING_ENTRY)
_GD_ClearDerived(D, D->entry[j], del_list[i], 0);
free(del_list);
@@ -469,6 +456,7 @@
/* Remove the entry from the list -- we need not worry about the way we've
* already modified D->entry, since E is guaranteed to be before the stuff
* we've already removed */
+ D->fragment[E->fragment_index].modified = 1;
_GD_FreeE(D, E, 1);
memmove(D->entry + index, D->entry + index + 1,
@@ -482,3 +470,74 @@
dreturn("%i", 0);
return 0;
}
+
+int gd_delete(DIRFILE *D, const char *field_code_in, unsigned int flags)
+{
+ unsigned index;
+ int repr, ret;
+ char *field_code;
+ gd_entry_t *E;
+
+ dtrace("%p, \"%s\", 0x%X", D, field_code_in, flags);
+
+ if (D->flags & GD_INVALID) {/* don't crash */
+ _GD_SetError(D, GD_E_BAD_DIRFILE, 0, NULL, 0, NULL);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ _GD_ClearError(D);
+
+ E = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, &index, 1, 1);
+
+ if (field_code != field_code_in)
+ free(field_code);
+
+ if (D->error) {
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ ret = _GD_Delete(D, E, index, flags);
+
+ dreturn("%i", ret);
+ return ret;
+}
+
+
+int gd_delete_alias(DIRFILE *D, const char *field_code, unsigned int flags)
+ gd_nothrow
+{
+ unsigned index;
+ int ret;
+ gd_entry_t *E;
+
+ dtrace("%p, \"%s\", 0x%X", D, field_code, flags);
+
+ if (D->flags & GD_INVALID) {
+ _GD_SetError(D, GD_E_BAD_DIRFILE, 0, NULL, 0, NULL);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ _GD_ClearError(D);
+
+ E = _GD_FindField(D, field_code, D->entry, D->n_entries, 0, &index);
+
+ if (!E) {
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_MISSING, NULL, 0, field_code);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ if (E->field_type != GD_ALIAS_ENTRY) {
+ _GD_SetError(D, GD_E_BAD_FIELD_TYPE, GD_E_FIELD_BAD, NULL, 0, field_code);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ ret = _GD_Delete(D, E, index, flags);
+
+ dreturn("%i", ret);
+ return ret;
+}
Modified: trunk/getdata/src/entry.c
===================================================================
--- trunk/getdata/src/entry.c 2011-12-13 02:53:25 UTC (rev 637)
+++ trunk/getdata/src/entry.c 2011-12-20 20:49:05 UTC (rev 638)
@@ -100,6 +100,7 @@
}
if (priv) {
+ free(entry->e->alias_list);
free(entry->e->field_list);
free(entry->e->vector_list);
free(entry->e->string_value_list);
@@ -130,8 +131,8 @@
return entry;
}
-static void _GD_GetScalar(DIRFILE* D, gd_entry_t* E, int i, gd_type_t type,
- void* data)
+static void _GD_GetScalar(DIRFILE *D, gd_entry_t *E, int i, gd_type_t type,
+ void *data, int err)
{
void *ptr = NULL;
gd_entry_t* C = NULL;
@@ -140,13 +141,13 @@
const char* scalar = E->scalar[i];
int index = E->scalar_ind[i];
- dtrace("%p, %p, %i, %i, %p", D, E, i, type, data);
+ dtrace("%p, %p, %i, %i, %p, %i", D, E, i, type, data, err);
if (scalar != NULL) {
munged_code = _GD_MungeFromFrag(D, NULL, E->fragment_index, scalar,
&offset);
if (munged_code)
- C = _GD_FindFieldAndRepr(D, munged_code, &field_code, &repr, NULL, 0);
+ C = _GD_FindFieldAndRepr(D, munged_code, &field_code, &repr, NULL, 0, 1);
if (D->error) {
free(munged_code);
@@ -154,14 +155,17 @@
return;
}
- if (C == NULL)
- _GD_SetError(D, GD_E_BAD_SCALAR, GD_E_SCALAR_CODE, E->field, 0,
- field_code);
- else if (C->field_type != GD_CONST_ENTRY &&
- C->field_type != GD_CARRAY_ENTRY)
- _GD_SetError(D, GD_E_BAD_SCALAR, GD_E_SCALAR_TYPE, E->field, 0,
- field_code);
- else {
+ if (C == NULL) {
+ if (err)
+ _GD_SetError(D, GD_E_BAD_SCALAR, GD_E_SCALAR_CODE, E->field, 0,
+ field_code);
+ } else if (C->field_type != GD_CONST_ENTRY &&
+ C->field_type != GD_CARRAY_ENTRY)
+ {
+ if (err)
+ _GD_SetError(D, GD_E_BAD_SCALAR, GD_E_SCALAR_TYPE, E->field, 0,
+ field_code);
+ } else {
if (C->field_type == GD_CONST_ENTRY) {
index = 0;
E->scalar_ind[i] = -1;
@@ -171,7 +175,9 @@
ptr = _GD_Realloc(D, C->e->u.scalar.client,
(C->e->u.scalar.n_client + 1) * sizeof(gd_entry_t*));
- _GD_DoField(D, C, repr, index, 1, type, data);
+ /* err = 0 means we're only interested in initialising the client list */
+ if (err)
+ _GD_DoField(D, C, repr, index, 1, type, data);
if (ptr) {
C->e->u.scalar.client = (gd_entry_t **)ptr;
@@ -189,20 +195,20 @@
}
/* resolve non-literal scalars */
-int _GD_CalculateEntry(DIRFILE* D, gd_entry_t* E)
+int _GD_CalculateEntry(DIRFILE *D, gd_entry_t *E, int err)
{
int i;
- dtrace("%p, %p", D, E);
+ dtrace("%p, %p, %i", D, E, err);
switch(E->field_type) {
case GD_RAW_ENTRY:
- _GD_GetScalar(D, E, 0, GD_UINT16, &E->EN(raw,spf));
+ _GD_GetScalar(D, E, 0, GD_UINT16, &E->EN(raw,spf), err);
break;
case GD_POLYNOM_ENTRY:
E->comp_scal = 0;
for (i = 0; i <= E->EN(polynom,poly_ord); ++i) {
- _GD_GetScalar(D, E, i, GD_COMPLEX128, &E->EN(polynom,ca)[i]);
+ _GD_GetScalar(D, E, i, GD_COMPLEX128, &E->EN(polynom,ca)[i], err);
E->EN(polynom,a)[i] = creal(E->EN(polynom,ca)[i]);
if (cimag(E->EN(polynom,ca)[i]))
@@ -215,14 +221,14 @@
case GD_LINCOM_ENTRY:
E->comp_scal = 0;
for (i = 0; i < E->EN(lincom,n_fields); ++i) {
- _GD_GetScalar(D, E, i, GD_COMPLEX128, &E->EN(lincom,cm)[i]);
+ _GD_GetScalar(D, E, i, GD_COMPLEX128, &E->EN(lincom,cm)[i], err);
E->EN(lincom,m)[i] = creal(E->EN(lincom,cm)[i]);
if (cimag(E->EN(lincom,cm)[i]))
E->comp_scal = 1;
_GD_GetScalar(D, E, i + GD_MAX_LINCOM, GD_COMPLEX128,
- &E->EN(lincom,cb)[i]);
+ &E->EN(lincom,cb)[i], err);
E->EN(lincom,b)[i] = creal(E->EN(lincom,cb)[i]);
if (cimag(E->EN(lincom,cb)[i]))
@@ -233,30 +239,30 @@
}
break;
case GD_RECIP_ENTRY:
- _GD_GetScalar(D, E, 0, GD_COMPLEX128, &E->EN(recip,cdividend));
+ _GD_GetScalar(D, E, 0, GD_COMPLEX128, &E->EN(recip,cdividend), err);
E->EN(recip,dividend) = creal(E->EN(recip,cdividend));
E->comp_scal = (cimag(E->EN(recip,cdividend)) == 0) ? 0 : 1;
break;
case GD_BIT_ENTRY:
case GD_SBIT_ENTRY:
- _GD_GetScalar(D, E, 0, GD_INT16, &E->EN(bit,bitnum));
- _GD_GetScalar(D, E, 1, GD_INT16, &E->EN(bit,numbits));
+ _GD_GetScalar(D, E, 0, GD_INT16, &E->EN(bit,bitnum), err);
+ _GD_GetScalar(D, E, 1, GD_INT16, &E->EN(bit,numbits), err);
break;
case GD_PHASE_ENTRY:
- _GD_GetScalar(D, E, 0, GD_INT64, &E->EN(phase,shift));
+ _GD_GetScalar(D, E, 0, GD_INT64, &E->EN(phase,shift), err);
break;
case GD_WINDOW_ENTRY:
switch (E->EN(window,windop)) {
case GD_WINDOP_EQ:
case GD_WINDOP_NE:
- _GD_GetScalar(D, E, 0, GD_INT64, &E->EN(window,threshold.i));
+ _GD_GetScalar(D, E, 0, GD_INT64, &E->EN(window,threshold.i), err);
break;
case GD_WINDOP_SET:
case GD_WINDOP_CLR:
- _GD_GetScalar(D, E, 0, GD_UINT64, &E->EN(window,threshold.u));
+ _GD_GetScalar(D, E, 0, GD_UINT64, &E->EN(window,threshold.u), err);
break;
default:
- _GD_GetScalar(D, E, 0, GD_FLOAT64, &E->EN(window,threshold.r));
+ _GD_GetScalar(D, E, 0, GD_FLOAT64, &E->EN(window,threshold.r), err);
break;
}
break;
@@ -295,7 +301,7 @@
}
/* Check field */
- E = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ E = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1, 1);
if (D->error) {
dreturn("%p", NULL);
@@ -354,7 +360,7 @@
_GD_ClearError(D);
/* get rid of the represenation, if any */
- E = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ E = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1, 1);
if (D->error) {
dreturn("%i", -1);
@@ -366,7 +372,7 @@
/* Calculate the entry, if necessary */
if (!E->e->calculated)
- _GD_CalculateEntry(D, E);
+ _GD_CalculateEntry(D, E, 1);
if (D->error) {
dreturn("%i", -1);
@@ -442,6 +448,121 @@
return 0;
}
+const char *gd_alias_target(DIRFILE *D, const char *field_code) gd_nothrow
+{
+ gd_entry_t *E;
+
+ dtrace("%p, \"%s\"", D, field_code);
+
+ if (D->flags & GD_INVALID) {
+ _GD_SetError(D, GD_E_BAD_DIRFILE, 0, NULL, 0, NULL);
+ dreturn("%p", NULL);
+ return NULL;
+ }
+
+ E = _GD_FindField(D, field_code, D->entry, D->n_entries, 0, NULL);
+
+ if (E == NULL) {
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_MISSING, NULL, 0, field_code);
+ dreturn("%p", NULL);
+ return NULL;
+ }
+
+ if (E->field_type != GD_ALIAS_ENTRY) {
+ _GD_SetError(D, GD_E_BAD_FIELD_TYPE, GD_E_FIELD_BAD, NULL, 0, field_code);
+ dreturn("%p", NULL);
+ return NULL;
+ }
+
+ dreturn("\"%s\"", E->in_fields[0]);
+ return E->in_fields[0];
+}
+
+const char **gd_aliases(DIRFILE *D, const char *field_code) gd_nothrow
+{
+ gd_entry_t *E;
+ int n, j = 1;
+ unsigned u;
+
+ dtrace("%p, \"%s\"", D, field_code);
+
+ if (D->flags & GD_INVALID) {
+ _GD_SetError(D, GD_E_BAD_DIRFILE, 0, NULL, 0, NULL);
+ dreturn("%p", NULL);
+ return NULL;
+ }
+
+ n = gd_naliases(D, field_code) + 1;
+
+ if (D->error) {
+ dreturn("%p", NULL);
+ return NULL;
+ }
+
+ E = _GD_FindField(D, field_code, D->entry, D->n_entries, 1, NULL);
+
+ if (E == NULL) {
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_MISSING, NULL, 0, field_code);
+ dreturn("%p", NULL);
+ return NULL;
+ }
+
+ E->e->alias_list = _GD_Realloc(D, E->e->alias_list, sizeof(const char *) * n);
+
+ if (D->error) {
+ dreturn("%p", NULL);
+ return NULL;
+ }
+
+ E->e->alias_list[0] = E->field;
+
+ for (u = 0; u < D->n_entries; ++u)
+ if (D->entry[u]->field_type == GD_ALIAS_ENTRY &&
+ D->entry[u]->e->entry[0] == E)
+ {
+ E->e->alias_list[j++] = D->entry[u]->field;
+ }
+
+ /* terminate */
+ E->e->alias_list[j] = NULL;
+
+ dreturn("%p", E->e->alias_list);
+ return E->e->alias_list;
+}
+
+int gd_naliases(DIRFILE *D, const char *field_code) gd_nothrow
+{
+ gd_entry_t *E;
+ int n = 1;
+ unsigned u;
+
+ dtrace("%p, \"%s\"", D, field_code);
+
+ if (D->flags & GD_INVALID) {
+ _GD_SetError(D, GD_E_BAD_DIRFILE, 0, NULL, 0, NULL);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ E = _GD_FindField(D, field_code, D->entry, D->n_entries, 1, NULL);
+
+ if (E == NULL) {
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_MISSING, NULL, 0, field_code);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ for (u = 0; u < D->n_entries; ++u)
+ if (D->entry[u]->field_type == GD_ALIAS_ENTRY &&
+ D->entry[u]->e->entry[0] == E)
+ {
+ n++;
+ }
+
+ dreturn("%i", n);
+ return n;
+}
+
gd_entype_t gd_entry_type(DIRFILE* D, const char* field_code_in) gd_nothrow
{
gd_entry_t* E;
@@ -459,7 +580,7 @@
_GD_ClearError(D);
/* get rid of the represenation, if any */
- E = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ E = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1, 1);
if (D->error) {
dreturn("%i", GD_NO_ENTRY);
@@ -473,13 +594,11 @@
return E->field_type;
}
-int gd_fragment_index(DIRFILE* D, const char* field_code_in) gd_nothrow
+int gd_fragment_index(DIRFILE *D, const char *field_code) gd_nothrow
{
- gd_entry_t* E;
- char* field_code;
- int repr;
+ gd_entry_t *E;
- dtrace("%p, \"%s\"", D, field_code_in);
+ dtrace("%p, \"%s\"", D, field_code);
if (D->flags & GD_INVALID) {
_GD_SetError(D, GD_E_BAD_DIRFILE, 0, NULL, 0, NULL);
@@ -489,28 +608,23 @@
_GD_ClearError(D);
- /* get rid of the represenation, if any */
- E = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ E = _GD_FindField(D, field_code, D->entry, D->n_entries, 0, NULL);
- if (D->error) {
+ if (E == NULL) {
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_MISSING, NULL, 0, field_code);
dreturn("%i", -1);
return -1;
}
- if (field_code != field_code_in)
- free(field_code);
-
dreturn("%i", E->fragment_index);
return E->fragment_index;
}
-int gd_hide(DIRFILE *D, const char *field_code_in) gd_nothrow
+int gd_hide(DIRFILE *D, const char *field_code) gd_nothrow
{
gd_entry_t *E;
- int repr;
- char *field_code;
- dtrace("%p, \"%s\"", D, field_code_in);
+ dtrace("%p, \"%s\"", D, field_code);
if (D->flags & GD_INVALID) {
_GD_SetError(D, GD_E_BAD_DIRFILE, 0, NULL, 0, NULL);
@@ -524,10 +638,10 @@
_GD_ClearError(D);
- /* get rid of the representation, if any */
- E = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ E = _GD_FindField(D, field_code, D->entry, D->n_entries, 0, NULL);
if (D->error) {
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_MISSING, NULL, 0, field_code);
dreturn("%i", -1);
return -1;
}
@@ -539,9 +653,6 @@
return -1;
}
- if (field_code != field_code_in)
- free(field_code);
-
if (!E->hidden) {
E->hidden = 1;
D->fragment[E->fragment_index].modified = 1;
@@ -561,18 +672,42 @@
return 0;
}
-int gd_unhide(DIRFILE *D, const char *field_code_in) gd_nothrow
+int gd_hidden(DIRFILE *D, const char *field_code) gd_nothrow
{
gd_entry_t *E;
- int repr;
- char *field_code;
- dtrace("%p, \"%s\"", D, field_code_in);
+ dtrace("%p, \"%s\"", D, field_code);
if (D->flags & GD_INVALID) {
_GD_SetError(D, GD_E_BAD_DIRFILE, 0, NULL, 0, NULL);
dreturn("%i", -1);
return -1;
+ }
+
+ _GD_ClearError(D);
+
+ E = _GD_FindField(D, field_code, D->entry, D->n_entries, 0, NULL);
+
+ if (D->error) {
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_MISSING, NULL, 0, field_code);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ dreturn("%i", E->hidden);
+ return E->hidden;
+}
+
+int gd_unhide(DIRFILE *D, const char *field_code) gd_nothrow
+{
+ gd_entry_t *E;
+
+ dtrace("%p, \"%s\"", D, field_code);
+
+ if (D->flags & GD_INVALID) {
+ _GD_SetError(D, GD_E_BAD_DIRFILE, 0, NULL, 0, NULL);
+ dreturn("%i", -1);
+ return -1;
} else if ((D->flags & GD_ACCMODE) != GD_RDWR) {
_GD_SetError(D, GD_E_ACCMODE, 0, NULL, 0, NULL);
dreturn("%i", -1);
@@ -581,17 +716,14 @@
_GD_ClearError(D);
- /* get rid of the representation, if any */
- E = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ E = _GD_FindField(D, field_code, D->entry, D->n_entries, 0, NULL);
if (D->error) {
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_MISSING, NULL, 0, field_code);
dreturn("%i", -1);
return -1;
}
- if (field_code != field_code_in)
- free(field_code);
-
if (D->fragment[E->fragment_index].protection & GD_PROTECT_FORMAT) {
_GD_SetError(D, GD_E_PROTECTED, GD_E_PROTECTED_FORMAT, NULL, 0,
D->fragment[E->fragment_index].cname);
@@ -635,7 +767,7 @@
_GD_ClearError(D);
/* get rid of the representation, if any */
- E = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ E = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1, 1);
if (D->error) {
dreturn("%i", -1);
@@ -647,18 +779,18 @@
/* calculate scalars */
if (!E->e->calculated)
- _GD_CalculateEntry(D, E);
+ _GD_CalculateEntry(D, E, 1);
/* check input fields */
switch (E->field_type) {
case GD_LINCOM_ENTRY:
for (i = 0; i < E->EN(lincom,n_fields); ++i)
- _GD_BadInput(D, E, i);
+ _GD_BadInput(D, E, i, 1);
break;
case GD_DIVIDE_ENTRY:
case GD_MULTIPLY_ENTRY:
case GD_WINDOW_ENTRY:
- _GD_BadInput(D, E, 1);
+ _GD_BadInput(D, E, 1, 1);
/* fallthrough */
case GD_LINTERP_ENTRY:
case GD_BIT_ENTRY:
@@ -666,7 +798,7 @@
case GD_POLYNOM_ENTRY:
case GD_SBIT_ENTRY:
case GD_RECIP_ENTRY:
- _GD_BadInput(D, E, 0);
+ _GD_BadInput(D, E, 0, 1);
/* Fallthrough */
case GD_RAW_ENTRY:
case GD_CONST_ENTRY:
Modified: trunk/getdata/src/errors.c
===================================================================
--- trunk/getdata/src/errors.c 2011-12-13 02:53:25 UTC (rev 637)
+++ trunk/getdata/src/errors.c 2011-12-20 20:49:05 UTC (rev 638)
@@ -75,6 +75,8 @@
"Unrecognised operator ({4}) on line {3} of {2}", 0 },
{ GD_E_FORMAT, GD_E_FORMAT_META_META,
"Cannot attach meta field to meta field {4} on line {3} of {2}", 0 },
+ { GD_E_FORMAT, GD_E_FORMAT_ALIAS,
+ "Cannot use alias {4} as parent to a meta field on line {3} of {2}", 0 },
/* GD_E_TRUNC: 1 = suberror, 2 = filename. 3 = errno */
{ GD_E_TRUNC, 0, "Error truncating {2}: ", 1 },
/* GD_E_CREAT: 1 = suberror, 2 = filename, 3 = errno */
@@ -149,7 +151,7 @@
{ GD_E_DIMENSION, GD_E_DIM_CALLER,
"Vector field expected, but scalar field given: {4}", 0 },
/* GD_E_BAD_INDEX: 3 = index */
- { GD_E_BAD_INDEX, 0, "Invalid format file index: {3}", 0 },
+ { GD_E_BAD_INDEX, 0, "Invalid fragment index: {3}", 0 },
/* GD_E_BAD_SCALAR: 2 = parent field, 4 = scalar field */
{ GD_E_BAD_SCALAR, GD_E_SCALAR_CODE,
"Scalar field {4} not found in definition of {2}", 0 },
@@ -170,6 +172,7 @@
"Cannot delete field {4} used in definiton of field {2}", 0 },
{ GD_E_DELETE, GD_E_DEL_DERIVED,
"Cannot delete field {4} used as input to field {2}", 0 },
+ { GD_E_DELETE, GD_E_DEL_ALIAS, "Cannot delete field {4} with aliases", 0 },
/* GD_E_ARGUMENT: (nothing) */
{ GD_E_ARGUMENT, GD_E_ARG_WHENCE, "Invalid origin specified", 0 },
{ GD_E_ARGUMENT, GD_E_ARG_ENDIANNESS, "Invalid endianness specified", 0 },
Modified: trunk/getdata/src/field_list.c
===================================================================
--- trunk/getdata/src/field_list.c 2011-12-13 02:53:25 UTC (rev 637)
+++ trunk/getdata/src/field_list.c 2011-12-20 20:49:05 UTC (rev 638)
@@ -139,7 +139,7 @@
return zero_list;
}
- if (D->list_validity & LIST_VALID_STRING_VALUE) {
+ if (D->list_validity & GD_LIST_VALID_STRING_VALUE) {
/* list already made */
dreturn("%p", D->string_value_list);
return D->string_value_list;
@@ -161,7 +161,7 @@
free(D->string_value_list);
D->string_value_list = (const char **)fl;
- D->list_validity |= LIST_VALID_STRING_VALUE;
+ D->list_validity |= GD_LIST_VALID_STRING_VALUE;
dreturn("%p", D->string_value_list);
return D->string_value_list;
@@ -247,7 +247,7 @@
return zero_list;
}
- if (D->list_validity & LIST_VALID_VECTOR) {
+ if (D->list_validity & GD_LIST_VALID_VECTOR) {
/* list already made */
dreturn("%p", D->vector_list);
return D->vector_list;
@@ -269,7 +269,7 @@
free(D->vector_list);
D->vector_list = (const char **)fl;
- D->list_validity |= LIST_VALID_VECTOR;
+ D->list_validity |= GD_LIST_VALID_VECTOR;
dreturn("%p", D->vector_list);
return D->vector_list;
@@ -295,7 +295,7 @@
return zero_list;
}
- if (D->list_validity & LIST_VALID_FIELD) {
+ if (D->list_validity & GD_LIST_VALID_FIELD) {
/* list already made */
dreturn("%p (old)", D->field_list);
return D->field_list;
@@ -316,7 +316,7 @@
free(D->field_list);
D->field_list = (const char **)fl;
- D->list_validity |= LIST_VALID_FIELD;
+ D->list_validity |= GD_LIST_VALID_FIELD;
dreturn("%p", D->field_list);
return D->field_list;
Modified: trunk/getdata/src/flimits.c
===================================================================
--- trunk/getdata/src/flimits.c 2011-12-13 02:53:25 UTC (rev 637)
+++ trunk/getdata/src/flimits.c 2011-12-20 20:49:05 UTC (rev 638)
@@ -212,14 +212,14 @@
case GD_POLYNOM_ENTRY:
case GD_RECIP_ENTRY:
case GD_WINDOW_ENTRY:
- if (_GD_BadInput(D, E, 0))
+ if (_GD_BadInput(D, E, 0, 1))
break;
ns = _GD_GetEOF(D, E->e->entry[0], E->field, is_index);
break;
case GD_DIVIDE_ENTRY:
case GD_MULTIPLY_ENTRY:
- if (_GD_BadInput(D, E, 0) || _GD_BadInput(D, E, 1))
+ if (_GD_BadInput(D, E, 0, 1) || _GD_BadInput(D, E, 1, 1))
break;
ns = _GD_GetEOF(D, E->e->entry[0], E->field, is_index);
@@ -257,7 +257,7 @@
}
break;
case GD_LINCOM_ENTRY:
- if (_GD_BadInput(D, E, 0))
+ if (_GD_BadInput(D, E, 0, 1))
break;
ns = _GD_GetEOF(D, E->e->entry[0], E->field, is_index);
@@ -278,7 +278,7 @@
}
for (i = 1; i < E->EN(lincom,n_fields); ++i) {
- if (_GD_BadInput(D, E, i)) {
+ if (_GD_BadInput(D, E, i, 1)) {
ns = -1;
break;
}
@@ -307,7 +307,7 @@
}
break;
case GD_PHASE_ENTRY:
- if (_GD_BadInput(D, E, 0))
+ if (_GD_BadInput(D, E, 0, 1))
break;
ns = _GD_GetEOF(D, E->e->entry[0], E->field, is_index);
@@ -358,7 +358,8 @@
return -1;
}
- entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1,
+ 1);
if (D->error) {
dreturn("%i", -1);
@@ -412,13 +413,13 @@
case GD_POLYNOM_ENTRY:
case GD_RECIP_ENTRY:
case GD_WINDOW_ENTRY:
- if (_GD_BadInput(D, E, 0))
+ if (_GD_BadInput(D, E, 0, 1))
break;
bof = _GD_GetBOF(D, E->e->entry[0], E->field, spf, ds);
break;
case GD_PHASE_ENTRY:
- if (_GD_BadInput(D, E, 0))
+ if (_GD_BadInput(D, E, 0, 1))
break;
bof = _GD_GetBOF(D, E->e->entry[0], E->field, spf, ds);
@@ -444,7 +445,7 @@
break;
case GD_MULTIPLY_ENTRY:
case GD_DIVIDE_ENTRY:
- if (_GD_BadInput(D, E, 0) || _GD_BadInput(D, E, 1))
+ if (_GD_BadInput(D, E, 0, 1) || _GD_BadInput(D, E, 1, 1))
break;
bof = _GD_GetBOF(D, E->e->entry[0], E->field, spf, ds);
@@ -469,7 +470,7 @@
}
break;
case GD_LINCOM_ENTRY:
- if (_GD_BadInput(D, E, 0))
+ if (_GD_BadInput(D, E, 0, 1))
break;
bof = _GD_GetBOF(D, E->e->entry[0], E->field, spf, ds);
@@ -480,7 +481,7 @@
}
for (i = 1; i < E->EN(lincom,n_fields); ++i) {
- if (_GD_BadInput(D, E, i)) {
+ if (_GD_BadInput(D, E, i, 1)) {
bof = -1;
break;
}
@@ -543,7 +544,8 @@
return -1;
}
- entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1,
+ 1);
if (D->error) {
dreturn("%i", -1);
Modified: trunk/getdata/src/flush.c
===================================================================
--- trunk/getdata/src/flush.c 2011-12-13 02:53:25 UTC (rev 637)
+++ trunk/getdata/src/flush.c 2011-12-20 20:49:05 UTC (rev 638)
@@ -214,8 +214,8 @@
return ptr;
}
-static size_t _GD_StringEscapeise(FILE* stream, const char* in, int permissive,
- int standards)
+static size_t _GD_StringEscapeise(FILE *stream, const char *in, int meta,
+ int permissive, int standards)
{
const char* HexDigit = "0123456789ABCDEF";
size_t len = 0;
@@ -224,7 +224,7 @@
if (in == NULL || in[0] == '\0') {
fputs("\"\"", stream);
- dreturn("%zu", 2);
+ dreturn("%i", 2);
return 2;
}
@@ -252,7 +252,9 @@
fputc(HexDigit[*in >> 8], stream);
fputc(HexDigit[*in & 0xF], stream);
len += 4;
- } else {
+ } else if (meta && *in == '/')
+ break;
+ else {
fputc(*in, stream);
len++;
}
@@ -275,7 +277,7 @@
ptr = _GD_MungeCode(D, NULL, prefix, suffix, NULL, NULL, in, &dummy);
- for (i = _GD_StringEscapeise(stream, ptr, permissive, standards); i < len;
+ for (i = _GD_StringEscapeise(stream, ptr, 0, permissive, standards); i < len;
++i)
{
fputc(' ', stream);
@@ -297,7 +299,7 @@
if (scalar != NULL) {
char *ptr = _GD_MungeCode(D, NULL, D->fragment[me].prefix,
D->fragment[me].suffix, NULL, NULL, scalar, &dummy);
- _GD_StringEscapeise(stream, ptr, permissive, D->standards);
+ _GD_StringEscapeise(stream, ptr, 0, permissive, D->standards);
if (index == -1)
fprintf(stream, "%s", postamble);
else
@@ -339,15 +341,28 @@
return;
}
+ /* aliases */
+ if (E->field_type == GD_ALIAS_ENTRY) {
+ fputs("/ALIAS ", stream);
+ _GD_PadField(D, stream, D->fragment[me].prefix, D->fragment[me].suffix,
+ E->field, 0, permissive, D->standards);
+ fputc(' ', stream);
+ _GD_PadField(D, stream, D->fragment[me].prefix, D->fragment[me].suffix,
+ E->e->entry[1] ? E->e->entry[1]->field : E->in_fields[0], 0, permissive,
+ D->standards);
+ fputc('\n', stream);
+ dreturnvoid();
+ return;
+ }
+
ptr = E->field;
- /* From Standards Version 8 and on, just use Barth-style */
- if (meta && D->standards < 8) {
+ /* From Standards Version 7 and on, just use Barth-style */
+ if (meta && D->standards < 7) {
fputs("META ", stream);
- for (; *ptr != '/'; ++ptr)
- fputc(*ptr, stream);
+ _GD_StringEscapeise(stream, ptr, 1, permissive, D->standards);
fputc(' ', stream);
- ++ptr;
+ ptr = strchr(E->field, '/') + 1;
}
/* field name */
@@ -367,7 +382,8 @@
E->EN(lincom,n_fields));
for (i = 0; i < E->EN(lincom,n_fields); ++i) {
fputc(' ', stream);
- _GD_StringEscapeise(stream, E->in_fields[i], permissive, D->standards);
+ _GD_StringEscapeise(stream, E->in_fields[i], 0, permissive,
+ D->standards);
fputc(' ', stream);
if (E->comp_scal) {
_GD_WriteConst(D, stream, me, permissive, GD_COMPLEX128,
@@ -387,15 +403,15 @@
break;
case GD_LINTERP_ENTRY:
fprintf(stream, " LINTERP%s ", pretty ? " " : "");
- _GD_StringEscapeise(stream, E->in_fields[0], permissive, D->standards);
+ _GD_StringEscapeise(stream, E->in_fields[0], 0, permissive, D->standards);
fputc(' ', stream);
- _GD_StringEscapeise(stream, E->EN(linterp,table), permissive,
+ _GD_StringEscapeise(stream, E->EN(linterp,table), 0, permissive,
D->standards);
fputc('\n', stream);
break;
case GD_BIT_ENTRY:
fprintf(stream, " BIT%s ", pretty ? " " : "");
- _GD_StringEscapeise(stream, E->in_fields[0], permissive, D->standards);
+ _GD_StringEscapeise(stream, E->in_fields[0], 0, permissive, D->standards);
fputc(' ', stream);
_GD_WriteConst(D, stream, me, permissive, GD_INT16, &E->EN(bit,bitnum),
E->scalar[0], E->scalar_ind[0], " ");
@@ -404,35 +420,35 @@
break;
case GD_DIVIDE_ENTRY:
fprintf(stream, " DIVIDE%s ", pretty ? " " : "");
- _GD_StringEscapeise(stream, E->in_fields[0], permissive, D->standards);
+ _GD_StringEscapeise(stream, E->in_fields[0], 0, permissive, D->standards);
fputc(' ', stream);
- _GD_StringEscapeise(stream, E->in_fields[1], permissive, D->standards);
+ _GD_StringEscapeise(stream, E->in_fields[1], 0, permissive, D->standards);
fputc('\n', stream);
break;
case GD_RECIP_ENTRY:
fprintf(stream, " RECIP%s ", pretty ? " " : "");
- _GD_StringEscapeise(stream, E->in_fields[0], permissive, D->standards);
+ _GD_StringEscapeise(stream, E->in_fields[0], 0, permissive, D->standards);
fputc(' ', stream);
_GD_WriteConst(D, stream, me, permissive, GD_COMPLEX128,
&E->EN(recip,cdividend), E->scalar[0], E->scalar_ind[0], "\n");
break;
case GD_MULTIPLY_ENTRY:
fputs(" MULTIPLY ", stream);
- _GD_StringEscapeise(stream, E->in_fields[0], permissive, D->standards);
+ _GD_StringEscapeise(stream, E->in_fields[0], 0, permissive, D->standards);
fputc(' ', stream);
- _GD_StringEscapeise(stream, E->in_fields[1], permissive, D->standards);
+ _GD_StringEscapeise(stream, E->in_fields[1], 0, permissive, D->standards);
fputc('\n', stream);
break;
case GD_PHASE_ENTRY:
fprintf(stream, " PHASE%s ", pretty ? " " : "");
- _GD_StringEscapeise(stream, E->in_fields[0], permissive, D->standards);
+ _GD_StringEscapeise(stream, E->in_fields[0], 0, permissive, D->standards);
fputc(' ', stream);
_GD_WriteConst(D, stream, me, permissive, GD_INT64, &E->EN(phase,shift),
E->scalar[0], E->scalar_ind[0], "\n");
break;
case GD_POLYNOM_ENTRY:
fprintf(stream, " POLYNOM%s ", pretty ? " " : "");
- _GD_StringEscapeise(stream, E->in_fields[0], permissive, D->standards);
+ _GD_StringEscapeise(stream, E->in_fields[0], 0, permissive, D->standards);
fputc(' ', stream);
for (i = 0; i <= E->EN(polynom,poly_ord); ++i)
if (E->comp_scal)
@@ -446,7 +462,7 @@
break;
case GD_SBIT_ENTRY:
fprintf(stream, " SBIT%s ", pretty ? " " : "");
- _GD_StringEscapeise(stream, E->in_fields[0], permissive, D->standards);
+ _GD_StringEscapeise(stream, E->in_fields[0], 0, permissive, D->standards);
fputc(' ', stream);
_GD_WriteConst(D, stream, me, permissive, GD_INT16, &E->EN(bit,bitnum),
E->scalar[0], E->scalar_ind[0], " ");
@@ -455,9 +471,9 @@
break;
case GD_WINDOW_ENTRY:
fprintf(stream, " WINDOW%s ", pretty ? " " : "");
- _GD_StringEscapeise(stream, E->in_fields[0], permissive, D->standards);
+ _GD_StringEscapeise(stream, E->in_fields[0], 0, permissive, D->standards);
fputc(' ', stream);
- _GD_StringEscapeise(stream, E->in_fields[1], permissive, D->standards);
+ _GD_StringEscapeise(stream, E->in_fields[1], 0, permissive, D->standards);
fprintf(stream, " %s ", _GD_WindopName(D, E->EN(window,windop)));
switch (E->EN(window,windop)) {
case GD_WINDOP_EQ:
@@ -509,7 +525,7 @@
break;
case GD_STRING_ENTRY:
fprintf(stream, " STRING%s ", pretty ? " " : "");
- _GD_StringEscapeise(stream, E->e->u.string, permissive, D->standards);
+ _GD_StringEscapeise(stream, E->e->u.string, 0, permissive, D->standards);
fputc('\n', stream);
break;
case GD_INDEX_ENTRY:
@@ -677,17 +693,17 @@
NULL, D->fragment[j].suffix, &dummy);
fprintf(stream, "%sINCLUDE ", (D->standards >= 5) ? "/" : "");
- _GD_StringEscapeise(stream, D->fragment[j].ename, permissive,
+ _GD_StringEscapeise(stream, D->fragment[j].ename, 0, permissive,
D->standards);
if (prefix || suffix) {
fputc(' ', stream);
- _GD_StringEscapeise(stream, prefix, permissive, D->standards);
+ _GD_StringEscapeise(stream, prefix, 0, permissive, D->standards);
free(prefix);
}
if (suffix) {
fputc(' ', stream);
- _GD_StringEscapeise(stream, suffix, permissive, D->standards);
+ _GD_StringEscapeise(stream, suffix, 0, permissive, D->standards);
free(suffix);
}
fputc('\n', stream);
@@ -708,7 +724,7 @@
if (permissive || D->standards >= 6)
if (D->fragment[i].ref_name != NULL) {
fputs("/REFERENCE ", stream);
- _GD_StringEscapeise(stream, D->fragment[i].ref_name, permissive,
+ _GD_StringEscapeise(stream, D->fragment[i].ref_name, 0, permissive,
D->standards);
fputc('\n', stream);
}
@@ -834,7 +850,8 @@
_GD_Flush(D, D->entry[i], clo);
} else {
/* discard representation */
- E = _GD_FindFieldAndRepr(D, field_code, &simple_field_code, &repr, NULL, 1);
+ E = _GD_FindFieldAndRepr(D, field_code, &simple_field_code, &repr, NULL, 1,
+ 1);
if (!D->error)
_GD_Flush(D, E, clo);
Modified: trunk/getdata/src/fpos.c
===================================================================
--- trunk/getdata/src/fpos.c 2011-12-13 02:53:25 UTC (rev 637)
+++ trunk/getdata/src/fpos.c 2011-12-20 20:49:05 UTC (rev 638)
@@ -44,13 +44,13 @@
D->fragment[E->fragment_index].frame_offset;
break;
case GD_LINCOM_ENTRY:
- if (_GD_BadInput(D, E, 0))
+ if (_GD_BadInput(D, E, 0, 1))
break;
pos = _GD_GetFilePos(D, E->e->entry[0], -1);
if (!D->error)
for (i = 1; i < E->EN(lincom,n_fields); ++i) {
- if (_GD_BadInput(D, E, i)) {
+ if (_GD_BadInput(D, E, i, 1)) {
pos = -1;
break;
}
@@ -67,14 +67,14 @@
case GD_POLYNOM_ENTRY:
case GD_SBIT_ENTRY:
case GD_RECIP_ENTRY:
- if (_GD_BadInput(D, E, 0))
+ if (_GD_BadInput(D, E, 0, 1))
break;
pos = _GD_GetFilePos(D, E->e->entry[0], -1);
break;
case GD_MULTIPLY_ENTRY:
case GD_DIVIDE_ENTRY:
case GD_WINDOW_ENTRY:
- if (_GD_BadInput(D, E, 0) || _GD_BadInput(D, E, 1))
+ if (_GD_BadInput(D, E, 0, 1) || _GD_BadInput(D, E, 1, 1))
break;
pos = _GD_GetFilePos(D, E->e->entry[0], 0);
pos2 = _GD_GetFilePos(D, E->e->entry[0], pos);
@@ -84,7 +84,7 @@
}
break;
case GD_PHASE_ENTRY:
- if (_GD_BadInput(D, E, 0))
+ if (_GD_BadInput(D, E, 0, 1))
break;
pos = _GD_GetFilePos(D, E->e->entry[0], -1);
if (pos >= 0)
@@ -127,7 +127,8 @@
_GD_ClearError(D);
- entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1,
+ 1);
if (D->error) {
dreturn("%u", 0);
@@ -262,7 +263,7 @@
break;
case GD_LINCOM_ENTRY:
for (i = 0; i < E->EN(lincom,n_fields); ++i)
- if (!_GD_BadInput(D, E, i))
+ if (!_GD_BadInput(D, E, i, 1))
_GD_Seek(D, E->e->entry[i], offset, mode);
else
break;
@@ -270,7 +271,7 @@
case GD_MULTIPLY_ENTRY:
case GD_DIVIDE_ENTRY:
case GD_WINDOW_ENTRY:
- if (_GD_BadInput(D, E, 1))
+ if (_GD_BadInput(D, E, 1, 1))
break;
if (_GD_Seek(D, E->e->entry[1], offset, mode))
break;
@@ -280,11 +281,11 @@
case GD_POLYNOM_ENTRY:
case GD_SBIT_ENTRY:
case GD_RECIP_ENTRY:
- if (!_GD_BadInput(D, E, 0))
+ if (!_GD_BadInput(D, E, 0, 1))
_GD_Seek(D, E->e->entry[0], offset, mode);
break;
case GD_PHASE_ENTRY:
- if (!_GD_BadInput(D, E, 0))
+ if (!_GD_BadInput(D, E, 0, 1))
_GD_Seek(D, E->e->entry[0], offset + E->EN(phase,shift), mode);
break;
case GD_INDEX_ENTRY:
@@ -325,7 +326,8 @@
_GD_ClearError(D);
- entry = _GD_FindFieldAndRepr(D, field_code_in, &field_code, &repr, NULL, 1);
+ entry = _GD_FindF...
[truncated message content] |
|
From: <ket...@us...> - 2011-12-13 02:53:33
|
Revision: 637
http://getdata.svn.sourceforge.net/getdata/?rev=637&view=rev
Author: ketiltrout
Date: 2011-12-13 02:53:25 +0000 (Tue, 13 Dec 2011)
Log Message:
-----------
Added gd_fragment_affixes(), gd_alter_affixes(), gd_include_affixes() to the API.
Modified Paths:
--------------
trunk/getdata/ChangeLog
trunk/getdata/src/add.c
trunk/getdata/src/common.c
trunk/getdata/src/entry.c
trunk/getdata/src/flush.c
trunk/getdata/src/fragment.c
trunk/getdata/src/getdata.h.in
trunk/getdata/src/include.c
trunk/getdata/src/internal.h
trunk/getdata/src/move.c
trunk/getdata/src/name.c
trunk/getdata/src/parse.c
trunk/getdata/test/Makefile.am
trunk/getdata/test/alter_spec_affix.c
trunk/getdata/test/name_affix.c
Added Paths:
-----------
trunk/getdata/test/fragment_affix.c
trunk/getdata/test/fragment_affix_alter.c
trunk/getdata/test/fragment_affix_alter2.c
trunk/getdata/test/fragment_affix_dup.c
trunk/getdata/test/include_affix.c
Property Changed:
----------------
trunk/getdata/test/
Modified: trunk/getdata/ChangeLog
===================================================================
--- trunk/getdata/ChangeLog 2011-12-11 23:48:27 UTC (rev 636)
+++ trunk/getdata/ChangeLog 2011-12-13 02:53:25 UTC (rev 637)
@@ -1,3 +1,21 @@
+2011-12-13 D. V. Wiebe <ge...@ke...> svn:637
+ * test/fragment_affix_alter2.c test/fragment_affix_alter.c
+ test/fragment_affix_dup.c test/fragment_affix.c test/include_affix.c: Added.
+
+ * src/move.c (_GD_StrCmpNull): Renamed from strcmpnull and de-statickified.
+
+ * src/name.c (_GD_MungeFromFrag): Added.
+ * src/name.c (_GD_MungeCode): Converted into a swiss army munger handling
+ both enmunging and demunging. Most old, simple, uses of this function now
+ call _GD_MungeFromFrag (which calls this) instead.
+ * src/flush.c (_GD_DeMungeCode): Deleted in favour of the new _GD_MungeCode.
+
+ * src/fragment.c (gd_fragment_affixes _GD_CheckAffixes _GD_ChangeAffixes
+ gd_alter_affixes): Added.
+
+ * src/include.c (gd_include_affix): Renamed from gd_include.
+ * src/include.c (gd_include): Added.
+
2011-12-11 D. V. Wiebe <ge...@ke...> svn:635
* test/add_string_affix.c test/name_affix_bad.c test/move_affix.c
test/alter_entry_affix.c test/alter_entry_affix.c test/madd_affix.c
Modified: trunk/getdata/src/add.c
===================================================================
--- trunk/getdata/src/add.c 2011-12-11 23:48:27 UTC (rev 636)
+++ trunk/getdata/src/add.c 2011-12-13 02:53:25 UTC (rev 637)
@@ -88,8 +88,8 @@
}
} else
/* Apply prefix and suffix */
- temp_buffer = _GD_MungeCode(D, NULL, entry->fragment_index, entry->field,
- &offset);
+ temp_buffer = _GD_MungeFromFrag(D, NULL, entry->fragment_index,
+ entry->field, &offset);
if (temp_buffer == NULL) {
dreturn("%p", NULL);
Modified: trunk/getdata/src/common.c
===================================================================
--- trunk/getdata/src/common.c 2011-12-11 23:48:27 UTC (rev 636)
+++ trunk/getdata/src/common.c 2011-12-13 02:53:25 UTC (rev 637)
@@ -819,7 +819,7 @@
dtrace("%p, %p, %i", D, E, i);
if (E->e->entry[i] == NULL) {
- munged_code = _GD_MungeCode(D, NULL, E->fragment_index, E->in_fields[i],
+ munged_code = _GD_MungeFromFrag(D, NULL, E->fragment_index, E->in_fields[i],
&offset);
if (munged_code)
E->e->entry[i] = _GD_FindFieldAndRepr(D, munged_code, &code,
Modified: trunk/getdata/src/entry.c
===================================================================
--- trunk/getdata/src/entry.c 2011-12-11 23:48:27 UTC (rev 636)
+++ trunk/getdata/src/entry.c 2011-12-13 02:53:25 UTC (rev 637)
@@ -143,7 +143,8 @@
dtrace("%p, %p, %i, %i, %p", D, E, i, type, data);
if (scalar != NULL) {
- munged_code = _GD_MungeCode(D, NULL, E->fragment_index, scalar, &offset);
+ munged_code = _GD_MungeFromFrag(D, NULL, E->fragment_index, scalar,
+ &offset);
if (munged_code)
C = _GD_FindFieldAndRepr(D, munged_code, &field_code, &repr, NULL, 0);
Modified: trunk/getdata/src/flush.c
===================================================================
--- trunk/getdata/src/flush.c 2011-12-11 23:48:27 UTC (rev 636)
+++ trunk/getdata/src/flush.c 2011-12-13 02:53:25 UTC (rev 637)
@@ -22,50 +22,6 @@
#define GD_MAX_PRETTY_FIELD_WIDTH 80
-/* remove the prefix and suffix from a field code */
-char *_GD_DeMungeCode(const char *prefix, const char *suffix, const char *code)
-{
- size_t i, len, slen;
- char *ptr;
-
- dtrace("\"%s\", \"%s\", \"%s\"", prefix, suffix, code);
-
- if (code == NULL) {
- dreturn("%p", NULL);
- return NULL;
- }
-
- /* Verify the prefix is present */
- if (prefix) {
- for (i = 0; prefix[i]; ++i) {
- if (prefix[i] != code[i]) {
- /* prefix missing */
- dreturn("%p", NULL);
- return NULL;
- }
- }
- ptr = strdup(code + i);
- } else
- ptr = strdup(code);
-
- /* Verify the suffix is present */
- if (suffix) {
- len = strlen(ptr);
- slen = strlen(suffix);
- for (i = 0; i < slen; ++i) {
- if (suffix[i] != ptr[len - slen + i]) {
- /* suffix missing */
- dreturn("%p", NULL);
- return NULL;
- }
- }
- ptr[len - slen] = '\0';
- }
-
- dreturn("\"%s\"", ptr);
- return ptr;
-}
-
void _GD_Flush(DIRFILE* D, gd_entry_t *E, int clo)
{
int i;
@@ -306,16 +262,18 @@
return len;
}
-static void _GD_PadField(FILE* stream, const char *prefix, const char *suffix,
- const char* in, size_t len, int permissive, int standards)
+static void _GD_PadField(DIRFILE *D, FILE* stream, const char *prefix,
+ const char *suffix, const char* in, size_t len, int permissive,
+ int standards)
{
size_t i;
+ int dummy;
char *ptr;
- dtrace("%p, \"%s\", \"%s\", \"%s\", %zu, %i, %i", stream, prefix, suffix, in,
- len, permissive, standards);
+ dtrace("%p, %p, \"%s\", \"%s\", \"%s\", %zu, %i, %i", D, stream, prefix,
+ suffix, in, len, permissive, standards);
- ptr = _GD_DeMungeCode(prefix, suffix, in);
+ ptr = _GD_MungeCode(D, NULL, prefix, suffix, NULL, NULL, in, &dummy);
for (i = _GD_StringEscapeise(stream, ptr, permissive, standards); i < len;
++i)
@@ -332,12 +290,13 @@
int type, const void* value, const char* scalar, int index,
const char* postamble)
{
+ int dummy;
dtrace("%p, %p, %i, %i, 0x%X, %p, \"%s\", %i, \"%s\"", D, stream, me,
permissive, type, value, scalar, index, postamble);
if (scalar != NULL) {
- char *ptr = _GD_DeMungeCode(D->fragment[me].prefix, D->fragment[me].suffix,
- scalar);
+ char *ptr = _GD_MungeCode(D, NULL, D->fragment[me].prefix,
+ D->fragment[me].suffix, NULL, NULL, scalar, &dummy);
_GD_StringEscapeise(stream, ptr, permissive, D->standards);
if (index == -1)
fprintf(stream, "%s", postamble);
@@ -392,7 +351,7 @@
}
/* field name */
- _GD_PadField(stream, D->fragment[me].prefix, D->fragment[me].suffix, ptr,
+ _GD_PadField(D, stream, D->fragment[me].prefix, D->fragment[me].suffix, ptr,
max_len, permissive, D->standards);
switch(E->field_type) {
@@ -561,7 +520,7 @@
if (!D->error && E->hidden && (permissive || D->standards >= 9)) {
fputs("/HIDDEN ", stream);
- _GD_PadField(stream, D->fragment[me].prefix, D->fragment[me].suffix,
+ _GD_PadField(D, stream, D->fragment[me].prefix, D->fragment[me].suffix,
E->field, 0, permissive, D->standards);
fputc('\n', stream);
}
@@ -577,7 +536,7 @@
char temp_file[] = "format_XXXXXX";
char* ptr;
struct tm now;
- int fd;
+ int fd, dummy;
int pretty = 0;
size_t max_len = 0;
unsigned int u;
@@ -712,10 +671,10 @@
if (permissive || D->standards >= 3)
for (j = 0; j < D->n_fragment; ++j)
if (D->fragment[j].parent == i) {
- char *prefix = _GD_DeMungeCode(D->fragment[i].prefix, NULL,
- D->fragment[j].prefix);
- char *suffix = _GD_DeMungeCode(NULL, D->fragment[i].suffix,
- D->fragment[j].suffix);
+ char *prefix = _GD_MungeCode(D, NULL, D->fragment[i].prefix, NULL, NULL,
+ NULL, D->fragment[j].prefix, &dummy);
+ char *suffix = _GD_MungeCode(D, NULL, NULL, D->fragment[i].suffix, NULL,
+ NULL, D->fragment[j].suffix, &dummy);
fprintf(stream, "%sINCLUDE ", (D->standards >= 5) ? "/" : "");
_GD_StringEscapeise(stream, D->fragment[j].ename, permissive,
Modified: trunk/getdata/src/fragment.c
===================================================================
--- trunk/getdata/src/fragment.c 2011-12-11 23:48:27 UTC (rev 636)
+++ trunk/getdata/src/fragment.c 2011-12-13 02:53:25 UTC (rev 637)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2008,2010 D. V. Wiebe
+/* Copyright (C) 2008,2010,2011 D. V. Wiebe
*
***************************************************************************
*
@@ -42,6 +42,207 @@
return D->fragment[index].cname;
}
+int gd_fragment_affixes(DIRFILE *D, int index, char **prefix, char **suffix)
+ gd_nothrow
+{
+ char *p = NULL, *s = NULL;
+ dtrace("%p, %i, %p, %p", D, index, prefix, suffix);
+
+ _GD_ClearError(D);
+
+ if (D->flags & GD_INVALID) {
+ _GD_SetError(D, GD_E_BAD_DIRFILE, 0, NULL, 0, NULL);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ if (index < 0 || index >= D->n_fragment) {
+ _GD_SetError(D, GD_E_BAD_INDEX, 0, NULL, 0, NULL);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ if (D->fragment[index].prefix)
+ p = _GD_Strdup(D, D->fragment[index].prefix);
+ if (D->fragment[index].suffix)
+ s = _GD_Strdup(D, D->fragment[index].suffix);
+
+ if (D->error) {
+ free(p);
+ free(s);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ *prefix = p;
+ *suffix = s;
+ dreturn("%i", 0);
+ return 0;
+}
+
+static char **_GD_CheckAffixes(DIRFILE *D, int i, const char *prefix,
+ const char *suffix, char **codes, unsigned *n)
+{
+ int j, dummy;
+ unsigned u, nn = *n;
+ char **new_codes = codes, **ptr;
+
+ dtrace("%p, %i, \"%s\", \"%s\", %p, %p", D, i, prefix, suffix, new_codes, n);
+
+ ptr = _GD_Realloc(D, codes, sizeof(char*) * (nn + 2));
+ if (!ptr) {
+ dreturn("%p (%i)", codes, *n);
+ return codes;
+ }
+ new_codes = ptr;
+
+ /* push the new prefix and suffix onto the code stack */
+ new_codes[nn++] = prefix ? _GD_Strdup(D, prefix) : NULL;
+ new_codes[nn++] = suffix ? _GD_Strdup(D, suffix) : NULL;
+ *n = nn;
+
+ if (D->error) {
+ dreturn("%p (%i)", new_codes, *n);
+ return new_codes;
+ }
+
+ /* Propagate changes downward */
+ for (j = 0; j < D->n_fragment; ++j)
+ if (D->fragment[j].parent == i) {
+ char *subprefix = _GD_MungeCode(D, NULL, D->fragment[i].prefix, NULL,
+ prefix, NULL, D->fragment[j].prefix, &dummy);
+ char *subsuffix = _GD_MungeCode(D, NULL, NULL, D->fragment[i].suffix,
+ NULL, suffix, D->fragment[j].suffix, &dummy);
+ if (D->error) {
+ dreturn("%p (%i)", new_codes, *n);
+ return new_codes;
+ }
+
+ new_codes = _GD_CheckAffixes(D, j, subprefix, subsuffix, new_codes, n);
+ nn = *n;
+
+ if (D->error) {
+ dreturn("%p (%i)", new_codes, *n);
+ return new_codes;
+ }
+ }
+
+ /* Check for namespace clashes in our files */
+ for (u = 0; u < D->n_entries; ++u)
+ if (D->entry[u]->fragment_index == i && D->entry[u]->e->n_meta != -1) {
+ ptr = _GD_Realloc(D, new_codes, sizeof(char*) * ++nn);
+ if (ptr) {
+ new_codes = ptr;
+ /* remunge the code */
+ new_codes[nn - 1] = _GD_MungeCode(D, NULL, D->fragment[i].prefix,
+ D->fragment[i].suffix, prefix, suffix, D->entry[u]->field, &dummy);
+
+ /* look for a duplicate and validate */
+ if (new_codes[nn - 1] && _GD_FindField(D, new_codes[nn - 1], D->entry,
+ D->n_entries, (unsigned int*)&dummy))
+ {
+ _GD_SetError(D, GD_E_DUPLICATE, 0, NULL, 0, new_codes[nn - 1]);
+ } else if (_GD_ValidateField(new_codes[nn - 1], D->standards, 1, 0,
+ &dummy))
+ {
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_INVALID, NULL, 0,
+ new_codes[nn - 1]);
+ }
+ } else
+ nn--;
+
+ if (D->error)
+ break;
+ }
+
+ *n = nn;
+ dreturn("%p (%i)", new_codes, *n);
+ return new_codes;
+}
+
+static int _GD_ChangeAffixes(DIRFILE *D, int i, char **codes, int *resort)
+{
+ int j;
+ unsigned u, n = 2;
+
+ dtrace("%p, %i, %p, %p", D, i, codes, resort);
+
+ free(D->fragment[i].prefix);
+ free(D->fragment[i].suffix);
+ D->fragment[i].prefix = codes[0];
+ D->fragment[i].suffix = codes[1];
+
+ /* Propagate changes downward */
+ for (j = 0; j < D->n_fragment; ++j)
+ if (D->fragment[j].parent == i)
+ n += _GD_ChangeAffixes(D, j, codes + n, resort);
+
+ /* rename all the fields */
+ for (u = 0; u < D->n_entries; ++u)
+ if (D->entry[u]->fragment_index == i && D->entry[u]->e->n_meta != -1) {
+ *resort = 1;
+ free(D->entry[u]->field);
+ D->entry[u]->field = codes[n++];
+ }
+
+ dreturn("%i", n);
+ return n;
+}
+
+int gd_alter_affixes(DIRFILE *D, int index, const char *prefix,
+ const char *suffix) gd_nothrow
+{
+ unsigned u, n = 0;
+ char **new_codes;
+ int resort = 0;
+ dtrace("%p, %i, \"%s\", \"%s\"", D, index, prefix, suffix);
+
+ _GD_ClearError(D);
+
+ if (D->flags & GD_INVALID) {
+ _GD_SetError(D, GD_E_BAD_DIRFILE, 0, NULL, 0, NULL);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ if (index <= 0 || index >= D->n_fragment) {
+ _GD_SetError(D, GD_E_BAD_INDEX, 0, NULL, 0, NULL);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ /* nothing to do */
+ if (_GD_StrCmpNull(prefix, D->fragment[index].prefix) == 0 &&
+ _GD_StrCmpNull(suffix, D->fragment[index].suffix) == 0)
+ {
+ dreturn("%i", 0);
+ return 0;
+ }
+
+ new_codes = _GD_CheckAffixes(D, index, prefix, suffix, NULL, &n);
+
+ if (D->error) {
+ for (u = 0; u < n; ++u)
+ free(new_codes[u]);
+ free(new_codes);
+ dreturn("%i", -1);
+ return -1;
+ }
+
+ _GD_ChangeAffixes(D, index, new_codes, &resort);
+
+ free(new_codes);
+
+ if (resort) {
+ /* resort */
+ qsort(D->entry, D->n_entries, sizeof(gd_entry_t*), _GD_EntryCmp);
+ qsort(D->dot_list, D->n_dot, sizeof(gd_entry_t*), _GD_EntryCmp);
+ }
+
+ dreturn("%i", 0);
+ return 0;
+}
+
int gd_nfragments(DIRFILE* D) gd_nothrow
{
dtrace("%p", D);
Modified: trunk/getdata/src/getdata.h.in
===================================================================
--- trunk/getdata/src/getdata.h.in 2011-12-11 23:48:27 UTC (rev 636)
+++ trunk/getdata/src/getdata.h.in 2011-12-13 02:53:25 UTC (rev 637)
@@ -527,6 +527,9 @@
gd_triplet_t threshold, int fragment_index) gd_nothrow
gd_nonnull ((1,2,3,4));
+extern int gd_alter_affixes(DIRFILE *dirfile, int index, const char *prefix,
+ const char *suffix) gd_nothrow gd_nonnull ((1));
+
extern int gd_alter_bit(DIRFILE *dirfile, const char *field_code,
const char *in_field, gd_bit_t bitnum, gd_bit_t numbits) gd_nothrow
gd_nonnull((1,2));
@@ -640,6 +643,9 @@
extern const char **gd_field_list_by_type(DIRFILE *dirfile,
gd_entype_t type) gd_nothrow gd_nonnull ((1));
+extern int gd_fragment_affixes(DIRFILE *dirfile, int index, char **prefix,
+ char **suffix) gd_nonnull ((1,3,4)) gd_nothrow;
+
extern int gd_fragment_index(DIRFILE *dirfile,
const char *field_code) gd_nothrow gd_nonnull ((1));
@@ -856,6 +862,10 @@
extern int gd_include(DIRFILE *dirfile, const char *file, int fragment_index,
unsigned long int flags) gd_nonnull ((1,2));
+extern int gd_include_affix(DIRFILE *dirfile, const char *file,
+ int fragment_index, const char *prefix, const char *suffix,
+ unsigned long int flags) gd_nonnull ((1,2));
+
extern double gd_framenum(DIRFILE *dirfile, const char *field_code,
double value) gd_nonnull ((1,2));
Modified: trunk/getdata/src/include.c
===================================================================
--- trunk/getdata/src/include.c 2011-12-11 23:48:27 UTC (rev 636)
+++ trunk/getdata/src/include.c 2011-12-13 02:53:25 UTC (rev 637)
@@ -257,14 +257,15 @@
return D->n_fragment - 1;
}
-int gd_include(DIRFILE* D, const char* file, int fragment_index,
- unsigned long flags)
+int gd_include_affix(DIRFILE* D, const char* file, int fragment_index,
+ const char *prefix, const char *suffix, unsigned long flags)
{
int standards = GD_DIRFILE_STANDARDS_VERSION;
char* ref_name = NULL;
int i, new_fragment;
- dtrace("%p, \"%s\", %i, %lx", D, file, fragment_index, (unsigned long)flags);
+ dtrace("%p, \"%s\", %i, \"%s\", \"%s\", 0x%lX", D, file, fragment_index,
+ prefix, suffix, flags);
if (~D->flags & GD_HAVE_VERSION)
_GD_FindVersion(D);
@@ -308,7 +309,7 @@
flags |= D->flags & GD_ENCODING;
new_fragment = _GD_Include(D, file, "dirfile_include()", 0, &ref_name,
- fragment_index, NULL, NULL, &standards, &flags);
+ fragment_index, prefix, suffix, &standards, &flags);
if (!D->error) {
D->fragment[fragment_index].modified = 1;
@@ -353,6 +354,19 @@
return new_fragment;
}
+int gd_include(DIRFILE* D, const char* file, int fragment_index,
+ unsigned long flags)
+{
+ int new_fragment;
+
+ dtrace("%p, \"%s\", %i, 0x%lX", D, file, fragment_index, flags);
+
+ new_fragment = gd_include_affix(D, file, fragment_index, NULL, NULL, flags);
+
+ dreturn("%i", new_fragment);
+ return new_fragment;
+}
+
static int _GD_CollectFragments(DIRFILE* D, int** f, int fragment, int nf)
{
int i;
Modified: trunk/getdata/src/internal.h
===================================================================
--- trunk/getdata/src/internal.h 2011-12-11 23:48:27 UTC (rev 636)
+++ trunk/getdata/src/internal.h 2011-12-13 02:53:25 UTC (rev 637)
@@ -911,7 +911,6 @@
void _GD_ConvertType(DIRFILE* D, const void *data_in, gd_type_t in_type,
void *data_out, gd_type_t out_type, size_t n) gd_nothrow;
gd_type_t _GD_ConstType(DIRFILE *D, gd_type_t type);
-char *_GD_DeMungeCode(const char *prefix, const char *suffix, const char *code);
const char *_GD_DirName(const DIRFILE *D, int dirfd);
#define _GD_EntryIndex(t) \
@@ -979,7 +978,9 @@
int _GD_MogrifyFile(DIRFILE* D, gd_entry_t* E, unsigned long int encoding,
unsigned long int byte_sex, off64_t offset, int finalise, int new_fragment,
char* new_filebase);
-char *_GD_MungeCode(DIRFILE*, const gd_entry_t*, int, const char*, int*);
+char *_GD_MungeCode(DIRFILE*, const gd_entry_t*, const char *, const char*,
+ const char*, const char*, const char*, int*);
+char *_GD_MungeFromFrag(DIRFILE*, const gd_entry_t*, int, const char*, int*);
gd_type_t _GD_NativeType(DIRFILE* D, gd_entry_t* E, int repr);
gd_entry_t* _GD_ParseFieldSpec(DIRFILE* D, int n_cols, char** in_cols,
const gd_entry_t* P, const char* format_file, int linenum, int me,
@@ -994,6 +995,7 @@
void _GD_SetError(DIRFILE* D, int error, int suberror, const char* format_file,
int line, const char* token);
int _GD_SetTablePath(DIRFILE *D, gd_entry_t *E, struct _gd_private_entry *e);
+int _GD_StrCmpNull(const char *, const char *);
int _GD_Supports(DIRFILE* D, gd_entry_t* E, unsigned int funcs);
int _GD_Tokenise(DIRFILE *D, const char* instring, char **outstring,
const char **pos, char** in_cols, const char* format_file, int linenum,
Modified: trunk/getdata/src/move.c
===================================================================
--- trunk/getdata/src/move.c 2011-12-11 23:48:27 UTC (rev 636)
+++ trunk/getdata/src/move.c 2011-12-13 02:53:25 UTC (rev 637)
@@ -282,7 +282,7 @@
return 0;
}
-static int strcmpnull(const char *s1, const char *s2)
+int _GD_StrCmpNull(const char *s1, const char *s2)
{
int r;
@@ -369,8 +369,8 @@
}
/* Compose the field's new name */
- new_filebase = _GD_DeMungeCode(D->fragment[E->fragment_index].prefix,
- D->fragment[E->fragment_index].suffix, E->field);
+ new_filebase = _GD_MungeCode(D, NULL, D->fragment[E->fragment_index].prefix,
+ D->fragment[E->fragment_index].suffix, NULL, NULL, E->field, &dummy);
if (!new_filebase) {
_GD_InternalError(D); /* the prefix/suffix wasn't found */
@@ -378,7 +378,7 @@
return -1;
}
- new_code = _GD_MungeCode(D, NULL, new_fragment, new_filebase, &dummy);
+ new_code = _GD_MungeFromFrag(D, NULL, new_fragment, new_filebase, &dummy);
if (strcmp(new_code, E->field)) {
/* duplicate check */
@@ -436,7 +436,7 @@
D->fragment[new_fragment].byte_sex ||
D->fragment[E->fragment_index].frame_offset !=
D->fragment[new_fragment].frame_offset ||
- strcmpnull(D->fragment[E->fragment_index].sname,
+ _GD_StrCmpNull(D->fragment[E->fragment_index].sname,
D->fragment[new_fragment].sname)))
{
if (_GD_MogrifyFile(D, E, D->fragment[new_fragment].encoding,
Modified: trunk/getdata/src/name.c
===================================================================
--- trunk/getdata/src/name.c 2011-12-11 23:48:27 UTC (rev 636)
+++ trunk/getdata/src/name.c 2011-12-13 02:53:25 UTC (rev 637)
@@ -20,59 +20,117 @@
*/
#include "internal.h"
-/* Munge a field code or field name using the prefix and suffix of the current
- * fragment. Returns a newly malloc'd munged code, or NULL on error */
-char *_GD_MungeCode(DIRFILE *D, const gd_entry_t *P, int me, const char *code,
- int *offset)
+/* add/remove/modify the prefix and suffix from a field code */
+char *_GD_MungeCode(DIRFILE *D, const gd_entry_t *P, const char *old_prefix,
+ const char *old_suffix, const char *new_prefix, const char *new_suffix,
+ const char *code, int *offset)
{
- char *ptr, *slash;
- size_t len = strlen(code);
- size_t slen;
- size_t plen;
+ size_t len, oplen = 0, oslen = 0, nplen = 0, nslen = 0, plen = 0, mlen = 0;
+ const char *ptr, *slash;
+ char *new_code;
- dtrace("%p, %p, %i, \"%s\", %p", D, P, me, code, offset);
+ dtrace("%p, %p, \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", %p", D, P, old_prefix,
+ old_suffix, new_prefix, new_suffix, code, offset);
+ if (code == NULL) {
+ dreturn("%p", NULL);
+ return NULL;
+ }
+
+ len = strlen(code);
+
+ /* Verify the old prefix is present */
+ if (old_prefix) {
+ oplen = strlen(old_prefix);
+ if (strncmp(old_prefix, code, oplen)) {
+ /* prefix missing */
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_INVALID, NULL, 0, code);
+ dreturn("%p", NULL);
+ return NULL;
+ }
+ ptr = code + oplen;
+ len -= oplen;
+ } else
+ ptr = code;
+
+ /* look for a /, which could indicate this is a metafield code. If it is
+ * just an illegal name with a / in it, mungeing will screw up, but
+ * validation will catch the illegal name later anyways.
+ */
+ if ((slash = memchr(ptr, '/', len))) {
+ mlen = len + (ptr - slash);
+ len = slash++ - ptr;
+ }
+
+ /* Verify the suffix is present */
+ if (old_suffix) {
+ oslen = strlen(old_suffix);
+ if (strncmp(old_suffix, ptr + len - oslen, oslen)) {
+ /* suffix missing */
+ _GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_INVALID, NULL, 0, code);
+ dreturn("%p", NULL);
+ return NULL;
+ }
+ len -= oslen;
+ }
+
+ if (new_prefix)
+ nplen = strlen(new_prefix);
+
+ if (new_suffix)
+ nslen = strlen(new_suffix);
+
+ if (P)
+ plen = strlen(P->field) + 1;
+
+ if ((new_code = _GD_Malloc(D, plen + nplen + len + nslen + mlen + 1)) == NULL)
+ {
+ dreturn("%p", NULL);
+ return NULL;
+ }
+
if (P) {
- plen = strlen(P->field);
- ptr = (char*)_GD_Malloc(D, len + plen + 2);
- if (ptr) {
- strcpy(ptr, P->field);
- ptr[plen] = '/';
- strcpy(ptr + plen + 1, code);
- }
- *offset = plen + 1;
+ strcpy(new_code, P->field);
+ new_code[plen - 1] = '/';
+ strcpy(new_code + plen, ptr);
} else {
- *offset = 0;
- slen = (D->fragment[me].suffix) ? strlen(D->fragment[me].suffix) : 0;
- plen = (D->fragment[me].prefix) ? strlen(D->fragment[me].prefix) : 0;
- ptr = (char*)_GD_Malloc(D, len + slen + plen + 1);
- if (ptr) {
- /* look for a /, which could indicate this is a field code, not just a
- * field name. If it is just an illegal name with a / in it, mungeing
- * will fail, but validation will catch the illegal name later anyways.
- */
- if ((slash = strchr(code, '/')))
- len = slash++ - code;
+ if (nplen > 0)
+ strcpy(new_code, new_prefix);
- if (plen > 0)
- strcpy(ptr, D->fragment[me].prefix);
+ strncpy(new_code + nplen, ptr, len);
- strncpy(ptr + plen, code, len + 1);
+ if (nslen > 0)
+ strcpy(new_code + nplen + len, new_suffix);
- if (slen > 0)
- strcpy(ptr + plen + len, D->fragment[me].suffix);
+ if (slash) {
+ new_code[nplen + len + nslen] = '/';
+ strcpy(new_code + nplen + len + nslen + 1, slash);
+ }
- if (slash) {
- ptr[plen + len + slen] = '/';
- strcpy(ptr + plen + len + slen + 1, slash);
- }
- }
+ new_code[nplen + len + nslen + mlen] = '\0';
}
- dreturn("\"%s\" (%i)", ptr, *offset);
- return ptr;
+ *offset = plen;
+
+ dreturn("\"%s\" (%i)", new_code, *offset);
+ return new_code;
}
+/* Munge a field code or field name using the prefix and suffix of the current
+ * fragment. Returns a newly malloc'd munged code, or NULL on error */
+char *_GD_MungeFromFrag(DIRFILE *D, const gd_entry_t *P, int me,
+ const char *code, int *offset)
+{
+ char *new_code;
+ dtrace("%p, %p, %i, \"%s\", %p", D, P, me, code, offset);
+
+ new_code = _GD_MungeCode(D, P, NULL, NULL, D->fragment[me].prefix,
+ D->fragment[me].suffix, code, offset);
+
+ dreturn("\"%s\"", new_code);
+ return new_code;
+}
+
/* Check for a valid field name -- returns 1 on error */
int _GD_ValidateField(const char* field_code, int standards, int strict,
int affix, int* is_dot)
@@ -96,9 +154,9 @@
dreturn("%i", 1);
return 1;
} else if (strict && ((standards >= 5 && (field_code[i] == '<' ||
- field_code[i] == '>' || field_code[i] == ';' ||
- field_code[i] == '|' || field_code[i] == '&')) ||
- (standards == 5 && (field_code[i] == '\\' || field_code[i] == '#'))))
+ field_code[i] == '>' || field_code[i] == ';' ||
+ field_code[i] == '|' || field_code[i] == '&')) ||
+ (standards == 5 && (field_code[i] == '\\' || field_code[i] == '#'))))
{
/* these characters are sometimes forbidden */
dreturn("%i", 1);
@@ -138,7 +196,7 @@
{
gd_entry_t *E, *Q;
char* name;
- int new_dot, old_dot = 0;
+ int dummy, new_dot, old_dot = 0;
unsigned int dot_ind;
dtrace("%p, \"%s\", \"%s\", %i", D, old_code, new_name, move_data);
@@ -198,8 +256,9 @@
}
sprintf("%s/%s", E->e->p.parent->field, new_name);
} else {
- name = _GD_DeMungeCode(D->fragment[E->fragment_index].prefix,
- D->fragment[E->fragment_index].suffix, new_name);
+ /* Verify prefix and suffix */
+ name = _GD_MungeCode(D, NULL, D->fragment[E->fragment_index].prefix,
+ D->fragment[E->fragment_index].suffix, NULL, NULL, new_name, &dummy);
if (name == NULL || name[0] == '\0') {
_GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_INVALID, NULL, 0, new_name);
dreturn("%i", -1);
Modified: trunk/getdata/src/parse.c
===================================================================
--- trunk/getdata/src/parse.c 2011-12-11 23:48:27 UTC (rev 636)
+++ trunk/getdata/src/parse.c 2011-12-13 02:53:25 UTC (rev 637)
@@ -294,7 +294,7 @@
E->e->u.raw.file[0].subenc = GD_ENC_UNKNOWN; /* don't know the encoding
subscheme yet */
- E->field = _GD_MungeCode(D, NULL, me, in_cols[0], &offset);
+ E->field = _GD_MungeFromFrag(D, NULL, me, in_cols[0], &offset);
if (E->field && _GD_ValidateField(E->field + offset, standards, pedantic, 0,
is_dot))
{
@@ -368,7 +368,7 @@
E->field_type = GD_LINCOM_ENTRY;
- E->field = _GD_MungeCode(D, parent, me, in_cols[0], &offset);
+ E->field = _GD_MungeFromFrag(D, parent, me, in_cols[0], &offset);
if (E->field && _GD_ValidateField(E->field + offset, standards, pedantic, 0,
is_dot))
{
@@ -469,7 +469,7 @@
E->e->calculated = 1;
E->EN(linterp,table) = NULL;
- E->field = _GD_MungeCode(D, parent, me, in_cols[0], &offset);
+ E->field = _GD_MungeFromFrag(D, parent, me, in_cols[0], &offset);
if (E->field && _GD_ValidateField(E->field + offset, standards, pedantic, 0,
is_dot))
{
@@ -533,7 +533,7 @@
E->e->entry[0] = E->e->entry[1] = NULL;
E->e->calculated = 1;
- E->field = _GD_MungeCode(D, parent, me, in_cols[0], &offset);
+ E->field = _GD_MungeFromFrag(D, parent, me, in_cols[0], &offset);
if (E->field && _GD_ValidateField(E->field + offset, standards, pedantic, 0,
is_dot))
{
@@ -595,7 +595,7 @@
E->e->entry[0] = NULL;
E->e->calculated = 0;
- E->field = _GD_MungeCode(D, parent, me, in_cols[0], &offset);
+ E->field = _GD_MungeFromFrag(D, parent, me, in_cols[0], &offset);
if (E->field && _GD_ValidateField(E->field + offset, standards, pedantic, 0,
is_dot))
{
@@ -662,7 +662,7 @@
E->e->entry[0] = NULL;
E->e->calculated = 0;
- E->field = _GD_MungeCode(D, parent, me, in_cols[0], &offset);
+ E->field = _GD_MungeFromFrag(D, parent, me, in_cols[0], &offset);
if (E->field && _GD_ValidateField(E->field + offset, standards, pedantic, 0,
is_dot))
{
@@ -753,7 +753,7 @@
E->e->entry[0] = E->e->entry[1] = NULL;
E->e->calculated = 0;
- E->field = _GD_MungeCode(D, parent, me, in_cols[0], &offset);
+ E->field = _GD_MungeFromFrag(D, parent, me, in_cols[0], &offset);
if (E->field && _GD_ValidateField(E->field + offset, standards, pedantic, 0,
is_dot))
{
@@ -818,7 +818,7 @@
E->e->entry[0] = NULL;
E->e->calculated = 1;
- E->field = _GD_MungeCode(D, parent, me, in_cols[0], &offset);
+ E->field = _GD_MungeFromFrag(D, parent, me, in_cols[0], &offset);
if (E->field && _GD_ValidateField(E->field + offset, standards, pedantic, 0,
is_dot))
{
@@ -896,7 +896,7 @@
E->in_fields[0] = NULL;
E->e->entry[0] = NULL;
- E->field = _GD_MungeCode(D, parent, me, in_cols[0], &offset);
+ E->field = _GD_MungeFromFrag(D, parent, me, in_cols[0], &offset);
if (E->field && _GD_ValidateField(E->field + offset, standards, pedantic, 0,
is_dot))
{
@@ -960,7 +960,7 @@
memset(E->e, 0, sizeof(struct _gd_private_entry));
E->field_type = GD_POLYNOM_ENTRY;
- E->field = _GD_MungeCode(D, parent, me, in_cols[0], &offset);
+ E->field = _GD_MungeFromFrag(D, parent, me, in_cols[0], &offset);
if (E->field && _GD_ValidateField(E->field + offset, standards, pedantic, 0,
is_dot))
{
@@ -1073,7 +1073,7 @@
E->field_type = GD_CONST_ENTRY;
E->e->calculated = 1;
- E->field = _GD_MungeCode(D, parent, me, in_cols[0], &offset);
+ E->field = _GD_MungeFromFrag(D, parent, me, in_cols[0], &offset);
if (E->field && _GD_ValidateField(E->field + offset, standards, pedantic, 0,
is_dot))
{
@@ -1165,7 +1165,7 @@
E->field_type = GD_CARRAY_ENTRY;
E->e->calculated = 1;
- E->field = _GD_MungeCode(D, parent, me, in_cols[0], &offset);
+ E->field = _GD_MungeFromFrag(D, parent, me, in_cols[0], &offset);
if (E->field && _GD_ValidateField(E->field + offset, standards, pedantic, 0,
is_dot))
{
@@ -1289,7 +1289,7 @@
E->e->u.string = _GD_Strdup(D, in_cols[2]);
E->e->calculated = 1;
- E->field = _GD_MungeCode(D, parent, me, in_cols[0], &offset);
+ E->field = _GD_MungeFromFrag(D, parent, me, in_cols[0], &offset);
if (E->field && _GD_ValidateField(E->field + offset, standards, pedantic, 0,
is_dot))
{
@@ -1360,7 +1360,7 @@
for (cptr = in_cols[0] + 1; *cptr != '\0'; ++cptr)
if (*cptr == '/') {
*cptr = '\0';
- munged_code = _GD_MungeCode(D, NULL, me, in_cols[0], &dummy);
+ munged_code = _GD_MungeFromFrag(D, NULL, me, in_cols[0], &dummy);
if (munged_code)
P = _GD_FindField(D, munged_code, D->entry, D->n_entries, NULL);
free(munged_code);
@@ -1818,7 +1818,7 @@
D->fragment[me].frame_offset = gd_strtoll(in_cols[1], NULL,
(!pedantic || *standards >= 9) ? 0 : 10);
else if (strcmp(ptr, "HIDDEN") == 0 && (!pedantic || *standards >= 9)) {
- munged_code = _GD_MungeCode(D, NULL, me, in_cols[1], &dummy);
+ munged_code = _GD_MungeFromFrag(D, NULL, me, in_cols[1], &dummy);
if (munged_code)
E = _GD_FindField(D, munged_code, D->entry, D->n_entries, NULL);
free(munged_code);
@@ -1856,7 +1856,7 @@
if (frag != -1)
D->fragment[me].vers |= D->fragment[frag].vers;
} else if (strcmp(ptr, "META") == 0 && (!pedantic || *standards >= 6)) {
- munged_code = _GD_MungeCode(D, NULL, me, in_cols[1], &dummy);
+ munged_code = _GD_MungeFromFrag(D, NULL, me, in_cols[1], &dummy);
if (munged_code)
E = _GD_FindField(D, munged_code, D->entry, D->n_entries, NULL);
free(munged_code);
@@ -1890,7 +1890,7 @@
linenum, in_cols[1]);
} else if (strcmp(ptr, "REFERENCE") == 0 && (!pedantic || *standards >= 6)) {
free(*ref_name);
- *ref_name = _GD_MungeCode(D, NULL, me, in_cols[1], &dummy);
+ *ref_name = _GD_MungeFromFrag(D, NULL, me, in_cols[1], &dummy);
} else if (strcmp(ptr, "VERSION") == 0 && (!pedantic || *standards >= 5)) {
*standards = atoi(in_cols[1]);
if (!pedantic && ~(*flags) & GD_PERMISSIVE)
Property changes on: trunk/getdata/test
___________________________________________________________________
Modified: svn:ignore
- Makefile
Makefile.in
*.o
*.odirfile
*.swp
*.exe
.deps
.libs
add
add_affix
add_bit
add_bit_bitnum
add_bit_bitsize
add_bit_invalid
add_bit_numbits
add_carray
add_clincom
add_code
add_const
add_cpolynom
add_crecip
add_crecip89
add_divide
add_divide_invalid
add_duplicate
add_format
add_invalid
add_lincom
add_lincom_invalid
add_lincom_nfields
add_linterp
add_linterp_invalid
add_multiply
add_multiply_invalid
add_phase
add_phase_invalid
add_polynom
add_protect
add_raw
add_raw_include
add_raw_invalid
add_raw_spf
add_raw_type
add_rdonly
add_recip
add_sbit
add_scalar
add_scalar_carray
add_sort
add_spec
add_spec_directive
add_spec_invalid
add_spec_meta
add_string
add_string_affix
add_type
add_window
add_window_op
alter_bit_bitnum
alter_bit_numbits
alter_carray_len
alter_carray_type
alter_const
alter_cpolynom
alter_crecip
alter_crecip89
alter_crecip_zero
alter_divide
alter_entry
alter_entry_affix
alter_entry_hidden
alter_entry_recode
alter_entry_scalar2a
alter_entry_scalar2n
alter_entry_scalar3
alter_entry_scalar4
alter_lincom_23
alter_lincom_32
alter_lincom_input
alter_lincom_offset
alter_lincom_slope
alter_linterp
alter_linterp_move
alter_mspec
alter_mspec_affix
alter_multiply
alter_phase
alter_polynom_coeff
alter_polynom_input
alter_polynom_ord
alter_raw_spf
alter_raw_type
alter_recip
alter_recip_zero
alter_spec
alter_spec_affix
alter_spec_meta
alter_window
ascii_add
ascii_get
ascii_get_get
ascii_nframes
ascii_put
bof
bof_lincom
bof_phase
bzip_get
bzip_get_get
bzip_move_from
bzip_nframes
bzip_put
close
close_bad
close_discard
close_null
convert_complex128_complex64
convert_complex128_float64
convert_complex128_int64
convert_complex128_uint64
convert_complex64_complex128
convert_complex64_float64
convert_complex64_int64
convert_complex64_uint64
convert_float32_complex128
convert_float32_complex64
convert_float32_float64
convert_float32_int16
convert_float32_int32
convert_float32_int64
convert_float32_int8
convert_float32_uint16
convert_float32_uint32
convert_float32_uint64
convert_float32_uint8
convert_float64_complex128
convert_float64_complex64
convert_float64_float32
convert_float64_int16
convert_float64_int32
convert_float64_int64
convert_float64_int8
convert_float64_uint16
convert_float64_uint32
convert_float64_uint64
convert_float64_uint8
convert_int16_complex128
convert_int16_complex64
convert_int16_float32
convert_int16_float64
convert_int16_int32
convert_int16_int64
convert_int16_int8
convert_int16_uint16
convert_int16_uint32
convert_int16_uint64
convert_int16_uint8
convert_int32_complex128
convert_int32_complex64
convert_int32_float32
convert_int32_float64
convert_int32_int16
convert_int32_int64
convert_int32_int8
convert_int32_uint16
convert_int32_uint32
convert_int32_uint64
convert_int32_uint8
convert_int64_complex128
convert_int64_complex64
convert_int64_float32
convert_int64_float64
convert_int64_int16
convert_int64_int32
convert_int64_int8
convert_int64_uint16
convert_int64_uint32
convert_int64_uint64
convert_int64_uint8
convert_int8_complex128
convert_int8_complex64
convert_int8_float32
convert_int8_float64
convert_int8_int16
convert_int8_int32
convert_int8_int64
convert_int8_uint16
convert_int8_uint32
convert_int8_uint64
convert_int8_uint8
convert_uint16_complex128
convert_uint16_complex64
convert_uint16_float32
convert_uint16_float64
convert_uint16_int16
convert_uint16_int32
convert_uint16_int64
convert_uint16_int8
convert_uint16_uint32
convert_uint16_uint64
convert_uint16_uint8
convert_uint32_complex128
convert_uint32_complex64
convert_uint32_float32
convert_uint32_float64
convert_uint32_int16
convert_uint32_int32
convert_uint32_int64
convert_uint32_int8
convert_uint32_uint16
convert_uint32_uint64
convert_uint32_uint8
convert_uint64_complex128
convert_uint64_complex64
convert_uint64_float32
convert_uint64_float64
convert_uint64_int16
convert_uint64_int32
convert_uint64_int64
convert_uint64_int8
convert_uint64_uint16
convert_uint64_uint32
convert_uint64_uint8
convert_uint8_complex128
convert_uint8_complex64
convert_uint8_float32
convert_uint8_float64
convert_uint8_int16
convert_uint8_int32
convert_uint8_int64
convert_uint8_int8
convert_uint8_uint16
convert_uint8_uint32
convert_uint8_uint64
creat
creat_excl
creat_rdonly
cvlist
cvlist_array
cvlist_array_hidden
cvlist_array_meta
cvlist_array_meta_hidden
cvlist_hidden
cvlist_invalid
cvlist_meta
cvlist_meta_hidden
cvlist_meta_invalid
del
del_carray
del_carray_deref
del_const
del_const_deref
del_const_force
del_data
del_derived
del_derived_force
del_meta
del_meta_force
dfes_bit
dfes_divide
dfes_lincom
dfes_linterp
dfes_multiply
dfes_null
dfes_phase
dfes_raw
dfes_recip
dfes_zero
encode_alter
encode_get
encode_move
endian_alter
endian_alter_sie
endian_get
endian_move
entry_bad_code
entry_bit
entry_bit_scalar
entry_divide
entry_invalid
entry_lincom
entry_lincom_scalar
entry_linterp
entry_multiply
entry_phase
entry_phase_scalar
entry_polynom
entry_polynom_scalar
entry_raw
entry_raw_scalar
entry_raw_scalar_code
entry_raw_scalar_type
entry_recip
entry_scalar_repr
entry_type
entry_window
entry_window_scalar
eof
eof_index
eof_lincom
eof_phase
error
error_error
error_num
error_short
file
file_code
file_type
flist
flist_hidden
flist_invalid
flist_meta
flist_meta_hidden
flist_meta_invalid
flist_type
flist_type_hidden
flist_type_invalid
flist_type_meta
flist_type_meta_hidden
flist_type_meta_invalid
flush
flush_all
flush_bad_code
flush_invalid
flush_meta
flush_spec
foffs_alter
foffs_get
foffs_move
fragment_index
fragment_name
fragment_name_oor
get64
get_bad_code
get_bit
get_carray
get_carray_len
get_carray_slice
get_char
get_clincom
get_complex128
get_complex64
get_const
get_const_complex
get_const_repr
get_cpolynom
get_divide
get_endian16
get_endian32
get_endian64
get_endian8
get_endian_complex128_arm
get_endian_complex128_big
get_endian_complex128_little
get_endian_complex64_arm
get_endian_complex64_big
get_endian_complex64_little
get_endian_float32_arm
get_endian_float32_big
get_endian_float32_little
get_endian_float64_arm
get_endian_float64_big
get_endian_float64_little
get_ff
get_float32
get_float64
get_foffs
get_fs
get_here
get_here_foffs
get_heres
get_int16
get_int32
get_int64
get_int8
get_invalid
get_lincom1
get_lincom2
get_lincom3
get_lincom_noin
get_lincom_non
get_linterp
get_linterp_noin
get_linterp_notab
get_linterp_sort
get_multiply
get_multiply_noin
get_nonexistent
get_null
get_off64
get_phase
get_phase_affix
get_polynom
get_polynom_noin
get_recip
get_recip_const
get_recurse
get_rofs
get_sbit
get_sf
get_ss
get_type
get_uint16
get_uint32
get_uint64
get_window
get_window_clr
get_window_ge
get_window_gt
get_window_le
get_window_lt
get_window_ne
get_window_set
get_zero
global_name
global_ref
global_ref_empty
global_ref_set
gzip_add
gzip_get
gzip_get_get
gzip_get_put
gzip_move_from
gzip_move_to
gzip_nframes
gzip_put
gzip_put_get
header_complex
hide
hide_unhide
include
include_accmode
include_auto
include_cb
include_creat
include_ignore
include_index
include_invalid
include_nonexistent
include_pc
include_ref
include_syntax
index
index_domain
index_range
legacy_get
legacy_get_put
legacy_get_rofs
legacy_nframes
legacy_nonexistent
legacy_put
legacy_spf
lzma_get
lzma_nframes
madd
madd_affix
madd_bit
madd_bit_invalid
madd_carray
madd_clincom
madd_const
madd_cpolynom
madd_crecip
madd_crecip89
madd_divide
madd_index
madd_lincom
madd_lincom_invalid
madd_linterp
madd_linterp_invalid
madd_multiply
madd_multiply_invalid
madd_phase
madd_phase_invalid
madd_polynom
madd_recip
madd_sbit
madd_spec
madd_spec_directive
madd_spec_invalid
madd_string
madd_window
move
move_affix
move_affix_dup
move_data_enc_ar
move_data_enc_ra
move_data_endian
move_data_foffs
move_data_nop
move_index
move_meta
move_protect
move_subdir
name
name_affix
name_affix_bad
name_dup
name_move
nfields
nfields_hidden
nfields_invalid
nfields_type
nfields_type_hidden
nfields_type_invalid
nfields_vector
nfields_vector_hidden
nfields_vector_invalid
nfragments
nframes
nframes64
nframes_empty
nframes_invalid
nframes_off64
nframes_spf
nmeta
nmeta_hidden
nmeta_invalid
nmeta_parent
nmeta_type
nmeta_type_hidden
nmeta_type_invalid
nmeta_type_parent
nmeta_vectors
nmeta_vectors_del
nmeta_vectors_hidden
nmeta_vectors_invalid
nmeta_vectors_parent
open
open_cb_abort
open_cb_cont
open_cb_ignore
open_cb_invalid
open_cb_rescan
open_eaccess
open_nonexistent
open_notdirfile
parent
parse_badline
parse_bit
parse_bit4
parse_bit_bitnum
parse_bit_bitsize
parse_bit_ncols
parse_bit_numbits
parse_bit_scalar
parse_carray
parse_carray_long
parse_const
parse_const_ncols
parse_divide
parse_duplicate
parse_duplicate_ignore
parse_endian_bad
parse_endian_big
parse_endian_force
parse_endian_little
parse_endian_slash
parse_eol
parse_foffs
parse_foffs_include
parse_foffs_slash
parse_hidden
parse_hidden_field
parse_hidden_meta
parse_include
parse_include_absolute
parse_include_absrel
parse_include_loop
parse_include_nonexistent
parse_include_prefix
parse_include_prefix_dup
parse_include_preprefix
parse_include_relabs
parse_include_relrel
parse_include_slash
parse_include_suffix
parse_include_sufsuffix
parse_index
parse_lincom
parse_lincom_ncols1
parse_lincom_ncols2
parse_lincom_nfields
parse_lincom_nofields
parse_lincom_non
parse_lincom_non_ncols
parse_lincom_scalar
parse_linterp
parse_linterp_ncols
parse_meta
parse_meta_affix
parse_meta_implicit
parse_meta_implicit2
parse_meta_implicit_affix
parse_meta_index
parse_meta_index2
parse_meta_meta
parse_meta_parent
parse_meta_raw
parse_multiply
parse_multiply_ncols
parse_name
parse_name_dot
parse_name_ext
parse_name_pedantic
parse_ncols
parse_phase
parse_phase_ncols
parse_phase_scalar
parse_polynom
parse_polynom_ncols1
parse_polynom_ncols2
parse_polynom_scalar
parse_protect_all
parse_protect_bad
parse_protect_data
parse_protect_format
parse_protect_none
parse_quote
parse_quote_mismatch
parse_raw
parse_raw_char
parse_raw_ncols
parse_raw_scalar
parse_raw_spf
parse_raw_type
parse_recip
parse_ref
parse_ref_nonexistent
parse_sbit
parse_sort
parse_string
parse_string_ncols
parse_string_null
parse_version
parse_version_89
parse_version_98
parse_version_include
parse_version_p8
parse_version_p9
parse_version_permissive
parse_version_slash
parse_whitespace
parse_window
parse_window_ncols
parse_window_op
parse_window_scalar
protect_alter
protect_get
put64
put_bad_code
put_bit
put_bof
put_carray
put_carray_slice
put_char
put_complex128
put_complex64
put_const
put_const_protect
put_divide
put_endian16
put_endian32
put_endian64
put_endian8
put_endian_complex128_arm
put_endian_complex128_big
put_endian_complex128_little
put_endian_complex64_arm
put_endian_complex64_big
put_endian_complex64_little
put_endian_float32_arm
put_endian_float32_big
put_endian_float32_little
put_endian_float64_arm
put_endian_float64_big
put_endian_float64_little
put_ff
put_float32
put_float64
put_foffs
put_fs
put_here
put_heres
put_int16
put_int32
put_int64
put_int8
put_invalid
put_lincom1
put_lincom2
put_lincom_noin
put_linterp
put_linterp_noin
put_linterp_nomono
put_linterp_notab
put_linterp_reverse
put_multiply
put_null
put_off64
put_phase
put_phase_noin
put_polynom1
put_polynom2
put_polynom_noin
put_protect
put_rdonly
put_recip
put_recurse
put_repr
put_rofs
put_sbit
put_sf
put_ss
put_string
put_string_protect
put_type
put_uint16
put_uint32
put_uint64
put_window
ref
ref_none
ref_two
repr_a
repr_float32
repr_float64
repr_i
repr_int16
repr_int32
repr_int64
repr_int8
repr_m
repr_r
repr_real_a
repr_real_i
repr_real_m
repr_real_r
repr_uint16
repr_uint32
repr_uint64
repr_uint8
seek64
seek_cur
seek_end
seek_foffs
seek_set
sie_get_big
sie_get_little
sie_move_from
sie_move_to
sie_nframes_big
sie_nframes_little
sie_put_big
sie_put_little
slim_get
slim_nframes
slim_put
spf
spf_divide
spf_lincom
spf_multiply
spf_polynom
spf_recip
spf_recurse
svlist
svlist_hidden
svlist_invalid
svlist_meta
svlist_meta_hidden
svlist_meta_invalid
tell
tell64
trunc
trunc_rdonly
trunc_rofs
unclude
unclude_del
unclude_move
version_0
version_0_write
version_1
version_1_write
version_2
version_2_write
version_3
version_3_write
version_4
version_4_write
version_5
version_5_strict
version_5_write
version_6
version_6_strict
version_6_write
version_7
version_7_strict
version_7_write
version_8
version_8_strict
version_8_write
version_9
version_9_strict
version_9_write
vlist
vlist_hidden
vlist_invalid
vlist_meta
vlist_meta_hidden
vlist_meta_invalid
xz_get
xz_nframes
+ Makefile
Makefile.in
*.o
*.odirfile
*.swp
*.exe
.deps
.libs
add
add_affix
add_bit
add_bit_bitnum
add_bit_bitsize
add_bit_invalid
add_bit_numbits
add_carray
add_clincom
add_code
add_const
add_cpolynom
add_crecip
add_crecip89
add_divide
add_divide_invalid
add_duplicate
add_format
add_invalid
add_lincom
add_lincom_invalid
add_lincom_nfields
add_linterp
add_linterp_invalid
add_multiply
add_multiply_invalid
add_phase
add_phase_invalid
add_polynom
add_protect
add_raw
add_raw_include
add_raw_invalid
add_raw_spf
add_raw_type
add_rdonly
add_recip
add_sbit
add_scalar
add_scalar_carray
add_sort
add_spec
add_spec_directive
add_spec_invalid
add_spec_meta
add_string
add_string_affix
add_type
add_window
add_window_op
alter_bit_bitnum
alter_bit_numbits
alter_carray_len
alter_carray_type
alter_const
alter_cpolynom
alter_crecip
alter_crecip89
alter_crecip_zero
alter_divide
alter_entry
alter_entry_affix
alter_entry_hidden
alter_entry_recode
alter_entry_scalar2a
alter_entry_scalar2n
alter_entry_scalar3
alter_entry_scalar4
alter_lincom_23
alter_lincom_32
alter_lincom_input
alter_lincom_offset
alter_lincom_slope
alter_linterp
alter_linterp_move
alter_mspec
alter_mspec_affix
alter_multiply
alter_phase
alter_polynom_coeff
alter_polynom_input
alter_polynom_ord
alter_raw_spf
alter_raw_type
alter_recip
alter_recip_zero
alter_spec
alter_spec_affix
alter_spec_meta
alter_window
ascii_add
ascii_get
ascii_get_get
ascii_nframes
ascii_put
bof
bof_lincom
bof_phase
bzip_get
bzip_get_get
bzip_move_from
bzip_nframes
bzip_put
close
close_bad
close_discard
close_null
convert_complex128_complex64
convert_complex128_float64
convert_complex128_int64
convert_complex128_uint64
convert_complex64_complex128
convert_complex64_float64
convert_complex64_int64
convert_complex64_uint64
convert_float32_complex128
convert_float32_complex64
convert_float32_float64
convert_float32_int16
convert_float32_int32
convert_float32_int64
convert_float32_int8
convert_float32_uint16
convert_float32_uint32
convert_float32_uint64
convert_float32_uint8
convert_float64_complex128
convert_float64_complex64
convert_float64_float32
convert_float64_int16
convert_float64_int32
convert_float64_int64
convert_float64_int8
convert_float64_uint16
convert_float64_uint32
convert_float64_uint64
convert_float64_uint8
convert_int16_complex128
convert_int16_complex64
convert_int16_float32
convert_int16_float64
convert_int16_int32
convert_int16_int64
convert_int16_int8
convert_int16_uint16
convert_int16_uint32
convert_int16_uint64
convert_int16_uint8
convert_int32_complex128
convert_int32_complex64
convert_int32_float32
convert_int32_float64
convert_int32_int16
convert_int32_int64
convert_int32_int8
convert_int32_uint16
convert_int32_uint32
convert_int32_uint64
convert_int32_uint8
convert_int64_complex128
convert_int64_complex64
convert_int64_float32
convert_int64_float64
convert_int64_int16
convert_int64_int32
convert_int64_int8
convert_int64_uint16
convert_int64_uint32
convert_int64_uint64
convert_int64_uint8
convert_int8_complex128
convert_int8_complex64
convert_int8_float32
convert_int8_float64
convert_int8_int16
convert_int8_int32
convert_int8_int64
convert_int8_uint16
convert_int8_uint32
convert_int8_uint64
convert_int8_uint8
convert_uint16_complex128
convert_uint16_complex64
convert_uint16_float32
convert_uint16_float64
convert_uint16_int16
convert_uint16_int32
convert_uint16_int64
convert_uint16_int8
convert_uint16_uint32
convert_uint16_uint64
convert_uint16_uint8
convert_uint32_complex128
convert_uint32_complex64
convert_uint32_float32
convert_uint32_float64
convert_uint32_int16
convert_uint32_int32
convert_uint32_int64
convert_uint32_int8
convert_uint32_uint16
convert_uint32_uint64
convert_uint32_uint8
convert_uint64_complex128
convert_uint64_complex64
convert_uint64_float32
convert_uint64_float64
convert_uint64_int16
convert_uint64_int32
convert_uint64_int64
convert_uint64_int8
convert_uint64_uint16
convert_uint64_uint32
convert_uint64_uint8
convert_uint8_complex128
convert_uint8_complex64
convert_uint8_float32
convert_uint8_float64
convert_uint8_int16
convert_uint8_int32
convert_uint8_int64
convert_uint8_int8
convert_uint8_uint16
convert_uint8_uint32
convert_uint8_uint64
creat
creat_excl
creat_rdonly
cvlist
cvlist_array
cvlist_array_hidden
cvlist_array_meta
cvlist_array_meta_hidden
cvlist_hidden
cvlist_invalid
cvlist_meta
cvlist_meta_hidden
cvlist_meta_invalid
del
del_carray
del_carray_deref
del_const
del_const_deref
del_const_force
del_data
del_derived
del_derived_force
del_meta
del_meta_force
dfes_bit
dfes_divide
dfes_lincom
dfes_linterp
dfes_multiply
dfes_null
dfes_phase
dfes_raw
dfes_recip
dfes_zero
encode_alter
encode_get
encode_move
endian_alter
endian_alter_sie
endian_get
endian_move
entry_bad_code
entry_bit
entry_bit_scalar
entry_divide
entry_invalid
entry_lincom
entry_lincom_scalar
entry_linterp
entry_multiply
entry_phase
entry_phase_scalar
entry_polynom
entry_polynom_scalar
entry_raw
entry_raw_scalar
entry_raw_scalar_code
entry_raw_scalar_type
entry_recip
entry_scalar_repr
entry_type
entry_window
entry_window_scalar
eof
eof_index
eof_lincom
eof_phase
error
error_error
error_num
error_short
file
file_code
file_type
flist
flist_hidden
flist_invalid
flist_meta
flist_meta_hidden
flist_meta_invalid
flist_type
flist_type_hidden
flist_type_invalid
flist_type_meta
flist_type_meta_hidden
flist_type_meta_invalid
flush
flush_all
flush_bad_code
flush_invalid
flush_meta
flush_spec
foffs_alter
foffs_get
foffs_move
fragment_affix
fragment_affix_alter
fragment_affix_alter2
fragment_affix_dup
fragment_index
fragment_name
fragment_name_oor
get64
get_bad_code
get_bit
get_carray
get_carray_len
get_carray_slice
get_char
get_clincom
get_complex128
get_complex64
get_const
get_const_complex
get_const_repr
get_cpolynom
get_divide
get_endian16
get_endian32
get_endian64
get_endian8
get_endian_complex128_arm
get_endian_complex128_big
get_endian_complex128_little
get_endian_complex64_arm
get_endian_complex64_big
get_endian_complex64_little
get_endian_float32_arm
get_endian_float32_big
get_endian_float32_little
get_endian_float64_arm
get_endian_float64_big
get_endian_float64_little
get_ff
get_float32
get_float64
get_foffs
get_fs
get_here
get_here_foffs
get_heres
get_int16
get_int32
get_int64
get_int8
get_invalid
get_lincom1
get_lincom2
get_lincom3
get_lincom_noin
get_lincom_non
get_linterp
get_linterp_noin
get_linterp_notab
get_linterp_sort
get_multiply
get_multiply_noin
get_nonexistent
get_null
get_off64
get_phase
get_phase_affix
get_polynom
get_polynom_noin
get_recip
get_recip_const
get_recurse
get_rofs
get_sbit
get_sf
get_ss
get_type
get_uint16
get_uint32
get_uint64
get_window
get_window_clr
get_window_ge
get_window_gt
get_window_le
get_window_lt
get_window_ne
get_window_set
get_zero
global_name
global_ref
global_ref_empty
global_ref_set
gzip_add
gzip_get
gzip_get_get
gzip_get_put
gzip_move_from
gzip_move_to
gzip_nframes
gzip_put
gzip_put_get
header_complex
hide
hide_unhide
include
include_accmode
include_affix
include_auto
include_cb
include_creat
include_ignore
include_index
include_invalid
include_nonexistent
include_pc
include_ref
include_syntax
index
index_domain
index_range
legacy_get
legacy_get_put
legacy_get_rofs
legacy_nframes
legacy_nonexistent
legacy_put
legacy_spf
lzma_get
lzma_nframes
madd
madd_affix
madd_bit
madd_bit_invalid
madd_carray
madd_clincom
madd_const
madd_cpolynom
madd_crecip
madd_crecip89
madd_divide
madd_index
madd_lincom
madd_lincom_invalid
madd_linterp
madd_linterp_invalid
madd_multiply
madd_multiply_invalid
madd_phase
madd_phase_invalid
madd_polynom
madd_recip
madd_sbit
madd_spec
madd_spec_directive
madd_spec_invalid
madd_string
madd_window
move
move_affix
move_affix_dup
move_data_enc_ar
move_data_enc_ra
move_data_endian
move_data_foffs
move_data_nop
move_index
move_meta
move_protect
move_subdir
name
name_affix
name_affix_bad
name_dup
name_move
nfields
nfields_hidden
nfields_invalid
nfields_type
nfields_type_hidden
nfields_type_invalid
nfields_vector
nfields_vector_hidden
nfields_vector_invalid
nfragments
nframes
nframes64
nframes_empty
nframes_invalid
nframes_off64
nframes_spf
nmeta
nmeta_hidden
nmeta_invalid
nmeta_parent
nmeta_type
nmeta_type_hidden
nmeta_type_invalid
nmeta_type_parent
nmeta_vectors
nmeta_vectors_del
nmeta_vectors_hidden
nmeta_vectors_invalid
nmeta_vectors_parent
open
open_cb_abort
open_cb_cont
open_cb_ignore
open_cb_invalid
open_cb_rescan
open_eaccess
open_nonexistent
open_notdirfile
parent
parse_badline
parse_bit
parse_bit4
parse_bit_bitnum
parse_bit_bitsize
parse_bit_ncols
parse_bit_numbits
parse_bit_scalar
parse_carray
parse_carray_long
parse_const
parse_const_ncols
parse_divide
parse_duplicate
parse_duplicate_ignore
parse_endian_bad
parse_endian_big
parse_endian_force
parse_endian_little
parse_endian_slash
parse_eol
parse_foffs
parse_foffs_include
parse_foffs_slash
parse_hidden
parse_hidden_field
parse_hidden_meta
parse_include
parse_include_absolute
parse_include_absrel
parse_include_loop
parse_include_nonexistent
parse_include_prefix
parse_include_prefix_dup
parse_include_preprefix
parse_include_relabs
parse_include_relrel
parse_include_slash
parse_include_suffix
parse_include_sufsuffix
parse_index
parse_lincom
parse_lincom_ncols1
parse_lincom_ncols2
parse_lincom_nfields
parse_lincom_nofields
parse_lincom_non
parse_lincom_non_ncols
parse_lincom_scalar
parse_linterp
parse_linterp_ncols
parse_meta
parse_meta_affix
parse_meta_implicit
parse_meta_implicit2
parse_meta_implicit_affix
parse_meta_index
parse_meta_index2
parse_meta_meta
parse_meta_parent
parse_meta_raw
parse_multiply
parse_multiply_ncols
parse_name
parse_name_dot
parse_name_ext
parse_name_pedantic
parse_ncols
parse_phase
parse_phase_ncols
parse_phase_scalar
parse_polynom
parse_polynom_ncols1
parse_polynom_ncols2
parse_polynom_scalar
parse_protect_all
parse_protect_bad
parse_protect_data
parse_protect_format
parse_protect_none
parse_quote
parse_quote_mismatch
parse_raw
parse_raw_char
parse_raw_ncols
parse_raw_scalar
parse_raw_spf
parse_raw_type
parse_recip
parse_ref
parse_ref_nonexistent
parse_sbit
parse_sort
parse_string
parse_string_ncols
parse_string_null
parse_version
parse_version_89
parse_version_98
parse_version_include
parse_version_p8
parse_version_p9
parse_version_permissive
parse_version_slash
parse_whitespace
parse_window
parse_window_ncols
parse_window_op
parse_window_scalar
protect_alter
protect_get
put64
put_bad_code
put_bit
put_bof
put_carray
put_carray_slice
put_char
put_complex128
put_complex64
put_const
put_const_protect
put_divide
put_endian16
put_endian32
put_endian64
put_endian8
put_endian_complex128_arm
put_endian_complex128_big
put_endian_complex128_little
put_endian_complex64_arm
put_endian_complex64_big
put_endian_complex64_little
put_endian_float32_arm
put_endian_float32_big
put_endian_float32_little
put_endian_float64_arm
put_endian_float64_big
put_endian_float64_little
put_ff
put_float32
put_float64
put_foffs
put_fs
put_here
put_heres
put_int16
put_int32
put_int64
put_int8
put_invalid
put_lincom1
put_lincom2
put_lincom_noin
put_linterp
put_linterp_noin
put_linterp_nomono
put_linterp_notab
put_linterp_reverse
put_multiply
put_null
put_off64
put_phase
put_phase_noin
put_polynom1
put_polynom2
put_polynom_noin
put_protect
put_rdonly
put_recip
put_recurse
put_repr
put_rofs
put_sbit
put_sf
put_ss
put_string
put_string_protect
put_type
put_uint16
put_uint32
put_uint64
put_window
ref
ref_none
ref_two
repr_a
repr_float32
repr_float64
repr_i
repr_int16
repr_int32
repr_int64
repr_int8
repr_m
repr_r
repr_real_a
repr_real_i
repr_real_m
repr_real_r
repr_uint16
repr_uint32
repr_uint64
repr_uint8
seek64
seek_cur
seek_end
seek_foffs
seek_set
sie_get_big
sie_get_little
sie_move_from
sie_move_to
sie_nframes_big
sie_nframes_little
sie_put_big
sie_put_little
slim_get
slim_nframes
slim_put
spf
spf_divide
spf_lincom
spf_multiply
spf_polynom
spf_recip
spf_recurse
svlist
svlist_hidden
svlist_invalid
svlist_meta
svlist_meta_hidden
svlist_meta_invalid
tell
tell64
trunc
trunc_rdonly
trunc_rofs
unclude
unclude_del
unclude_move
version_0
version_0_write
version_1
version_1_write
version_2
version_2_write
version_3
version_3_write
version_4
version_4_write
version_5
version_5_strict
version_5_write
version_6
version_6_strict
version_6_write
version_7
version_7_strict
version_7_write
version_8
version_8_strict
version_8_write
version_9
version_9_strict
version_9_write
vlist
vlist_hidden
vlist_invalid
vlist_meta
vlist_meta_hidden
vlist_meta_invalid
xz_get
xz_nframes
Modified: trunk/getdata/test/Makefile.am
===================================================================
--- trunk/getdata/test/Makefile.am 2011-12-11 23:48:27 UTC (rev 636)
+++ trunk/getdata/test/Makefile.am 2011-12-13 02:53:25 UTC (rev 637)
@@ -164,7 +164,8 @@
FOFFS_TESTS=foffs_alter foffs_get foffs_move
-FRAGMENT_TESTS=fragment_index fragment_name fragment_name_oor
+FRAGMENT_TESTS=fragment_affix fragment_affix_alter fragment_affix_alter2 \
+ fragment_affix_dup fragment_index fragment_name fragment_name_oor
GET_TESTS=${GET64} get_bad_code get_bit get_carray get_carray_len \
get_carray_slice get_char get_clincom get_complex128 \
@@ -196,9 +197,9 @@
HIDE_TESTS=hide hide_unhide
-INCLUDE_TESTS=include include_accmode include_auto include_cb include_creat \
- include_ignore include_index include_invalid include_nonexistent \
- include_pc include_ref include_syntax
+INCLUDE_TESTS=include include_accmode include_affix include_auto include_cb \
+ include_creat include_ignore include_index include_invalid \
+ include_nonexistent include_pc include_ref include_syntax
INDEX_TESTS=index index_domain index_range
Modified: trunk/getdata/test/alter_spec_affix.c
===================================================================
--- trunk/getdata/test/alter_spec_affix.c 2011-12-11 23:48:27 UTC (rev 636)
+++ trunk/getdata/test/alter_spec_affix.c 2011-12-13 02:53:25 UTC (rev 637)
@@ -29,7 +29,7 @@
const char *format_data = "/INCLUDE format1 A Z\n";
const char *format1_data = "data RAW UINT8 1\n";
unsigned char data_data[256];
- int fd, i, ret, error, r = 0;
+ int fd, ret, error, r = 0;
off64_t n;
DIRFILE *D;
Added: trunk/getdata/test/fragment_affix.c
===================================================================
--- trunk/getdata/test/fragment_affix.c (rev 0)
+++ trunk/getdata/test/fragment_affix.c 2011-12-13 02:53:25 UTC (rev 637)
@@ -0,0 +1,63 @@
+/* Copyright (C) 2011 D. V. Wiebe
+ *
+ ***************************************************************************
+ *
+ * This file is part of the GetData project.
+ *
+ * GetData is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published...
[truncated message content] |
|
From: <ket...@us...> - 2011-12-11 23:48:33
|
Revision: 636
http://getdata.svn.sourceforge.net/getdata/?rev=636&view=rev
Author: ketiltrout
Date: 2011-12-11 23:48:27 +0000 (Sun, 11 Dec 2011)
Log Message:
-----------
Fix gd_rename.
Modified Paths:
--------------
trunk/getdata/src/name.c
Modified: trunk/getdata/src/name.c
===================================================================
--- trunk/getdata/src/name.c 2011-12-11 23:35:07 UTC (rev 635)
+++ trunk/getdata/src/name.c 2011-12-11 23:48:27 UTC (rev 636)
@@ -200,13 +200,20 @@
} else {
name = _GD_DeMungeCode(D->fragment[E->fragment_index].prefix,
D->fragment[E->fragment_index].suffix, new_name);
- if (name == NULL) {
+ if (name == NULL || name[0] == '\0') {
_GD_SetError(D, GD_E_BAD_CODE, GD_E_CODE_INVALID, NULL, 0, new_name);
dreturn("%i", -1);
return -1;
}
+ free(name);
+ name = _GD_Strdup(D, new_name);
}
+ if (D->error) {
+ dreturn("%i", -1);
+ return -1;
+ }
+
/* Duplicate check */
Q = _GD_FindField(D, name, D->entry, D->n_entries, NULL);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|