[segyio] 314/376: Add segy_read_ext_textheader
Jørgen Kvalsvik
jokva-guest at moszumanska.debian.org
Wed Sep 20 08:04:51 UTC 2017
This is an automated email from the git hooks/post-receive script.
jokva-guest pushed a commit to branch debian
in repository segyio.
commit d7deb1cef1837e3cf4bea82f0a6030b54bd5c697
Author: Jørgen Kvalsvik <jokva at statoil.com>
Date: Mon Jun 26 14:29:24 2017 +0200
Add segy_read_ext_textheader
Add the missing functionality of reading extended textual headers.
---
lib/include/segyio/segy.h | 6 ++++++
lib/src/segy.c | 26 ++++++++++++++++++--------
lib/src/segy.def | 1 +
python/segyio/_segyio.c | 4 +++-
4 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/lib/include/segyio/segy.h b/lib/include/segyio/segy.h
index 37e4e9b..d4e2b11 100644
--- a/lib/include/segyio/segy.h
+++ b/lib/include/segyio/segy.h
@@ -89,6 +89,12 @@ int segy_sample_indices( segy_file*,
/* text header operations */
int segy_read_textheader( segy_file*, char *buf);
int segy_textheader_size( void );
+/*
+ * read the extended textual headers. `pos = 0` gives the first *extended*
+ * header, i.e. the first textual header following the binary header.
+ * Behaviour is undefined if the file does not have extended headers
+ */
+int segy_read_ext_textheader( segy_file*, int pos, char* buf );
int segy_write_textheader( segy_file*, int pos, const char* buf );
/* Read the trace header at `traceno` into `buf`. */
diff --git a/lib/src/segy.c b/lib/src/segy.c
index 2072f7a..14b4570 100644
--- a/lib/src/segy.c
+++ b/lib/src/segy.c
@@ -1504,17 +1504,27 @@ int segy_crossline_stride( int sorting,
}
}
-int segy_read_textheader( segy_file* fp, char *buf) { //todo: Missing position/index support
- if(fp == NULL) {
- return SEGY_FSEEK_ERROR;
- }
- rewind( fp->fp );
+int segy_read_textheader( segy_file* fp, char *buf) {
+ return segy_read_ext_textheader(fp, -1, buf );
+}
+
+int segy_read_ext_textheader( segy_file* fp, int pos, char *buf) {
+ if( pos < -1 ) return SEGY_INVALID_ARGS;
+ if( !fp ) return SEGY_FSEEK_ERROR;
+
+ const long offset = pos == -1 ? 0 :
+ SEGY_TEXT_HEADER_SIZE + SEGY_BINARY_HEADER_SIZE +
+ ((pos-1) * SEGY_TEXT_HEADER_SIZE);
+
+ int err = fseek( fp->fp, offset, SEEK_SET );
+ if( err != 0 ) return SEGY_FSEEK_ERROR;
- const size_t read = fread( buf, 1, SEGY_TEXT_HEADER_SIZE, fp->fp );
+ char localbuf[ SEGY_TEXT_HEADER_SIZE + 1 ];
+ const size_t read = fread( localbuf, 1, SEGY_TEXT_HEADER_SIZE, fp->fp );
if( read != SEGY_TEXT_HEADER_SIZE ) return SEGY_FREAD_ERROR;
- buf[ SEGY_TEXT_HEADER_SIZE ] = '\0';
- ebcdic2ascii( buf, buf );
+ localbuf[ SEGY_TEXT_HEADER_SIZE ] = '\0';
+ ebcdic2ascii( localbuf, buf );
return SEGY_OK;
}
diff --git a/lib/src/segy.def b/lib/src/segy.def
index 260f029..269cfd3 100644
--- a/lib/src/segy.def
+++ b/lib/src/segy.def
@@ -21,6 +21,7 @@ segy_traces
segy_sample_indices
segy_read_textheader
segy_textheader_size
+segy_read_ext_textheader
segy_write_textheader
segy_traceheader
segy_write_traceheader
diff --git a/python/segyio/_segyio.c b/python/segyio/_segyio.c
index a0caf87..f8f553e 100644
--- a/python/segyio/_segyio.c
+++ b/python/segyio/_segyio.c
@@ -235,7 +235,9 @@ static PyObject *py_read_texthdr(PyObject *self, PyObject *args) {
char *buffer = malloc(sizeof(char) * (segy_textheader_size()));
- int error = segy_read_textheader(p_FILE, buffer);
+ int error = index == 0
+ ? segy_read_textheader(p_FILE, buffer)
+ : segy_read_ext_textheader(p_FILE, index - 1, buffer);
if (error != 0) {
free(buffer);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/segyio.git
More information about the debian-science-commits
mailing list