TITANIUM_FUNCTION(File, getDirectoryListing) { auto listing = getDirectoryListing(); auto context = get_context(); std::vector<JSValue> result; for (size_t i = 0; i < listing.size(); i++) { result.push_back(context.CreateString(listing.at(i))); } return context.CreateArray(result); }
void get_directory_listing_method(struct mg_connection *conn, const struct mg_request_info *ri) { char basePathBuf[PATH_MAX]; char *resp; get_var(ri, "base_path", basePathBuf, PATH_MAX); resp = getDirectoryListing(basePathBuf); if (resp) { sendResponse(conn, RESP_OK, CONTENT_TYPE_JSON, resp); free(resp); } else { char *errorJSON = formErrorJSON(NO_MATCHING_RECORDS, "No matching record(s) exist(s)"); sendResponse(conn, RESP_NOT_FOUND, CONTENT_TYPE_PLAIN_TEXT, errorJSON); free(errorJSON); } }
void getDirectoryListingR(const char* dir, std::vector<std::string>* filesout, std::vector<std::string>* directoriesout) { filesout->clear(); directoriesout->clear(); std::stack<std::string> stack; std::string directory = dir; int dirlen = strlen(dir); if (dirlen > 0 && (dir[dirlen - 1] == '/' || dir[dirlen - 1] == '\\')) directory.resize(directory.size() - 1); stack.push(""); while (!stack.empty()) { std::string dir = stack.top(); stack.pop(); std::vector<std::string> files, directories; getDirectoryListing((directory + dir).c_str(), &files, &directories); for (std::size_t i = 0; i < files.size(); ++i) { std::string str = dir + "/" + files[i]; filesout->push_back(str.c_str() + 1); } for (std::size_t i = 0; i < directories.size(); ++i) { std::string str = dir + "/" + directories[i]; directoriesout->push_back(str.c_str() + 1); stack.push(dir + "/" + directories[i]); } } }
void printDirectoryListing(char *dir) { char *listing = getDirectoryListing(dir); fprintf(stdout, "'%s/' directory listing: \n\n%s\n", dir, listing); free(listing); }