Back to index

glibc  2.9
Defines | Functions
times.c File Reference
#include <errno.h>
#include <sys/times.h>
#include <sysdep.h>

Go to the source code of this file.

Defines

#define touch(v)

Functions

clock_t __times (struct tms *buf)

Define Documentation

#define touch (   v)
Value:
do {                                                          \
       clock_t temp = v;                                             \
       asm volatile ("" : "+r" (temp));                              \
       v = temp;                                                     \
      } while (0)

Function Documentation

clock_t __times ( struct tms buf)

Definition at line 25 of file times.c.

{
  INTERNAL_SYSCALL_DECL (err);
  clock_t ret = INTERNAL_SYSCALL (times, err, 1, buf);
  if (INTERNAL_SYSCALL_ERROR_P (ret, err)
      && __builtin_expect (INTERNAL_SYSCALL_ERRNO (ret, err) == EFAULT, 0))
    {
      /* This might be an error or not.  For architectures which have
        no separate return value and error indicators we cannot
        distinguish a return value of -1 from an error.  Do it the
        hard way.  We crash applications which pass in an invalid BUF
        pointer.  */
#define touch(v) \
      do {                                                           \
       clock_t temp = v;                                             \
       asm volatile ("" : "+r" (temp));                              \
       v = temp;                                                     \
      } while (0)
      touch (buf->tms_utime);
      touch (buf->tms_stime);
      touch (buf->tms_cutime);
      touch (buf->tms_cstime);

      /* If we come here the memory is valid and the kernel did not
        return an EFAULT error.  Return the value given by the kernel.  */
    }

  /* Return value (clock_t) -1 signals an error, but if there wasn't any,
     return the following value.  */
  if (ret == (clock_t) -1)
    return (clock_t) 0;

  return ret;
}

Here is the call graph for this function:

Here is the caller graph for this function: