26#if defined (HAVE_CONFIG_H)
64 int nargin = args.length ();
66 std::string host = args(0).xstring_value (
"__ftp__: HOST must be a string");
68 std::string user = (nargin > 1)
69 ? args(1).xstring_value (
"__ftp__: USER must be a string")
72 std::string passwd = (nargin > 2)
73 ? args(2).xstring_value (
"__ftp__: PASSWD must be a string")
76 url_handle_manager& uhm = interp.get_url_handle_manager ();
80 return ovl (uh.value ());
89 url_handle_manager& uhm = interp.get_url_handle_manager ();
91 url_transfer url_xfer = uhm.get_object (args(0));
93 if (! url_xfer.is_valid ())
94 error (
"__ftp_pwd__: invalid ftp handle");
96 return ovl (url_xfer.pwd ());
105 int nargin = args.length ();
107 std::string
path =
"";
109 path = args(1).xstring_value (
"__ftp_cwd__: PATH must be a string");
111 url_handle_manager& uhm = interp.get_url_handle_manager ();
113 url_transfer url_xfer = uhm.get_object (args(0));
115 if (! url_xfer.is_valid ())
116 error (
"__ftp_cwd__: invalid ftp handle");
123DEFMETHOD (__ftp_dir__, interp, args, nargout,
129 url_handle_manager& uhm = interp.get_url_handle_manager ();
131 url_transfer url_xfer = uhm.get_object (args(0));
133 if (! url_xfer.is_valid ())
134 error (
"__ftp_dir__: invalid ftp handle");
174 url_xfer.get_fileinfo (sv(i), fsize, ftime, fisdir);
176 fileisdir(i) = fisdir;
177 time_t ftime_t = ftime;
178 filectime(i) = ctime (&ftime_t);
180 filedatenum(i) =
double (ftime);
183 st.
assign (
"date", filectime);
184 st.
assign (
"bytes", filesize);
185 st.
assign (
"isdir", fileisdir);
186 st.
assign (
"datenum", filedatenum);
201 url_handle_manager& uhm = interp.get_url_handle_manager ();
203 url_transfer url_xfer = uhm.get_object (args(0));
205 if (! url_xfer.is_valid ())
206 error (
"__ftp_ascii__: invalid ftp handle");
213DEFMETHOD (__ftp_binary__, interp, args, ,
219 url_handle_manager& uhm = interp.get_url_handle_manager ();
221 url_transfer url_xfer = uhm.get_object (args(0));
223 if (! url_xfer.is_valid ())
224 error (
"__ftp_binary__: invalid ftp handle");
237 url_handle_manager& uhm = interp.get_url_handle_manager ();
242 error (
"__ftp_close__: invalid ftp handle");
255 url_handle_manager& uhm = interp.get_url_handle_manager ();
257 url_transfer url_xfer = uhm.get_object (args(0));
259 if (! url_xfer.is_valid ())
260 error (
"__ftp_binary__: invalid ftp handle");
262 return ovl (url_xfer.is_ascii () ?
"ascii" :
"binary");
265DEFMETHOD (__ftp_delete__, interp, args, ,
271 std::string file = args(1).xstring_value (
"__ftp_delete__: FILE must be a string");
273 url_handle_manager& uhm = interp.get_url_handle_manager ();
275 url_transfer url_xfer = uhm.get_object (args(0));
277 if (! url_xfer.is_valid ())
278 error (
"__ftp_delete__: invalid ftp handle");
291 std::string dir = args(1).xstring_value (
"__ftp_rmdir__: DIR must be a string");
293 url_handle_manager& uhm = interp.get_url_handle_manager ();
295 url_transfer url_xfer = uhm.get_object (args(0));
297 if (! url_xfer.is_valid ())
298 error (
"__ftp_rmdir__: invalid ftp handle");
300 url_xfer.rmdir (dir);
311 std::string dir = args(1).xstring_value (
"__ftp_mkdir__: DIR must be a string");
313 url_handle_manager& uhm = interp.get_url_handle_manager ();
315 url_transfer url_xfer = uhm.get_object (args(0));
317 if (! url_xfer.is_valid ())
318 error (
"__ftp_mkdir__: invalid ftp handle");
320 url_xfer.mkdir (dir);
325DEFMETHOD (__ftp_rename__, interp, args, ,
331 std::string oldname = args(1).xstring_value (
"__ftp_rename__: OLDNAME must be a string");
332 std::string newname = args(2).xstring_value (
"__ftp_rename__: NEWNAME must be a string");
334 url_handle_manager& uhm = interp.get_url_handle_manager ();
336 url_transfer url_xfer = uhm.get_object (args(0));
338 if (url_xfer.is_valid ())
339 error (
"__ftp_rename__: invalid ftp handle");
341 url_xfer.rename (oldname, newname);
346DEFMETHOD (__ftp_mput__, interp, args, nargout,
352 std::string pat = args(1).xstring_value (
"__ftp_mput__: PATTERN must be a string");
354 url_handle_manager& uhm = interp.get_url_handle_manager ();
356 url_transfer url_xfer = uhm.get_object (args(0));
358 if (! url_xfer.is_valid ())
359 error (
"__ftp_mput__: invalid ftp handle");
368 std::string file = files(i);
370 sys::file_stat fs (file);
373 error (
"__ftp__mput: file does not exist");
377 file_list.
append (url_xfer.mput_directory (
"", file));
379 if (! url_xfer.good ())
380 error (
"__ftp_mput__: %s", url_xfer.lasterror ().c_str ());
387 std::ios::in | std::ios::binary);
389 if (! ifile.is_open ())
390 error (
"__ftp_mput__: unable to open file");
392 url_xfer.put (file, ifile);
396 if (! url_xfer.good ())
397 error (
"__ftp_mput__: %s", url_xfer.lasterror ().c_str ());
404 return ovl (file_list);
416 int nargin = args.length ();
418 std::string file = args(1).xstring_value (
"__ftp_mget__: PATTERN must be a string");
422 if (nargin == 3 && ! args(2).isempty ())
423 target = args(2).xstring_value (
"__ftp_mget__: TARGET must be a string")
426 url_handle_manager& uhm = interp.get_url_handle_manager ();
428 url_transfer url_xfer = uhm.get_object (args(0));
430 if (! url_xfer.is_valid ())
431 error (
"__ftp_mget__: invalid ftp handle");
439 if (pattern.
match (sv(i)))
447 url_xfer.get_fileinfo (sv(i), fsize, ftime, fisdir);
450 url_xfer.mget_directory (sv(i), target);
455 std::ios::out | std::ios::binary);
457 if (! ofile.is_open ())
458 error (
"__ftp_mget__: unable to open file");
461 unwind_action_safe delete_file (unlink_fptr, target + sv(i));
463 url_xfer.get (sv(i), ofile);
467 if (url_xfer.good ())
468 delete_file.discard ();
471 if (! url_xfer.good ())
472 error (
"__ftp_mget__: %s", url_xfer.lasterror ().c_str ());
477 error (
"__ftp_mget__: file not found");
Vector representing the dimensions (size) of an Array.
string_vector glob(void) const
bool match(const std::string &str) const
void assign(const std::string &k, const Cell &val)
string_vector & append(const std::string &s)
octave_idx_type numel(void) const
#define DEFMETHOD(name, interp_name, args_name, nargout_name, doc)
Macro to define a builtin method.
void error(const char *fmt,...)
std::string tilde_expand(const std::string &name)
std::string dir_sep_str(void)
std::ifstream ifstream(const std::string &filename, const std::ios::openmode mode)
std::ofstream ofstream(const std::string &filename, const std::ios::openmode mode)
int unlink(const std::string &name)
octave_value_list ovl(const OV_Args &... args)
Construct an octave_value_list with less typing.