SIONlib  1.7.0
Scalable I/O library for parallel access to task-local files
sion_tools.c
Go to the documentation of this file.
1 /****************************************************************************
2 ** SIONLIB http://www.fz-juelich.de/jsc/sionlib **
3 *****************************************************************************
4 ** Copyright (c) 2008-2016 **
5 ** Forschungszentrum Juelich, Juelich Supercomputing Centre **
6 ** **
7 ** See the file COPYRIGHT in the package base directory for details **
8 ****************************************************************************/
9 
14 #include <stdlib.h>
15 #include <stdio.h>
16 
17 #include "sion.h"
18 #include "sion_debug.h"
19 #include "sion_error_handler.h"
20 #include "sion_internal.h"
21 #include "sion_fd.h"
22 #include "sion_filedesc.h"
23 #include "sion_tools.h"
24 
31 {
32 
33  /* Are we little or big endian? From Harbison&Steele. */
34  union
35  {
36  long l;
37  char c[sizeof(long)];
38  } u;
39 
40  u.l = 1;
41  return (u.c[sizeof(long) - 1] == 1);
42 
43 }
44 
49 int sion_get_version(int *main_version,int *sub_version,int *patch_level,int *fileformat_version)
50 {
51  *main_version = SION_MAIN_VERSION;
52  *sub_version = SION_SUB_VERSION;
53  *patch_level = SION_VERSION_PATCHLEVEL;
54  *fileformat_version = SION_FILEFORMAT_VERSION;
55  return(SION_SUCCESS);
56 }
57 
58 FILE *sion_get_fp(int sid)
59 {
60  _sion_filedesc *sion_filedesc;
61 
62  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
63  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
64  _sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"sion_get_fp: invalid sion_filedesc sid=%d ...\n",sid);
65  return (NULL);
66  }
67 
68  if(sion_filedesc->fileptr->flags&SION_FILE_FLAG_ANSI) {
69  if(sion_filedesc->fileptr->flags&SION_FILE_FLAG_SCNDANSI) {
70  return(sion_filedesc->fileptr->second_fileptr);
71  } else {
72  return(sion_filedesc->fileptr->fileptr);
73  }
74  } else {
75  return(NULL);
76  }
77 }
78 
79 int sion_get_fd(int sid)
80 {
81  _sion_filedesc *sion_filedesc;
82 
83  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
84  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
85  _sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"sion_get_fp: invalid sion_filedesc sid=%d ...\n",sid);
86  return (SION_ID_UNDEF);
87  }
88 
89  if(sion_filedesc->fileptr->flags&SION_FILE_FLAG_POSIX) {
90  return(sion_filedesc->fileptr->fd);
91  } else {
92  return(SION_ID_UNDEF);
93  }
94 
95 }
96 
97 
98 _sion_filedesc *_sion_get_filedesc(int sid)
99 {
100  _sion_filedesc *sion_filedesc;
101 
102  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
103  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
104  _sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"sion_get_fp: invalid sion_filedesc sid=%d ...\n",sid);
105  return (NULL);
106  }
107 
108  return (sion_filedesc);
109 }
110 
111 
int sion_get_endianness()
Return endianness.
Definition: sion_tools.c:30
Sion File Descriptor Structure.
Definition: sion_filedesc.h:77
int _sion_vcdtype(int sid)
Definition: sion_fd.c:56
#define SION_FILE_FLAG_POSIX
Definition: sion_file.h:21
void * _sion_vcdtovcon(int sid)
Definition: sion_fd.c:51
#define SION_FILE_FLAG_ANSI
Definition: sion_file.h:19
#define SION_FILEDESCRIPTOR
Definition: sion_fd.h:17
int sion_get_version(int *main_version, int *sub_version, int *patch_level, int *fileformat_version)
Return version numbers.
Definition: sion_tools.c:49
_sion_fileptr * fileptr
Definition: sion_filedesc.h:80
#define SION_FILE_FLAG_SCNDANSI
Definition: sion_file.h:20