Filesys-SmbClient

 view release on metacpan or  search on metacpan

SmbClient.xs  view on Meta::CPAN



SMBCFILE *
_opendir(context, fname)
  SMBCCTX *context
  char *fname
CODE:
/* 
 * Open directory fname
 *
 */
  RETVAL = context->opendir(context, fname);
#ifdef VERBOSE
  fprintf(stderr, "! Filesys::SmbClient : _opendir: %d\n", RETVAL); 
#endif

  if (RETVAL < 0) { 
    RETVAL = 0;
#ifdef VERBOSE
    fprintf(stderr, "*** Error Filesys::SmbClient : "
                      "Error opendir %s : %s\n", fname, strerror(errno));
#endif
  }
OUTPUT:
  RETVAL




int
_closedir(context, fd)
  SMBCCTX *context
  SMBCFILE *fd
CODE:
/* 
 * Close file descriptor for directory fd
 *
 */
RETVAL = context->closedir(context, fd);
#ifdef VERBOSE
  if (RETVAL < 0) { 
    fprintf(stderr, "*** Error Filesys::SmbClient : "
                    "Closedir : %s\n", strerror(errno)); }
#endif
OUTPUT:
  RETVAL




void
_readdir(context, fd)
  SMBCCTX *context
  SMBCFILE *fd
PREINIT:
/* 
 * Read file descriptor for directory fd and return file type, name and comment
 *
 */
  struct smbc_dirent * dirp;
PPCODE:
#ifdef VERBOSE
  fprintf(stderr, "! Filesys::SmbClient : _readdir: %d\n", fd); 
#endif
// Fix for rt#12221 : macro "readdir" passed 2 arguments, but takes just 1
// Seems only work on linux, not solaris
// Already defined in usr/lib/perl/5.8/CORE/reentr.inc:1322:# define readdir(a)
#if !(defined (__SVR4) && defined (__sun)) && !defined(_AIX)
#undef readdir
#endif
  dirp = (struct smbc_dirent *)context->readdir(context, fd);
  if (dirp) {
    XPUSHs(sv_2mortal(newSVnv(dirp->smbc_type)));
/*
 * 	  original code here produces strings which include NULL as last char
 *        with samba 3. Reported by dpavlin at rot13.org
 *
    XPUSHs(sv_2mortal((SV*)newSVpv(dirp->name, dirp->namelen)));
    XPUSHs(sv_2mortal((SV*)newSVpv(dirp->comment, dirp->commentlen)));
*/
    XPUSHs(sv_2mortal((SV*)newSVpv(dirp->name, strlen(dirp->name))));
    XPUSHs(sv_2mortal((SV*)newSVpv(dirp->comment, strlen(dirp->comment))));
}



void
_stat(context, fname)
  SMBCCTX *context
  char *fname
PREINIT:
/* 
 * _stat(fname) : Get information about a file or directory.
 *
 */
  int i;
  struct stat buf;
PPCODE:
  i = context->stat(context, fname, &buf);
  if (i == 0) {
    XPUSHs(sv_2mortal(newSVnv(buf.st_dev)));
    XPUSHs(sv_2mortal(newSVnv(buf.st_ino)));
    XPUSHs(sv_2mortal(newSVnv(buf.st_mode)));
    XPUSHs(sv_2mortal(newSVnv(buf.st_nlink)));
    XPUSHs(sv_2mortal(newSVnv(buf.st_uid)));
    XPUSHs(sv_2mortal(newSVnv(buf.st_gid)));
    XPUSHs(sv_2mortal(newSVnv(buf.st_rdev)));
    XPUSHs(sv_2mortal(newSVnv(buf.st_size)));
    XPUSHs(sv_2mortal(newSVnv(buf.st_blksize)));
    XPUSHs(sv_2mortal(newSVnv(buf.st_blocks)));
    XPUSHs(sv_2mortal(newSVnv(buf.st_atime)));
    XPUSHs(sv_2mortal(newSVnv(buf.st_mtime)));
    XPUSHs(sv_2mortal(newSVnv(buf.st_ctime)));
} else {
#ifdef VERBOSE
  fprintf(stderr, "! Filesys::SmbClient : Stat: %s\n", strerror(errno)); 
#endif
    XPUSHs(sv_2mortal(newSVnv(0)));
}



void
_fstat(context, fd)
  SMBCCTX *context
  SMBCFILE *fd
PREINIT:
/* 
 * Get information about a file or directory via a file descriptor.
 *
 */
  int i;
  struct stat buf;
PPCODE:
i = context->fstat(context, fd, &buf);
if (i == 0) {
  XPUSHs(sv_2mortal(newSVnv(buf.st_dev)));
  XPUSHs(sv_2mortal(newSVnv(buf.st_ino)));
  XPUSHs(sv_2mortal(newSVnv(buf.st_mode)));
  XPUSHs(sv_2mortal(newSVnv(buf.st_nlink)));
  XPUSHs(sv_2mortal(newSVnv(buf.st_uid)));
  XPUSHs(sv_2mortal(newSVnv(buf.st_gid)));
  XPUSHs(sv_2mortal(newSVnv(buf.st_rdev)));
  XPUSHs(sv_2mortal(newSVnv(buf.st_size)));
  XPUSHs(sv_2mortal(newSVnv(buf.st_blksize)));
  XPUSHs(sv_2mortal(newSVnv(buf.st_blocks)));
  XPUSHs(sv_2mortal(newSVnv(buf.st_atime)));
  XPUSHs(sv_2mortal(newSVnv(buf.st_mtime)));
  XPUSHs(sv_2mortal(newSVnv(buf.st_ctime)));
} else {
  XPUSHs(sv_2mortal(newSVnv(errno)));
}




int
_rename(context, oname, nname)
  SMBCCTX *context
  char *oname
  char *nname
CODE:
/* 
 * Rename old file oname in nname
 *
 */
RETVAL = context->rename(context, oname, context, nname);
if (RETVAL < 0) { 
  RETVAL = 0;
#ifdef VERBOSE	
  fprintf(stderr, "*** Error Filesys::SmbClient : "
 		  "Rename %s in %s : %s\n", oname, nname, strerror(errno)); 
#endif
} else {
  RETVAL = 1;
}
OUTPUT:
  RETVAL


SMBCFILE*
_open(context, fname, mode)
  SMBCCTX *context
  char *fname
  int mode
PREINIT:
/* 
 * Open file fname with perm mode
 *
 */	
  int flags; 
  int seek_end = 0;
CODE:
  /* Mode >> */



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