static int fsp_list_files (gftp_request * request) { fsp_protocol_data *lpd; g_return_val_if_fail (request != NULL, GFTP_EFATAL); g_return_val_if_fail (request->directory != NULL, GFTP_EFATAL); g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL); lpd = request->protocol_data; g_return_val_if_fail (lpd != NULL, GFTP_EFATAL); if (request->directory == NULL) { request->directory = g_strdup("/"); } if ((lpd->dir = fsp_opendir (lpd->fsp,request->directory)) == NULL) { request->logging_function (gftp_logging_error, request, _("Could not get FSP directory listing %s: %s\n"), request->directory, g_strerror (errno)); return (GFTP_ERETRYABLE); } return (0); }
static void fsp_directory(FSP_SESSION *ses, struct uri *uri) { struct string buf; FSP_DIR *dir; unsigned char *data = get_uri_string(uri, URI_DATA); unsigned char dircolor[8] = ""; if (!data) fsp_error(connection_state(S_OUT_OF_MEM)); decode_uri(data); if (!is_in_state(init_directory_listing(&buf, uri), S_OK)) fsp_error(connection_state(S_OUT_OF_MEM)); dir = fsp_opendir(ses, data); if (!dir) fsp_error(connection_state_for_errno(errno)); fprintf(stderr, "text/html"); fclose(stderr); puts(buf.source); if (get_opt_bool("document.browse.links.color_dirs", NULL)) { color_to_string(get_opt_color("document.colors.dirs", NULL), dircolor); } sort_and_display_entries(dir, dircolor); fsp_closedir(dir); puts("</pre><hr/></body></html>"); fsp_close_session(ses); exit(0); }