1005 uchar abyHeader[100];
1008 int nLenWithoutExtension;
1013 #if !defined(bBigEndian)
1016 if( *((
uchar *) &i) == 1 )
1028 memcpy(pszFullname, pszLayer, nLenWithoutExtension);
1029 memcpy(pszFullname + nLenWithoutExtension,
".shp", 5);
1030 fpSHP = psHooks->
FOpen(pszFullname,
"wb" );
1033 char szErrorMsg[200];
1034 snprintf( szErrorMsg,
sizeof(szErrorMsg),
1035 "Failed to create file %s: %s",
1036 pszFullname, strerror(errno) );
1037 psHooks->
Error( szErrorMsg );
1042 memcpy(pszFullname + nLenWithoutExtension,
".shx", 5);
1043 fpSHX = psHooks->
FOpen(pszFullname,
"wb" );
1046 char szErrorMsg[200];
1047 snprintf( szErrorMsg,
sizeof(szErrorMsg),
1048 "Failed to create file %s: %s",
1049 pszFullname, strerror(errno) );
1050 psHooks->
Error( szErrorMsg );
1059 memset( abyHeader, 0,
sizeof(abyHeader) );
1061 abyHeader[2] = 0x27;
1062 abyHeader[3] = 0x0a;
1077 ByteCopy( &dValue, abyHeader+36, 8 );
1078 ByteCopy( &dValue, abyHeader+44, 8 );
1079 ByteCopy( &dValue, abyHeader+52, 8 );
1080 ByteCopy( &dValue, abyHeader+60, 8 );
1085 if( psHooks->
FWrite( abyHeader, 100, 1, fpSHP ) != 1 )
1087 char szErrorMsg[200];
1089 snprintf( szErrorMsg,
sizeof(szErrorMsg),
1090 "Failed to write .shp header: %s", strerror(errno) );
1091 szErrorMsg[
sizeof(szErrorMsg)-1] =
'\0';
1092 psHooks->
Error( szErrorMsg );
1104 if( psHooks->
FWrite( abyHeader, 100, 1, fpSHX ) != 1 )
1106 char szErrorMsg[200];
1108 snprintf( szErrorMsg,
sizeof(szErrorMsg),
1109 "Failure writing .shx header: %s", strerror(errno) );
1110 szErrorMsg[
sizeof(szErrorMsg)-1] =
'\0';
1111 psHooks->
Error( szErrorMsg );
1119 psHooks->
FClose( fpSHP );
1120 psHooks->
FClose( fpSHX );
1122 return(
SHPOpenLL( pszLayer,
"r+b", psHooks ) );
1125 if (pszFullname)
free(pszFullname);
1126 if (fpSHP) psHooks->
FClose( fpSHP );
1127 if (fpSHX) psHooks->
FClose( fpSHX );
SHPHandle SHPAPI_CALL SHPOpenLL(const char *pszLayer, const char *pszAccess, SAHooks *psHooks)
static void SwapWord(int length, void *wordP)
static int SHPGetLenWithoutExtension(const char *pszBasename)
#define STATIC_CAST(type, x)
#define ByteCopy(a, b, c)
void(* Error)(const char *message)
SAFile(* FOpen)(const char *filename, const char *access)
SAOffset(* FWrite)(void *p, SAOffset size, SAOffset nmemb, SAFile file)
int(* FClose)(SAFile file)