[BACK]Return to sftp-glob.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/sftp-glob.c between version 1.5 and 1.5.2.2

version 1.5, 2001/04/15 08:43:46 version 1.5.2.2, 2002/03/09 00:20:45
Line 1 
Line 1 
 /*  /*
  * Copyright (c) 2001 Damien Miller.  All rights reserved.   * Copyright (c) 2001,2002 Damien Miller.  All rights reserved.
  *   *
  * Redistribution and use in source and binary forms, with or without   * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions   * modification, are permitted provided that the following conditions
Line 27 
Line 27 
   
 #include <glob.h>  #include <glob.h>
   
 #include "ssh.h"  
 #include "buffer.h"  #include "buffer.h"
 #include "bufaux.h"  #include "bufaux.h"
 #include "getput.h"  
 #include "xmalloc.h"  #include "xmalloc.h"
 #include "log.h"  #include "log.h"
 #include "atomicio.h"  
 #include "pathnames.h"  
   
 #include "sftp.h"  #include "sftp.h"
 #include "sftp-common.h"  #include "sftp-common.h"
Line 47 
Line 43 
 };  };
   
 static struct {  static struct {
         int fd_in;          struct sftp_conn *conn;
         int fd_out;  
 } cur;  } cur;
   
 void *fudge_opendir(const char *path)  static void *
   fudge_opendir(const char *path)
 {  {
         struct SFTP_OPENDIR *r;          struct SFTP_OPENDIR *r;
   
         r = xmalloc(sizeof(*r));          r = xmalloc(sizeof(*r));
   
         if (do_readdir(cur.fd_in, cur.fd_out, (char*)path, &r->dir))          if (do_readdir(cur.conn, (char*)path, &r->dir))
                 return(NULL);                  return(NULL);
   
         r->offset = 0;          r->offset = 0;
Line 65 
Line 61 
         return((void*)r);          return((void*)r);
 }  }
   
 struct dirent *fudge_readdir(struct SFTP_OPENDIR *od)  static struct dirent *
   fudge_readdir(struct SFTP_OPENDIR *od)
 {  {
         static struct dirent ret;          static struct dirent ret;
   
         if (od->dir[od->offset] == NULL)          if (od->dir[od->offset] == NULL)
                 return(NULL);                  return(NULL);
   
Line 79 
Line 76 
         return(&ret);          return(&ret);
 }  }
   
 void fudge_closedir(struct SFTP_OPENDIR *od)  static void
   fudge_closedir(struct SFTP_OPENDIR *od)
 {  {
         free_sftp_dirents(od->dir);          free_sftp_dirents(od->dir);
         xfree(od);          xfree(od);
 }  }
   
 void attrib_to_stat(Attrib *a, struct stat *st)  static void
   attrib_to_stat(Attrib *a, struct stat *st)
 {  {
         memset(st, 0, sizeof(*st));          memset(st, 0, sizeof(*st));
   
         if (a->flags & SSH2_FILEXFER_ATTR_SIZE)          if (a->flags & SSH2_FILEXFER_ATTR_SIZE)
                 st->st_size = a->size;                  st->st_size = a->size;
         if (a->flags & SSH2_FILEXFER_ATTR_UIDGID) {          if (a->flags & SSH2_FILEXFER_ATTR_UIDGID) {
Line 103 
Line 102 
         }          }
 }  }
   
 int fudge_lstat(const char *path, struct stat *st)  static int
   fudge_lstat(const char *path, struct stat *st)
 {  {
         Attrib *a;          Attrib *a;
   
         if (!(a = do_lstat(cur.fd_in, cur.fd_out, (char*)path, 0)))          if (!(a = do_lstat(cur.conn, (char*)path, 0)))
                 return(-1);                  return(-1);
   
         attrib_to_stat(a, st);          attrib_to_stat(a, st);
   
         return(0);          return(0);
 }  }
   
 int fudge_stat(const char *path, struct stat *st)  static int
   fudge_stat(const char *path, struct stat *st)
 {  {
         Attrib *a;          Attrib *a;
   
         if (!(a = do_stat(cur.fd_in, cur.fd_out, (char*)path, 0)))          if (!(a = do_stat(cur.conn, (char*)path, 0)))
                 return(-1);                  return(-1);
   
         attrib_to_stat(a, st);          attrib_to_stat(a, st);
   
         return(0);          return(0);
 }  }
   
 int  int
 remote_glob(int fd_in, int fd_out, const char *pattern, int flags,  remote_glob(struct sftp_conn *conn, const char *pattern, int flags,
     int (*errfunc)(const char *, int), glob_t *pglob)      int (*errfunc)(const char *, int), glob_t *pglob)
 {  {
         pglob->gl_opendir = (void*)fudge_opendir;          pglob->gl_opendir = fudge_opendir;
         pglob->gl_readdir = (void*)fudge_readdir;          pglob->gl_readdir = (struct dirent *(*)(void *))fudge_readdir;
         pglob->gl_closedir = (void*)fudge_closedir;          pglob->gl_closedir = (void (*)(void *))fudge_closedir;
         pglob->gl_lstat = fudge_lstat;          pglob->gl_lstat = fudge_lstat;
         pglob->gl_stat = fudge_stat;          pglob->gl_stat = fudge_stat;
   
         memset(&cur, 0, sizeof(cur));          memset(&cur, 0, sizeof(cur));
         cur.fd_in = fd_in;          cur.conn = conn;
         cur.fd_out = fd_out;  
   
         return(glob(pattern, flags | GLOB_ALTDIRFUNC, (void*)errfunc,          return(glob(pattern, flags | GLOB_ALTDIRFUNC, errfunc, pglob));
             pglob));  
 }  }

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.5.2.2