stdio.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. /*
  2. * <stdio.h> wrapper functions.
  3. *
  4. * Authors:
  5. * Jonathan Pryor ([email protected])
  6. *
  7. * Copyright (C) 2004-2005 Jonathan Pryor
  8. */
  9. #include <stdarg.h>
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include "mph.h"
  13. G_BEGIN_DECLS
  14. #ifndef PLATFORM_WIN32
  15. gint32
  16. Mono_Posix_Syscall_L_ctermid (void)
  17. {
  18. return L_ctermid;
  19. }
  20. gint32
  21. Mono_Posix_Syscall_L_cuserid (void)
  22. {
  23. return L_cuserid;
  24. }
  25. #endif /* ndef PLATFORM_WIN32 */
  26. mph_size_t
  27. Mono_Posix_Stdlib_fread (void *ptr, mph_size_t size, mph_size_t nmemb, FILE *stream)
  28. {
  29. mph_return_if_size_t_overflow (size);
  30. mph_return_if_size_t_overflow (nmemb);
  31. return fread (ptr, (size_t) size, (size_t) nmemb, stream);
  32. }
  33. mph_size_t
  34. Mono_Posix_Stdlib_fwrite (const void *ptr, mph_size_t size, mph_size_t nmemb, FILE *stream)
  35. {
  36. mph_return_if_size_t_overflow (size);
  37. mph_return_if_size_t_overflow (nmemb);
  38. return fwrite (ptr, (size_t) size, (size_t) nmemb, stream);
  39. }
  40. #ifdef HAVE_VSNPRINTF
  41. gint32
  42. Mono_Posix_Stdlib_snprintf (char *s, mph_size_t n, char *format, ...)
  43. {
  44. va_list ap;
  45. gint32 r;
  46. mph_return_if_size_t_overflow (n);
  47. va_start (ap, format);
  48. r = vsnprintf (s, (size_t) n, format, ap);
  49. va_end (ap);
  50. return r;
  51. }
  52. #endif /* def HAVE_SNPRINTF */
  53. gint32
  54. Mono_Posix_Stdlib__IOFBF (void)
  55. {
  56. return _IOFBF;
  57. }
  58. gint32
  59. Mono_Posix_Stdlib__IOLBF (void)
  60. {
  61. return _IOLBF;
  62. }
  63. gint32
  64. Mono_Posix_Stdlib__IONBF (void)
  65. {
  66. return _IONBF;
  67. }
  68. gint32
  69. Mono_Posix_Stdlib_BUFSIZ (void)
  70. {
  71. return BUFSIZ;
  72. }
  73. gint32
  74. Mono_Posix_Stdlib_EOF (void)
  75. {
  76. return EOF;
  77. }
  78. gint32
  79. Mono_Posix_Stdlib_FOPEN_MAX (void)
  80. {
  81. return FOPEN_MAX;
  82. }
  83. gint32
  84. Mono_Posix_Stdlib_FILENAME_MAX (void)
  85. {
  86. return FILENAME_MAX;
  87. }
  88. gint32
  89. Mono_Posix_Stdlib_L_tmpnam (void)
  90. {
  91. return L_tmpnam;
  92. }
  93. FILE*
  94. Mono_Posix_Stdlib_stdin (void)
  95. {
  96. return stdin;
  97. }
  98. FILE*
  99. Mono_Posix_Stdlib_stdout (void)
  100. {
  101. return stdout;
  102. }
  103. FILE*
  104. Mono_Posix_Stdlib_stderr (void)
  105. {
  106. return stderr;
  107. }
  108. gint32
  109. Mono_Posix_Stdlib_TMP_MAX (void)
  110. {
  111. return TMP_MAX;
  112. }
  113. gint32
  114. Mono_Posix_Stdlib_setvbuf (FILE *stream, char *buf, int mode, mph_size_t size)
  115. {
  116. mph_return_if_size_t_overflow (size);
  117. return setvbuf (stream, buf, mode, (size_t) size);
  118. }
  119. gint32
  120. Mono_Posix_Stdlib_fseek (FILE* stream, gint64 offset, int origin)
  121. {
  122. mph_return_if_long_overflow (offset);
  123. return fseek (stream, offset, origin);
  124. }
  125. gint64
  126. Mono_Posix_Stdlib_ftell (FILE* stream)
  127. {
  128. return ftell (stream);
  129. }
  130. fpos_t*
  131. Mono_Posix_Stdlib_CreateFilePosition (void)
  132. {
  133. fpos_t* pos = malloc (sizeof(fpos_t));
  134. return pos;
  135. }
  136. gint32
  137. Mono_Posix_Stdlib_fgetpos (FILE* stream, fpos_t *pos)
  138. {
  139. return fgetpos (stream, pos);
  140. }
  141. gint32
  142. Mono_Posix_Stdlib_fsetpos (FILE* stream, fpos_t *pos)
  143. {
  144. return fsetpos (stream, pos);
  145. }
  146. #define MPH_FPOS_LENGTH (sizeof(fpos_t)*2)
  147. int
  148. Mono_Posix_Stdlib_DumpFilePosition (char *dest, fpos_t *pos, gint32 len)
  149. {
  150. char *destp;
  151. unsigned char *posp, *pose;
  152. int i;
  153. if (dest == NULL)
  154. return MPH_FPOS_LENGTH;
  155. if (pos == NULL || len <= 0) {
  156. errno = EINVAL;
  157. return -1;
  158. }
  159. posp = (unsigned char*) pos;
  160. pose = posp + sizeof(*pos);
  161. destp = dest;
  162. for ( ; posp < pose && len > 1; destp += 2, ++posp, len -= 2) {
  163. sprintf (destp, "%02X", *posp);
  164. }
  165. if (len)
  166. dest[MPH_FPOS_LENGTH] = '\0';
  167. return dest;
  168. }
  169. G_END_DECLS
  170. /*
  171. * vim: noexpandtab
  172. */