From be494155cfa726e66cedcdf4f39dec3c5b175059 Mon Sep 17 00:00:00 2001 From: David Rose Date: Tue, 2 Mar 2010 23:16:53 +0000 Subject: [PATCH] scan_directory() for python --- dtool/src/dtoolutil/filename.cxx | 27 +++++++++++++++++++++++++++ dtool/src/dtoolutil/filename.h | 3 +++ 2 files changed, 30 insertions(+) diff --git a/dtool/src/dtoolutil/filename.cxx b/dtool/src/dtoolutil/filename.cxx index 025b2d706d..c4f6d2eef5 100644 --- a/dtool/src/dtoolutil/filename.cxx +++ b/dtool/src/dtoolutil/filename.cxx @@ -1886,6 +1886,33 @@ scan_directory(vector_string &contents) const { #endif } +#ifdef HAVE_PYTHON +//////////////////////////////////////////////////////////////////// +// Function: Filename::scan_directory +// Access: Published +// Description: This variant on scan_directory returns a Python list +// of strings on success, or None on failure. +//////////////////////////////////////////////////////////////////// +PyObject *Filename:: +scan_directory() const { + vector_string contents; + if (!scan_directory(contents)) { + PyObject *result = Py_None; + Py_INCREF(result); + return result; + } + + PyObject *result = PyList_New(contents.size()); + for (size_t i = 0; i < contents.size(); ++i) { + const string &filename = contents[i]; + PyObject *str = PyString_FromStringAndSize(filename.data(), filename.size()); + PyList_SET_ITEM(result, i, str); + } + + return result; +} +#endif // HAVE_PYTHON + //////////////////////////////////////////////////////////////////// // Function: Filename::open_read // Access: Published diff --git a/dtool/src/dtoolutil/filename.h b/dtool/src/dtoolutil/filename.h index 813cb715e9..c5cf86f353 100644 --- a/dtool/src/dtoolutil/filename.h +++ b/dtool/src/dtoolutil/filename.h @@ -181,6 +181,9 @@ PUBLISHED: int find_on_searchpath(const DSearchPath &searchpath); bool scan_directory(vector_string &contents) const; +#ifdef HAVE_PYTHON + PyObject *scan_directory() const; +#endif bool open_read(ifstream &stream) const; bool open_write(ofstream &stream, bool truncate = true) const;