SIONlib  1.6.2
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_internal.h"
20 #include "sion_fd.h"
21 #include "sion_filedesc.h"
22 #include "sion_tools.h"
23 
30 {
31 
32  /* Are we little or big endian? From Harbison&Steele. */
33  union
34  {
35  long l;
36  char c[sizeof(long)];
37  } u;
38 
39  u.l = 1;
40  return (u.c[sizeof(long) - 1] == 1);
41 
42 }
43 
48 int sion_get_version(int *main_version,int *sub_version,int *patch_level,int *fileformat_version)
49 {
50  *main_version = SION_MAIN_VERSION;
51  *sub_version = SION_SUB_VERSION;
52  *patch_level = SION_VERSION_PATCHLEVEL;
53  *fileformat_version = SION_FILEFORMAT_VERSION;
54  return(SION_SUCCESS);
55 }
56 
57 FILE *sion_get_fp(int sid)
58 {
59  _sion_filedesc *sion_filedesc;
60 
61  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
62  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
63  _sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"sion_get_fp: invalid sion_filedesc sid=%d ...\n",sid);
64  return (NULL);
65  }
66 
67  if(sion_filedesc->fileptr->flags&SION_FILE_FLAG_ANSI) {
68  if(sion_filedesc->fileptr->flags&SION_FILE_FLAG_SCNDANSI) {
69  return(sion_filedesc->fileptr->second_fileptr);
70  } else {
71  return(sion_filedesc->fileptr->fileptr);
72  }
73  } else {
74  return(NULL);
75  }
76 }
77 
78 int sion_get_fd(int sid)
79 {
80  _sion_filedesc *sion_filedesc;
81 
82  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
83  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
84  _sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"sion_get_fp: invalid sion_filedesc sid=%d ...\n",sid);
85  return (SION_ID_UNDEF);
86  }
87 
88  if(sion_filedesc->fileptr->flags&SION_FILE_FLAG_POSIX) {
89  return(sion_filedesc->fileptr->fd);
90  } else {
91  return(SION_ID_UNDEF);
92  }
93 
94 }
95 
96 
97 _sion_filedesc *_sion_get_filedesc(int sid)
98 {
99  _sion_filedesc *sion_filedesc;
100 
101  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
102  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
103  _sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"sion_get_fp: invalid sion_filedesc sid=%d ...\n",sid);
104  return (NULL);
105  }
106 
107  return (sion_filedesc);
108 }
109 
110 
int sion_get_endianness()
Return endianness.
Definition: sion_tools.c:29
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
int _sion_errorprint(int rc, int level, const char *format,...)
Internal SION error.
#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:48
_sion_fileptr * fileptr
Definition: sion_filedesc.h:80
#define SION_FILE_FLAG_SCNDANSI
Definition: sion_file.h:20