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. |