44 ssize_t
my_read (_IO_FILE *file,
void *buffer, ssize_t size)
46 ssize_t data_read =
dce_read (file->_fileno, buffer, size);
53 ssize_t
my_write (_IO_FILE *file,
const void *buffer, ssize_t size)
55 ssize_t data_written =
dce_write (file->_fileno, buffer, size);
56 if (data_written == -1)
60 if (file->_offset >= 0)
62 file->_offset += data_written;
66 off64_t
my_seek (_IO_FILE *file, off64_t where,
int whence)
68 off64_t result =
dce_lseek (file->_fileno, where, whence);
99 int result =
dce_fstat64 (file->_fileno, (
struct stat64 *)buf);
145 mode_flag |= O_RDONLY;
148 mode_flag |= O_WRONLY;
149 posix_flags |= O_CREAT | O_TRUNC;
152 mode_flag |= O_WRONLY;
153 posix_flags |= O_CREAT | O_APPEND;
165 posix_flags |= mode_flag;
190 FILE *file = fopen (
"/dev/null", mode);
196 struct my_IO_FILE_plus *fp = (
struct my_IO_FILE_plus *)file;
197 static struct my_IO_jump_t vtable;
198 memcpy (&vtable, fp->vtable,
sizeof(
struct my_IO_jump_t));
199 vtable.__read = (
void*)
my_read;
201 vtable.__seek = (
void*)
my_seek;
203 vtable.__stat = (
void*)
my_stat;
204 fp->vtable = &vtable;
205 close (file->_fileno);
206 file->_fileno = fildes;
220 current->
err = EINVAL;
244 current->
err = EINVAL;
261 FILE *
dce_freopen (
const char *path,
const char *mode, FILE *stream)
268 current->
err = EINVAL;
271 int oldFd = stream->_fileno;
272 stream->_fileno = -1;
273 stream = freopen (
"/dev/null", mode, stream);
276 stream->_fileno = oldFd;
280 struct my_IO_FILE_plus *fp = (
struct my_IO_FILE_plus *)stream;
281 static struct my_IO_jump_t vtable;
282 memcpy (&vtable, fp->vtable,
sizeof(
struct my_IO_jump_t));
283 vtable.__read = (
void*)
my_read;
285 vtable.__seek = (
void*)
my_seek;
287 vtable.__stat = (
void*)
my_stat;
288 fp->vtable = &vtable;
299 stream->_fileno = fd;
309 for (uint32_t i = 0; i < process->
openStreams.size (); i++)
317 return error ? EOF : 0;
337 NS_FATAL_ERROR (
"invalid FILE * closed=" << fp);
345 struct my_IO_FILE_plus *fp = (
struct my_IO_FILE_plus *)file;
346 static struct my_IO_jump_t vtable;
347 memcpy (&vtable, fp->vtable,
sizeof(
struct my_IO_jump_t));
351 fp->vtable = &vtable;
360 struct my_IO_FILE_plus *fp = (
struct my_IO_FILE_plus *)file;
361 static struct my_IO_jump_t vtable;
362 memcpy (&vtable, fp->vtable,
sizeof(
struct my_IO_jump_t));
364 fp->vtable = &vtable;
383 int status = fclose (fp);
384 NS_LOG_DEBUG (
"fclose=" << status <<
" errno=" <<
errno);
392 size_t dce_fread (
void *ptr,
size_t size,
size_t nmemb, FILE *stream)
397 size_t status = fread (ptr, size, nmemb, stream);
400 size_t dce_fwrite (
const void *ptr,
size_t size,
size_t nmemb, FILE *stream)
405 size_t status = fwrite (ptr, size, nmemb, stream);
419 int status = fflush (*i);
429 int status = fflush (stream);
448 int status = feof (stream);
455 int status = ferror (stream);
463 int status = fileno (stream);
479 va_start (vl, format);
480 int status = vfprintf (*
Current ()->process->pstdout, format, vl);
490 int status = vfprintf (*
Current ()->process->pstdout, format, ap);
498 return fgetc (*
Current ()->process->pstdin);
505 return fgetc (stream);
512 return fputc (__c, *
Current ()->process->pstdout);
519 return fputc (__c, __stream);
526 int ret = fputs (__s, *
Current ()->process->pstdout);
531 fputc (
'\n', *
Current ()->process->pstdout);
540 int status = fputc (c, stream);
548 int status = fgetc (stream);
556 int status = fputs (s, stream);
564 char *status = fgets (s, size, stream);
572 int status = ungetc (c, stream);
580 int status = fseek (stream, offset, whence);
593 int status = fseeko (stream, offset, whence);
606 long status = ftell (stream);
619 off_t status = ftello (stream);
632 int status = fgetpos (stream, pos);
645 int status = fsetpos (stream, pos);
665 int status = setvbuf (stream, buf, mode, size);
676 dce_setvbuf (stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
681 dce_setvbuf (stream, buf, buf ? _IOFBF : _IONBF, size);
694 if (std::string (pathname) ==
"")
696 current->
err = ENOENT;
700 int status = ::remove (fullpath.c_str ());
713 fprintf (*
Current ()->process->pstderr,
"%s: %s\n", s, strerror (*__errno_location ()));
722 va_start (ap, __format);
723 int retval = vfprintf (*
Current ()->process->pstdout, __format, ap);
729 __const
char *__restrict __format, _G_va_list __ap)
734 return vfprintf (__stream, __format, __ap);
738 __const
char *__restrict __format, ...)
744 va_start (ap, __format);
745 int retval = vfprintf (__stream, __format, ap);
751 size_t __slen, __const
char *__restrict __format, ...)
757 va_start (ap, __format);
758 int retval =
vsnprintf (__s, __n, __format, ap);
764 __const
char *__restrict __format, _G_va_list __ap)
769 int retval =
vsnprintf (__s, __n, __format, __ap);
782 size_t ret = __fpending (stream);
807 ret = vasprintf (&res, fmt, ap);
815 memcpy (tmp, res, ret);