mclose.c

来自「支持各种栅格图像和矢量图像读取的库」· C语言 代码 · 共 97 行

C
97
字号
/*******************************************************//*  Mclose.c               *//*******************************************************//*  close map and if write permission write all    *//*  resident data to file                           *//*******************************************************/#include "csf.h"#include "csfimpl.h"#include <string.h>  /* memset() *//* close a map * the Mclose function closes a map * if the map is being used for output  * all header data is rewritten first * returns Upon succesful completion 0 is returned.  * Otherwise, a non-zero value is returned * * Merrno * WRITE_ERROR (map descriptor still in tact if this happens) */int Mclose(  MAP *m) /* map to close, map descriptor             * is deallocated             */{  CHECKHANDLE_GOTO(m, error);  if (m->minMaxStatus == MM_WRONGVALUE)  {    CsfSetVarTypeMV( &(m->raster.minVal), m->raster.cellRepr);    CsfSetVarTypeMV( &(m->raster.maxVal), m->raster.cellRepr);  }  /* if write permission , write all header data to file */  if (WRITE_ENABLE(m))  {    char filler[MAX_HEADER_FILL_SIZE];    (void)memset(filler, 0x0, (size_t)MAX_HEADER_FILL_SIZE);    if (m->main.byteOrder != ORD_OK) {     CsfSwap((void*)&(m->raster.minVal), CELLSIZE(m->raster.cellRepr),(size_t)1);     CsfSwap((void*)&(m->raster.maxVal), CELLSIZE(m->raster.cellRepr),(size_t)1);    }    fseek(m->fp,(long)ADDR_MAIN_HEADER,SEEK_SET);    if(m->write((void*)&(m->main.signature),sizeof(char), CSF_SIG_SPACE,m->fp)                                                       != CSF_SIG_SPACE ||       m->write((void*)&(m->main.version),sizeof(UINT2),(size_t)1,m->fp)!=1 ||       m->write((void*)&(m->main.gisFileId),sizeof(UINT4),(size_t)1,m->fp)!=1 ||       m->write((void*)&(m->main.projection),sizeof(UINT2),(size_t)1,m->fp)!=1 ||       m->write((void*)&(m->main.attrTable),sizeof(UINT4),(size_t)1,m->fp)!=1 ||       m->write((void*)&(m->main.mapType),sizeof(UINT2),(size_t)1,m->fp)!=1 ||         fwrite((void*)&(m->main.byteOrder),sizeof(UINT4),(size_t)1,m->fp)!=1 ||       m->write((void*)filler, sizeof(char), MAIN_HEADER_FILL_SIZE ,m->fp)                                                          != MAIN_HEADER_FILL_SIZE )    {        M_ERROR(WRITE_ERROR);      goto error;    }    fseek(m->fp,ADDR_SECOND_HEADER, SEEK_SET);    if (    m->write((void*)&(m->raster.valueScale),sizeof(UINT2),(size_t)1,m->fp) !=1 ||      m->write((void*)&(m->raster.cellRepr), sizeof(UINT2),(size_t)1,m->fp) !=1 ||        fwrite((void*)&(m->raster.minVal), sizeof(CSF_VAR_TYPE),(size_t)1,m->fp) !=1 ||        fwrite((void*)&(m->raster.maxVal), sizeof(CSF_VAR_TYPE),(size_t)1,m->fp) !=1 ||      m->write((void*)&(m->raster.xUL), sizeof(REAL8),(size_t)1,m->fp) !=1 ||      m->write((void*)&(m->raster.yUL), sizeof(REAL8),(size_t)1,m->fp) !=1 ||      m->write((void*)&(m->raster.nrRows), sizeof(UINT4),(size_t)1,m->fp) !=1 ||      m->write((void*)&(m->raster.nrCols), sizeof(UINT4),(size_t)1,m->fp) !=1 ||      m->write((void*)&(m->raster.cellSize), sizeof(REAL8),(size_t)1,m->fp) !=1 ||      m->write((void*)&(m->raster.cellSizeDupl), sizeof(REAL8),(size_t)1,m->fp) !=1 ||      m->write((void*)&(m->raster.angle), sizeof(REAL8),(size_t)1,m->fp) !=1 ||            m->write((void*)filler, sizeof(char), RASTER_HEADER_FILL_SIZE ,m->fp)                                                          != RASTER_HEADER_FILL_SIZE )    {      M_ERROR(WRITE_ERROR);      goto error;    }  }  (void)fclose(m->fp);  CsfUnloadMap(m);  /* clear the space, to avoid typical errors such as     accessing the map after Mclose */      (void)memset((void *)m->fileName, 0x0, strlen(m->fileName));      CSF_FREE(m->fileName);      (void)memset((void *)m, 0x0, sizeof(MAP));  CSF_FREE(m);  return(0);error:  return(1);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?