Parse a BLR datatype. Return the alignment requirements of the datatype.
| 251 | |
| 252 | // Parse a BLR datatype. Return the alignment requirements of the datatype. |
| 253 | USHORT PAR_datatype(BlrReader& blrReader, dsc* desc) |
| 254 | { |
| 255 | desc->clear(); |
| 256 | |
| 257 | const USHORT dtype = blrReader.getByte(); |
| 258 | USHORT textType; |
| 259 | |
| 260 | switch (dtype) |
| 261 | { |
| 262 | case blr_text: |
| 263 | desc->makeText(blrReader.getWord(), ttype_dynamic); |
| 264 | desc->dsc_flags |= DSC_no_subtype; |
| 265 | break; |
| 266 | |
| 267 | case blr_cstring: |
| 268 | desc->dsc_dtype = dtype_cstring; |
| 269 | desc->dsc_flags |= DSC_no_subtype; |
| 270 | desc->dsc_length = blrReader.getWord(); |
| 271 | desc->setTextType(ttype_dynamic); |
| 272 | break; |
| 273 | |
| 274 | case blr_varying: |
| 275 | desc->makeVarying(blrReader.getWord(), ttype_dynamic); |
| 276 | desc->dsc_flags |= DSC_no_subtype; |
| 277 | break; |
| 278 | |
| 279 | case blr_text2: |
| 280 | textType = blrReader.getWord(); |
| 281 | desc->makeText(blrReader.getWord(), textType); |
| 282 | break; |
| 283 | |
| 284 | case blr_cstring2: |
| 285 | desc->dsc_dtype = dtype_cstring; |
| 286 | desc->setTextType(blrReader.getWord()); |
| 287 | desc->dsc_length = blrReader.getWord(); |
| 288 | break; |
| 289 | |
| 290 | case blr_varying2: |
| 291 | textType = blrReader.getWord(); |
| 292 | desc->makeVarying(blrReader.getWord(), textType); |
| 293 | break; |
| 294 | |
| 295 | case blr_short: |
| 296 | desc->dsc_dtype = dtype_short; |
| 297 | desc->dsc_length = sizeof(SSHORT); |
| 298 | desc->dsc_scale = (int) blrReader.getByte(); |
| 299 | break; |
| 300 | |
| 301 | case blr_long: |
| 302 | desc->dsc_dtype = dtype_long; |
| 303 | desc->dsc_length = sizeof(SLONG); |
| 304 | desc->dsc_scale = (int) blrReader.getByte(); |
| 305 | break; |
| 306 | |
| 307 | case blr_int64: |
| 308 | desc->dsc_dtype = dtype_int64; |
| 309 | desc->dsc_length = sizeof(SINT64); |
| 310 | desc->dsc_scale = (int) blrReader.getByte(); |
no test coverage detected