⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genops.c

📁 vxworks源码源码解读是学习vxworks的最佳途径
💻 C
📖 第 1 页 / 共 2 页
字号:
    return fp;}_IO_pos_t_IO_default_seekpos (fp, pos, mode)     _IO_FILE *fp;     _IO_pos_t pos;     int mode;{  return _IO_SEEKOFF (fp, _IO_pos_as_off (pos), 0, mode);}int_IO_default_doallocate (fp)     _IO_FILE *fp;{  char *buf;  ALLOC_BUF (buf, _IO_BUFSIZ, EOF);  _IO_setb (fp, buf, buf+_IO_BUFSIZ, 1);  return 1;}void_IO_init (fp, flags)     _IO_FILE *fp;     int flags;{  fp->_flags = _IO_MAGIC|flags;  fp->_IO_buf_base = NULL;  fp->_IO_buf_end = NULL;  fp->_IO_read_base = NULL;  fp->_IO_read_ptr = NULL;  fp->_IO_read_end = NULL;  fp->_IO_write_base = NULL;  fp->_IO_write_ptr = NULL;  fp->_IO_write_end = NULL;  fp->_chain = NULL; /* Not necessary. */  fp->_IO_save_base = NULL;  fp->_IO_backup_base = NULL;  fp->_IO_save_end = NULL;  fp->_markers = NULL;  fp->_cur_column = 0;#ifdef _IO_MTSAFE_IO  _IO_lock_init (*fp->_lock);#endif}int_IO_default_sync (fp)     _IO_FILE *fp;{  return 0;}/* The way the C++ classes are mapped into the C functions in the   current implementation, this function can get called twice! */void_IO_default_finish (fp, dummy)     _IO_FILE *fp;     int dummy;{  struct _IO_marker *mark;  if (fp->_IO_buf_base && !(fp->_flags & _IO_USER_BUF))    {      FREE_BUF (fp->_IO_buf_base, _IO_blen (fp));      fp->_IO_buf_base = fp->_IO_buf_end = NULL;    }  for (mark = fp->_markers; mark != NULL; mark = mark->_next)    mark->_sbuf = NULL;  if (fp->_IO_save_base)    {      free (fp->_IO_save_base);      fp->_IO_save_base = NULL;    }#ifdef _IO_MTSAFE_IO  _IO_lock_fini (*fp->_lock);#endif  _IO_un_link (fp);}_IO_pos_t_IO_default_seekoff (fp, offset, dir, mode)     _IO_FILE *fp;     _IO_off_t offset;     int dir;     int mode;{    return _IO_pos_BAD;}int_IO_sputbackc (fp, c)     _IO_FILE *fp;     int c;{  int result;  if (fp->_IO_read_ptr > fp->_IO_read_base      && (unsigned char)fp->_IO_read_ptr[-1] == (unsigned char)c)    {      fp->_IO_read_ptr--;      result = (unsigned char) c;    }  else    result = _IO_PBACKFAIL (fp, c);  if (result != EOF)    fp->_flags &= ~_IO_EOF_SEEN;  return result;}int_IO_sungetc (fp)     _IO_FILE *fp;{  int result;  if (fp->_IO_read_ptr > fp->_IO_read_base)    {      fp->_IO_read_ptr--;      result = (unsigned char) *fp->_IO_read_ptr;    }  else    result = _IO_PBACKFAIL (fp, EOF);  if (result != EOF)    fp->_flags &= ~_IO_EOF_SEEN;  return result;}#if 0 /* Work in progress *//* Seems not to be needed.  */#if 0void_IO_set_column (fp, c)     _IO_FILE *fp;     int c;{  if (c == -1)    fp->_column = -1;  else    fp->_column = c - (fp->_IO_write_ptr - fp->_IO_write_base);}#elseint_IO_set_column (fp, i)     _IO_FILE *fp;     int i;{  fp->_cur_column = i + 1;  return 0;}#endif#endifunsigned_IO_adjust_column (start, line, count)     unsigned start;     const char *line;     int count;{  const char *ptr = line + count;  while (ptr > line)    if (*--ptr == '\n')      return line + count - ptr - 1;  return start + count;}#if 0/* Seems not to be needed. --drepper */int_IO_get_column (fp)     _IO_FILE *fp;{  if (fp->_cur_column)    return _IO_adjust_column (fp->_cur_column - 1,			      fp->_IO_write_base,			      fp->_IO_write_ptr - fp->_IO_write_base);  return -1;}#endifint_IO_flush_all (){  int result = 0;  _IO_FILE *fp;  for (fp = _IO_list_all; fp != NULL; fp = fp->_chain)    if (fp->_IO_write_ptr > fp->_IO_write_base	&& _IO_OVERFLOW (fp, EOF) == EOF)      result = EOF;  return result;}void_IO_flush_all_linebuffered (){  _IO_FILE *fp;  for (fp = _IO_list_all; fp != NULL; fp = fp->_chain)    if ((fp->_flags & _IO_NO_WRITES) == 0 && fp->_flags & _IO_LINE_BUF)      _IO_OVERFLOW (fp, EOF);}static void _IO_unbuffer_all __P ((void));static void_IO_unbuffer_all (){  _IO_FILE *fp;  for (fp = _IO_list_all; fp != NULL; fp = fp->_chain)    if (! (fp->_flags & _IO_UNBUFFERED))      _IO_SETBUF (fp, NULL, 0);}void_IO_cleanup (){  _IO_flush_all ();  /* We currently don't have a reliable mechanism for making sure that     C++ static destructors are executed in the correct order.     So it is possible that other static destructors might want to     write to cout - and they're supposed to be able to do so.     The following will make the standard streambufs be unbuffered,     which forces any output from late destructors to be written out. */  _IO_unbuffer_all ();}void_IO_init_marker (marker, fp)     struct _IO_marker *marker;     _IO_FILE *fp;{  marker->_sbuf = fp;  if (_IO_in_put_mode (fp))    _IO_switch_to_get_mode (fp);  if (_IO_in_backup (fp))    marker->_pos = fp->_IO_read_ptr - fp->_IO_read_end;  else    marker->_pos = fp->_IO_read_ptr - fp->_IO_read_base;  /* Should perhaps sort the chain? */  marker->_next = fp->_markers;  fp->_markers = marker;}void_IO_remove_marker (marker)     struct _IO_marker *marker;{  /* Unlink from sb's chain. */  struct _IO_marker **ptr = &marker->_sbuf->_markers;  for (; ; ptr = &(*ptr)->_next)    {      if (*ptr == NULL)	break;      else if (*ptr == marker)	{	  *ptr = marker->_next;	  return;	}    }#if 0    if _sbuf has a backup area that is no longer needed, should we delete    it now, or wait until the next underflow?#endif}#define BAD_DELTA EOFint_IO_marker_difference (mark1, mark2)     struct _IO_marker *mark1;     struct _IO_marker *mark2;{  return mark1->_pos - mark2->_pos;}/* Return difference between MARK and current position of MARK's stream. */int_IO_marker_delta (mark)     struct _IO_marker *mark;{  int cur_pos;  if (mark->_sbuf == NULL)    return BAD_DELTA;  if (_IO_in_backup (mark->_sbuf))    cur_pos = mark->_sbuf->_IO_read_ptr - mark->_sbuf->_IO_read_end;  else    cur_pos = mark->_sbuf->_IO_read_ptr - mark->_sbuf->_IO_read_base;  return mark->_pos - cur_pos;}int_IO_seekmark (fp, mark, delta)     _IO_FILE *fp;     struct _IO_marker *mark;     int delta;{  if (mark->_sbuf != fp)    return EOF; if (mark->_pos >= 0)    {      if (_IO_in_backup (fp))	_IO_switch_to_main_get_area (fp);      fp->_IO_read_ptr = fp->_IO_read_base + mark->_pos;    }  else    {      if (!_IO_in_backup (fp))	_IO_switch_to_backup_area (fp);      fp->_IO_read_ptr = fp->_IO_read_end + mark->_pos;    }  return 0;}void_IO_unsave_markers (fp)     _IO_FILE *fp;{  struct _IO_marker *mark = fp->_markers;  if (mark)    {#ifdef TODO      streampos offset = seekoff (0, ios::cur, ios::in);      if (offset != EOF)	{	  offset += eGptr () - Gbase ();	  for ( ; mark != NULL; mark = mark->_next)	    mark->set_streampos (mark->_pos + offset);	}    else      {	for ( ; mark != NULL; mark = mark->_next)	  mark->set_streampos (EOF);      }#endif      fp->_markers = 0;    }  if (_IO_have_backup (fp))    _IO_free_backup_area (fp);}#if 0/* Seems not to be needed. --drepper */int_IO_nobackup_pbackfail (fp, c)     _IO_FILE *fp;     int c;{  if (fp->_IO_read_ptr > fp->_IO_read_base)	fp->_IO_read_ptr--;  if (c != EOF && *fp->_IO_read_ptr != c)      *fp->_IO_read_ptr = c;  return (unsigned char) c;}#endifint_IO_default_pbackfail (fp, c)     _IO_FILE *fp;     int c;{  if (fp->_IO_read_ptr <= fp->_IO_read_base)    {      /* Need to handle a filebuf in write mode (switch to read mode). FIXME!*/      if (_IO_have_backup (fp) && !_IO_in_backup (fp))	_IO_switch_to_backup_area (fp);      if (!_IO_have_backup (fp))	{	  /* No backup buffer: allocate one. */	  /* Use nshort buffer, if unused? (probably not)  FIXME */	  int backup_size = 128;	  char *bbuf = (char *) malloc (backup_size);	  if (bbuf == NULL)	    return EOF;	  fp->_IO_save_base = bbuf;	  fp->_IO_save_end = fp->_IO_save_base + backup_size;	  fp->_IO_backup_base = fp->_IO_save_end;	  _IO_switch_to_backup_area (fp);	}      else if (fp->_IO_read_ptr <= fp->_IO_read_base)	{	  /* Increase size of existing backup buffer. */	  _IO_size_t new_size;	  _IO_size_t old_size = fp->_IO_read_end - fp->_IO_read_base;	  char *new_buf;	  new_size = 2 * old_size;	  new_buf = (char *) malloc (new_size);	  if (new_buf == NULL)	    return EOF;	  memcpy (new_buf + (new_size - old_size), fp->_IO_read_base,		  old_size);	  free (fp->_IO_read_base);	  _IO_setg (fp, new_buf, new_buf + (new_size - old_size),		    new_buf + new_size);	  fp->_IO_backup_base = fp->_IO_read_ptr;	}    }  --fp->_IO_read_ptr;  if (c != EOF && *fp->_IO_read_ptr != c)    *fp->_IO_read_ptr = c;  return (unsigned char) *fp->_IO_read_ptr;}_IO_pos_t_IO_default_seek (fp, offset, dir)     _IO_FILE *fp;     _IO_off_t offset;     int dir;{  return _IO_pos_BAD;}int_IO_default_stat (fp, st)     _IO_FILE *fp;     void* st;{  return EOF;}_IO_ssize_t_IO_default_read (fp, data, n)     _IO_FILE* fp;     void *data;     _IO_ssize_t n;{  return -1;}_IO_ssize_t_IO_default_write (fp, data, n)     _IO_FILE *fp;     const void *data;     _IO_ssize_t n;{  return 0;}#ifdef TODO#if defined(linux)#define IO_CLEANUP ;#endif#ifdef IO_CLEANUP  IO_CLEANUP#elsestruct __io_defs {    __io_defs() { }    ~__io_defs() { _IO_cleanup (); }};__io_defs io_defs__;#endif#endif /* TODO */#ifdef weak_aliasweak_alias (_IO_cleanup, _cleanup)#endif#ifdef text_set_elementtext_set_element(__libc_atexit, _cleanup);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -