@@ -62,6 +62,62 @@ extern "C"
62
62
#define G_unopen_cell Rast_unopen
63
63
#endif
64
64
65
+ // Bad, bad, bad
66
+ // http://lists.qt-project.org/pipermail/interest/2012-May/002110.html
67
+ // http://lists.qt-project.org/pipermail/interest/2012-May/002117.html
68
+ // TODO: This is just test if it works on Windows
69
+ QByteArray readData ( QFile & file, quint32 size )
70
+ {
71
+ QByteArray byteArray;
72
+ forever
73
+ {
74
+ byteArray += file.read ( size - byteArray.size () );
75
+ if ( byteArray.size () == size )
76
+ {
77
+ break ;
78
+ }
79
+ }
80
+ return byteArray;
81
+ }
82
+
83
+ bool readBool ( QFile & file )
84
+ {
85
+ QDataStream dataStream ( readData ( file, sizeof ( bool ) ) );
86
+ bool value;
87
+ dataStream >> value;
88
+ return value;
89
+ }
90
+
91
+ qint32 readQint32 ( QFile & file )
92
+ {
93
+ QDataStream dataStream ( readData ( file, sizeof ( qint32 ) ) );
94
+ qint32 value;
95
+ dataStream >> value;
96
+ return value;
97
+ }
98
+
99
+ quint32 readQuint32 ( QFile & file )
100
+ {
101
+ QDataStream dataStream ( readData ( file, sizeof ( quint32 ) ) );
102
+ quint32 value;
103
+ dataStream >> value;
104
+ return value;
105
+ }
106
+
107
+ QgsRectangle readRectangle ( QFile & file )
108
+ {
109
+ QDataStream dataStream ( readData ( file, 4 *sizeof ( double ) ) );
110
+ QgsRectangle rectangle;
111
+ dataStream >> rectangle;
112
+ return rectangle;
113
+ }
114
+
115
+ QByteArray readByteArray ( QFile & file )
116
+ {
117
+ quint32 size = readQuint32 ( file );
118
+ return readData ( file, size );
119
+ }
120
+
65
121
int main ( int argc, char **argv )
66
122
{
67
123
char *name;
@@ -82,15 +138,18 @@ int main( int argc, char **argv )
82
138
83
139
QFile stdinFile;
84
140
stdinFile.open ( stdin, QIODevice::ReadOnly );
85
- QDataStream stdinStream ( &stdinFile );
141
+ // QDataStream stdinStream( &stdinFile );
86
142
87
143
QFile stdoutFile;
88
144
stdoutFile.open ( stdout, QIODevice::WriteOnly );
89
145
QDataStream stdoutStream ( &stdoutFile );
90
146
91
147
QgsRectangle extent;
92
148
qint32 rows, cols;
93
- stdinStream >> extent >> cols >> rows;
149
+ // stdinStream >> extent >> cols >> rows;
150
+ extent = readRectangle ( stdinFile );
151
+ cols = readQint32 ( stdinFile );
152
+ rows = readQint32 ( stdinFile );
94
153
95
154
QString err = QgsGrass::setRegion ( &window, extent, rows, cols );
96
155
if ( !err.isEmpty () )
@@ -102,7 +161,8 @@ int main( int argc, char **argv )
102
161
103
162
QGis::DataType qgis_type;
104
163
qint32 type;
105
- stdinStream >> type;
164
+ // stdinStream >> type;
165
+ type = readQint32 ( stdinFile );
106
166
qgis_type = ( QGis::DataType )type;
107
167
108
168
RASTER_MAP_TYPE grass_type;
@@ -136,15 +196,16 @@ int main( int argc, char **argv )
136
196
QByteArray byteArray;
137
197
for ( int row = 0 ; row < rows; row++ )
138
198
{
139
- stdinStream >> isCanceled;
199
+ // stdinStream >> isCanceled;
200
+ isCanceled = readBool ( stdinFile );
140
201
if ( isCanceled )
141
202
{
142
203
break ;
143
204
}
144
- stdinStream >> byteArray ;
205
+ byteArray = readByteArray ( stdinFile ) ;
145
206
if ( byteArray.size () != expectedSize )
146
207
{
147
- G_fatal_error ( " Wrong byte array size, expected %d bytes, got %d" , expectedSize, byteArray.size () );
208
+ G_fatal_error ( " Wrong byte array size, expected %d bytes, got %d, row %d / %d " , expectedSize, byteArray.size (), row, rows );
148
209
return 1 ;
149
210
}
150
211
@@ -175,6 +236,7 @@ int main( int argc, char **argv )
175
236
stdoutStream << ( bool )true ; // row written
176
237
stdoutFile.flush ();
177
238
}
239
+ // G_fatal_error( "%s", msg.toAscii().data() );
178
240
179
241
if ( isCanceled )
180
242
{
0 commit comments