Back to index

glibc  2.9
Functions | Variables
xstatconv.h File Reference
#include <kernel-features.h>
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

int __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf) attribute_hidden

Variables

int __libc_missing_axp_stat64 attribute_hidden

Function Documentation

int __xstat_conv ( int  vers,
struct kernel_stat kbuf,
void *  ubuf 
)

Definition at line 27 of file xstatconv.c.

{
  switch (vers)
    {
    case _STAT_VER_KERNEL:
      /* Nothing to do.  The struct is in the form the kernel expects.
         We should have short-circuted before we got here, but for
         completeness... */
      *(struct kernel_stat *) ubuf = *kbuf;
      break;

    case _STAT_VER_LINUX:
      {
       struct stat *buf = ubuf;

       /* Convert to current kernel version of `struct stat'.  */
       buf->st_dev = kbuf->st_dev;
       memset (&buf->st_pad1, 0, sizeof (buf->st_pad1));
       buf->st_ino = kbuf->st_ino;
       /* Check for overflow.  */
       if (buf->st_ino != kbuf->st_ino)
         {
           __set_errno (EOVERFLOW);
           return -1;
         }
       buf->st_mode = kbuf->st_mode;
       buf->st_nlink = kbuf->st_nlink;
       buf->st_uid = kbuf->st_uid;
       buf->st_gid = kbuf->st_gid;
       buf->st_rdev = kbuf->st_rdev;
       memset (&buf->st_pad2, 0, sizeof (buf->st_pad2));
       buf->st_size = kbuf->st_size;
       /* Check for overflow.  */
       if (buf->st_size != kbuf->st_size)
         {
           __set_errno (EOVERFLOW);
           return -1;
         }
       buf->st_pad3 = 0;
       buf->st_atim.tv_sec = kbuf->st_atime_sec;
       buf->st_atim.tv_nsec = kbuf->st_atime_nsec;
       buf->st_mtim.tv_sec = kbuf->st_mtime_sec;
       buf->st_mtim.tv_nsec = kbuf->st_mtime_nsec;
       buf->st_ctim.tv_sec = kbuf->st_ctime_sec;
       buf->st_ctim.tv_nsec = kbuf->st_ctime_nsec;
       buf->st_blksize = kbuf->st_blksize;
       buf->st_blocks = kbuf->st_blocks;
       /* Check for overflow.  */
       if (buf->st_blocks != kbuf->st_blocks)
         {
           __set_errno (EOVERFLOW);
           return -1;
         }
       memset (&buf->st_pad5, 0, sizeof (buf->st_pad5));
      }
      break;

    default:
      __set_errno (EINVAL);
      return -1;
    }

  return 0;
}

Variable Documentation

Definition at line 25 of file init-first.c.