Convert-Binary-C

 view release on metacpan or  search on metacpan

ctlib/fileinfo.c  view on Meta::CPAN


#include <sys/stat.h>


/*===== LOCAL INCLUDES =======================================================*/

#include "fileinfo.h"
#include "util/memalloc.h"


/*===== DEFINES ==============================================================*/

/*===== TYPEDEFS =============================================================*/

/*===== STATIC FUNCTION PROTOTYPES ===========================================*/

/*===== EXTERNAL VARIABLES ===================================================*/

/*===== GLOBAL VARIABLES =====================================================*/

/*===== STATIC VARIABLES =====================================================*/

/*===== STATIC FUNCTIONS =====================================================*/

/*===== FUNCTIONS ============================================================*/

/*******************************************************************************
*
*   ROUTINE: fileinfo_new
*
*   WRITTEN BY: Marcus Holland-Moritz             ON: Nov 2002
*   CHANGED BY:                                   ON:
*
********************************************************************************
*
* DESCRIPTION: FileInfo object constructor.
*
*   ARGUMENTS:
*
*     RETURNS:
*
*******************************************************************************/

FileInfo *fileinfo_new( FILE *file, char *name, size_t name_len )
{
  FileInfo *pFileInfo;
  struct stat buf;

  if( name != NULL && name_len == 0 )
    name_len = strlen( name );

  AllocF( FileInfo *, pFileInfo, offsetof( FileInfo, name ) + name_len + 1 );

  if( name != NULL ) {
    strncpy( pFileInfo->name, name, name_len );
    pFileInfo->name[name_len] = '\0';
  }
  else
    pFileInfo->name[0] = '\0';

  if( file != NULL && fstat( fileno( file ), &buf ) == 0 ) {
    pFileInfo->valid       = 1;
    pFileInfo->size        = buf.st_size;
    pFileInfo->access_time = buf.st_atime;
    pFileInfo->modify_time = buf.st_mtime;
    pFileInfo->change_time = buf.st_ctime;
  }
  else {
    pFileInfo->valid       = 0;
    pFileInfo->size        = 0;
    pFileInfo->access_time = 0;
    pFileInfo->modify_time = 0;
    pFileInfo->change_time = 0;
  }

  return pFileInfo;
}

/*******************************************************************************
*
*   ROUTINE: fileinfo_delete
*
*   WRITTEN BY: Marcus Holland-Moritz             ON: Nov 2002
*   CHANGED BY:                                   ON:
*
********************************************************************************
*
* DESCRIPTION: FileInfo object destructor.
*
*   ARGUMENTS:
*
*     RETURNS:
*
*******************************************************************************/

void fileinfo_delete( FileInfo *pFileInfo )
{
  if( pFileInfo )
    Free( pFileInfo );
}

/*******************************************************************************
*
*   ROUTINE: fileinfo_clone
*
*   WRITTEN BY: Marcus Holland-Moritz             ON: Nov 2002
*   CHANGED BY:                                   ON:
*
********************************************************************************
*
* DESCRIPTION: Clone FileInfo object.
*
*   ARGUMENTS:
*
*     RETURNS:
*
*******************************************************************************/

FileInfo *fileinfo_clone( const FileInfo *pSrc )
{
  FileInfo *pDest;



( run in 0.997 second using v1.01-cache-2.11-cpan-39bf76dae61 )