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