File-stat2

 view release on metacpan or  search on metacpan

stat2.xs  view on Meta::CPAN

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "ppport.h"

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>           
#include <sys/stat.h>

static double t2d (const struct timespec * ts)
{
  double d = (double)ts->tv_sec + ((double)ts->tv_nsec) / 1000000000;
  return d;
}

MODULE = File::stat2		PACKAGE = File::stat2		

void
_stat2 (path)
      const char * path
    INIT:
      struct stat st;
      char ino[128];
    PPCODE:
      if (stat (path, &st) == 0)
        {
          sprintf (ino, "%llu", (unsigned long long)st.st_ino);
          XPUSHs (sv_2mortal (newSViv (st.st_dev    )));
          XPUSHs (sv_2mortal (newSVpv (ino       , 0)));
          XPUSHs (sv_2mortal (newSViv (st.st_mode   )));
          XPUSHs (sv_2mortal (newSViv (st.st_nlink  )));
          XPUSHs (sv_2mortal (newSViv (st.st_uid    )));
          XPUSHs (sv_2mortal (newSViv (st.st_gid    )));
          XPUSHs (sv_2mortal (newSViv (st.st_rdev   )));
          XPUSHs (sv_2mortal (newSViv (st.st_size   )));
          XPUSHs (sv_2mortal (newSVnv (t2d (&st.st_atim))));
          XPUSHs (sv_2mortal (newSVnv (t2d (&st.st_mtim))));
          XPUSHs (sv_2mortal (newSVnv (t2d (&st.st_ctim))));
          XPUSHs (sv_2mortal (newSViv (st.st_blksize)));
          XPUSHs (sv_2mortal (newSViv (st.st_blocks )));
        }

    




( run in 1.217 second using v1.01-cache-2.11-cpan-71847e10f99 )