wrapper for zlib library
assume that zlib is available for linking. This is usually the case (zlib is a stable standard library), but there is currently no check that gives a nice error message or the possibility to use zlib from a non-standard location
This commit is contained in:
parent
a931625be0
commit
9ce406ed11
|
@ -184,7 +184,7 @@ if (CMAKE_BUILD_TYPE STREQUAL "DEBUG")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
set (CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE} "${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE}} ${PETSC_INCLUDES} ${BUILDCMD_POST}")
|
set (CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE} "${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE}} ${PETSC_INCLUDES} ${BUILDCMD_POST}")
|
||||||
set (CMAKE_Fortran_LINK_EXECUTABLE "${CMAKE_Fortran_LINK_EXECUTABLE} <OBJECTS> -o <TARGET> <LINK_LIBRARIES> ${PETSC_EXTERNAL_LIB} ${BUILDCMD_POST}")
|
set (CMAKE_Fortran_LINK_EXECUTABLE "${CMAKE_Fortran_LINK_EXECUTABLE} <OBJECTS> -o <TARGET> <LINK_LIBRARIES> ${PETSC_EXTERNAL_LIB} -lz ${BUILDCMD_POST}")
|
||||||
|
|
||||||
message ("Fortran Compiler Flags:\n${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE}}\n")
|
message ("Fortran Compiler Flags:\n${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE}}\n")
|
||||||
message ("C Compiler Flags:\n${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}}\n")
|
message ("C Compiler Flags:\n${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}}\n")
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include "zlib.h"
|
||||||
|
|
||||||
/* http://stackoverflow.com/questions/30279228/is-there-an-alternative-to-getcwd-in-fortran-2003-2008 */
|
/* http://stackoverflow.com/questions/30279228/is-there-an-alternative-to-getcwd-in-fortran-2003-2008 */
|
||||||
|
|
||||||
|
@ -57,3 +58,17 @@ void signalusr1_c(void (*handler)(int)){
|
||||||
void signalusr2_c(void (*handler)(int)){
|
void signalusr2_c(void (*handler)(int)){
|
||||||
signal(SIGUSR2, handler);
|
signal(SIGUSR2, handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void inflate_c(const uLong *s_deflated, const uLong *s_inflated, const Byte deflated[], Byte inflated[]){
|
||||||
|
/* make writable copy, uncompress will write to it */
|
||||||
|
uLong s_inflated_;
|
||||||
|
s_inflated_ = *s_inflated;
|
||||||
|
|
||||||
|
if(uncompress((Bytef *)inflated, &s_inflated_, (Bytef *)deflated, *s_deflated) == Z_OK)
|
||||||
|
return;
|
||||||
|
else{
|
||||||
|
for(uLong i=0;i<*s_inflated;i++){
|
||||||
|
inflated[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
!> @author Martin Diehl, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
|
!> @brief Inflate zlib compressed data
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
module zlib
|
||||||
|
use prec
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
private
|
||||||
|
|
||||||
|
public :: &
|
||||||
|
zlib_inflate
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
subroutine inflate_C(s_deflated,s_inflated,deflated,inflated) bind(C)
|
||||||
|
use, intrinsic :: ISO_C_Binding, only: &
|
||||||
|
C_SIGNED_CHAR, C_INT64_T
|
||||||
|
|
||||||
|
integer(C_INT64_T), intent(in) :: s_deflated,s_inflated
|
||||||
|
integer(C_SIGNED_CHAR), dimension(s_deflated), intent(in) :: deflated
|
||||||
|
integer(C_SIGNED_CHAR), dimension(s_inflated), intent(out) :: inflated
|
||||||
|
|
||||||
|
end subroutine inflate_C
|
||||||
|
|
||||||
|
end interface
|
||||||
|
|
||||||
|
contains
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
!> @brief Inflate byte-wise representation
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
function zlib_inflate(deflated,size_inflated)
|
||||||
|
|
||||||
|
integer(C_SIGNED_CHAR), dimension(:), intent(in) :: deflated
|
||||||
|
integer(pLongInt), intent(in) :: size_inflated
|
||||||
|
|
||||||
|
integer(C_SIGNED_CHAR), dimension(size_inflated) :: zlib_inflate
|
||||||
|
|
||||||
|
call inflate_C(size(deflated,kind=C_INT64_T),int(size_inflated,C_INT64_T),deflated,zlib_inflate)
|
||||||
|
|
||||||
|
end function zlib_inflate
|
||||||
|
|
||||||
|
end module zlib
|
Loading…
Reference in New Issue