doubleio.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <unistd.h>
  5. #include "raster3d_intern.h"
  6. /*---------------------------------------------------------------------------*/
  7. int Rast3d_write_doubles(int fd, int useXdr, const double *i, int nofNum)
  8. {
  9. char xdrDoubleBuf[RASTER3D_XDR_DOUBLE_LENGTH * 1024];
  10. unsigned int n;
  11. if (nofNum <= 0)
  12. Rast3d_fatal_error("Rast3d_write_doubles: nofNum out of range");
  13. if (useXdr == RASTER3D_NO_XDR) {
  14. if (write(fd, i, sizeof(double) * nofNum) != sizeof(double) * nofNum) {
  15. Rast3d_error("Rast3d_write_doubles: writing to file failed");
  16. return 0;
  17. }
  18. else {
  19. return 1;
  20. }
  21. }
  22. do {
  23. int j;
  24. n = nofNum % 1024;
  25. if (n == 0)
  26. n = 1024;
  27. for (j = 0; j < n; j++)
  28. G_xdr_put_double(&xdrDoubleBuf[RASTER3D_XDR_DOUBLE_LENGTH * j], i);
  29. if (write(fd, xdrDoubleBuf, RASTER3D_XDR_DOUBLE_LENGTH * n) !=
  30. RASTER3D_XDR_DOUBLE_LENGTH * n) {
  31. Rast3d_error("Rast3d_write_doubles: writing xdr to file failed");
  32. return 0;
  33. }
  34. nofNum -= n;
  35. i += n;
  36. } while (nofNum);
  37. return 1;
  38. }
  39. /*---------------------------------------------------------------------------*/
  40. int Rast3d_read_doubles(int fd, int useXdr, double *i, int nofNum)
  41. {
  42. char xdrDoubleBuf[RASTER3D_XDR_DOUBLE_LENGTH * 1024];
  43. unsigned int n;
  44. if (nofNum <= 0)
  45. Rast3d_fatal_error("Rast3d_read_doubles: nofNum out of range");
  46. if (useXdr == RASTER3D_NO_XDR) {
  47. if (read(fd, i, sizeof(double) * nofNum) != sizeof(double) * nofNum) {
  48. Rast3d_error("Rast3d_read_doubles: reading from file failed");
  49. return 0;
  50. }
  51. else {
  52. return 1;
  53. }
  54. }
  55. do {
  56. int j;
  57. n = nofNum % 1024;
  58. if (n == 0)
  59. n = 1024;
  60. if (read(fd, xdrDoubleBuf, RASTER3D_XDR_DOUBLE_LENGTH * n) !=
  61. RASTER3D_XDR_DOUBLE_LENGTH * n) {
  62. Rast3d_error("Rast3d_read_doubles: reading xdr from file failed");
  63. return 0;
  64. }
  65. for (j = 0; j < n; j++)
  66. G_xdr_get_double(i, &xdrDoubleBuf[RASTER3D_XDR_DOUBLE_LENGTH * j]);
  67. nofNum -= n;
  68. i += n;
  69. } while (nofNum);
  70. return 1;
  71. }