stdio.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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, void *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, (FILE*) stream);
  32. }
  33. mph_size_t
  34. Mono_Posix_Stdlib_fwrite (void *ptr, mph_size_t size, mph_size_t nmemb, void *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, (FILE*) stream);
  39. }
  40. #ifdef HAVE_VSNPRINTF
  41. gint32
  42. Mono_Posix_Stdlib_snprintf (char *s, mph_size_t n, char *format, ...);
  43. gint32
  44. Mono_Posix_Stdlib_snprintf (char *s, mph_size_t n, char *format, ...)
  45. {
  46. va_list ap;
  47. gint32 r;
  48. mph_return_if_size_t_overflow (n);
  49. va_start (ap, format);
  50. r = vsnprintf (s, (size_t) n, format, ap);
  51. va_end (ap);
  52. return r;
  53. }
  54. #endif /* def HAVE_SNPRINTF */
  55. gint32
  56. Mono_Posix_Stdlib__IOFBF (void)
  57. {
  58. return _IOFBF;
  59. }
  60. gint32
  61. Mono_Posix_Stdlib__IOLBF (void)
  62. {
  63. return _IOLBF;
  64. }
  65. gint32
  66. Mono_Posix_Stdlib__IONBF (void)
  67. {
  68. return _IONBF;
  69. }
  70. gint32
  71. Mono_Posix_Stdlib_BUFSIZ (void)
  72. {
  73. return BUFSIZ;
  74. }
  75. gint32
  76. Mono_Posix_Stdlib_EOF (void)
  77. {
  78. return EOF;
  79. }
  80. gint32
  81. Mono_Posix_Stdlib_FOPEN_MAX (void)
  82. {
  83. return FOPEN_MAX;
  84. }
  85. gint32
  86. Mono_Posix_Stdlib_FILENAME_MAX (void)
  87. {
  88. return FILENAME_MAX;
  89. }
  90. gint32
  91. Mono_Posix_Stdlib_L_tmpnam (void)
  92. {
  93. return L_tmpnam;
  94. }
  95. void*
  96. Mono_Posix_Stdlib_stdin (void)
  97. {
  98. return stdin;
  99. }
  100. void*
  101. Mono_Posix_Stdlib_stdout (void)
  102. {
  103. return stdout;
  104. }
  105. void*
  106. Mono_Posix_Stdlib_stderr (void)
  107. {
  108. return stderr;
  109. }
  110. gint32
  111. Mono_Posix_Stdlib_TMP_MAX (void)
  112. {
  113. return TMP_MAX;
  114. }
  115. gint32
  116. Mono_Posix_Stdlib_setvbuf (void* stream, void *buf, int mode, mph_size_t size)
  117. {
  118. mph_return_if_size_t_overflow (size);
  119. return setvbuf (stream, (char *) buf, mode, (size_t) size);
  120. }
  121. gint32
  122. Mono_Posix_Stdlib_fseek (void* stream, gint64 offset, int origin)
  123. {
  124. mph_return_if_long_overflow (offset);
  125. return fseek (stream, offset, origin);
  126. }
  127. gint64
  128. Mono_Posix_Stdlib_ftell (void* stream)
  129. {
  130. return ftell (stream);
  131. }
  132. void*
  133. Mono_Posix_Stdlib_CreateFilePosition (void)
  134. {
  135. fpos_t* pos = malloc (sizeof(fpos_t));
  136. return pos;
  137. }
  138. gint32
  139. Mono_Posix_Stdlib_fgetpos (void* stream, void *pos)
  140. {
  141. return fgetpos (stream, (fpos_t*) pos);
  142. }
  143. gint32
  144. Mono_Posix_Stdlib_fsetpos (void* stream, void *pos)
  145. {
  146. return fsetpos (stream, (fpos_t*) pos);
  147. }
  148. #define MPH_FPOS_LENGTH (sizeof(fpos_t)*2)
  149. int
  150. Mono_Posix_Stdlib_DumpFilePosition (char *dest, void *pos, gint32 len)
  151. {
  152. char *destp;
  153. unsigned char *posp, *pose;
  154. if (dest == NULL)
  155. return MPH_FPOS_LENGTH;
  156. if (pos == NULL || len <= 0) {
  157. errno = EINVAL;
  158. return -1;
  159. }
  160. posp = (unsigned char*) pos;
  161. pose = posp + sizeof(fpos_t);
  162. destp = dest;
  163. for ( ; posp < pose && len > 1; destp += 2, ++posp, len -= 2) {
  164. sprintf (destp, "%02X", *posp);
  165. }
  166. if (len)
  167. dest[MPH_FPOS_LENGTH] = '\0';
  168. return destp - dest;
  169. }
  170. G_END_DECLS
  171. /*
  172. * vim: noexpandtab
  173. */