static GnomeVFSResult do_read_directory (GnomeVFSMethod *method, GnomeVFSMethodHandle *method_handle, GnomeVFSFileInfo *file_info, GnomeVFSContext *context) { PERFORM_OPERATION_NO_URI (read_directory, gnome_vfs_directory_read_next ((GnomeVFSDirectoryHandle *) method_handle, file_info)); }
void populate_tree_model (GtkListStore *model) { GnomeVFSDirectoryHandle *handle; GnomeVFSFileInfo *info; GnomeVFSResult res; GtkTreeIter iter; // GValue *value; #define URI "/" gnome_vfs_init(); res = gnome_vfs_directory_open (&handle, URI, GNOME_VFS_FILE_INFO_DEFAULT); if (res) goto error; for (;;) { info = gnome_vfs_file_info_new (); res = gnome_vfs_directory_read_next (handle, info); if (res == GNOME_VFS_ERROR_EOF) break; if (res && res != GNOME_VFS_ERROR_EOF) { gnome_vfs_file_info_unref (info); goto error; } puts(info->name); // value = g_new0 (GValue, 1); // g_value_init (value, G_TYPE_POINTER); // g_value_set_pointer (value, info); gtk_list_store_append (GTK_LIST_STORE(model), &iter); /** ?? **/ // gtk_list_store_set_value (GTK_LIST_STORE(model), &iter, COLUMN_ONE, value); // gtk_list_store_set (model, &iter, COLUMN_ONE, info->name, -1); gtk_list_store_set (model, &iter, COLUMN_ONE, info, COLUMN_TWO, 0, -1); } goto done; error: puts(gnome_vfs_result_to_string (res)); done: gnome_vfs_directory_close (handle); }
static int send_directory(tcp_con_t *con,const char *top_dir,const char *basename,GnomeVFSFileInfo *info){ int rc; char *uri; GnomeVFSResult res; GnomeVFSDirectoryHandle *handle; char *next_dir; char *res_message; if ( (!top_dir) || (!info) || (!basename) ) return -EINVAL; rc=create_response(IPMSG_FILE_DIR,info->name,info->size,top_dir,&res_message); if (rc<0) return rc; dbg_out("Send dir:%s (%s)\n",res_message,top_dir); rc=send_header(con,res_message); g_free(res_message); if (rc<0) return rc; uri=gnome_vfs_get_uri_from_local_path(top_dir); if (!uri) return -ENOMEM; /* *ファイルを送付 */ res=gnome_vfs_directory_open(&handle,uri,GNOME_VFS_FILE_INFO_FOLLOW_LINKS); res=gnome_vfs_directory_read_next(handle,info); while (res==GNOME_VFS_OK) { read_directory_files(con,top_dir,info); res=gnome_vfs_directory_read_next(handle,info); } gnome_vfs_directory_close(handle); /* *ディレクトリを送付 */ res=gnome_vfs_directory_open(&handle,uri,GNOME_VFS_FILE_INFO_FOLLOW_LINKS); if (res!=GNOME_VFS_OK) { err_out("Can not open dir:%s %s (%d)\n", top_dir, gnome_vfs_result_to_string(res), res); goto error_out; } res=gnome_vfs_directory_read_next(handle,info); if (res!=GNOME_VFS_OK) { if (res != GNOME_VFS_ERROR_EOF) err_out("Can not read next dir:%s %s (%d)\n", top_dir, gnome_vfs_result_to_string(res), res); goto error_out; } while (res==GNOME_VFS_OK) { if ( (info->type==GNOME_VFS_FILE_TYPE_DIRECTORY) && ( (strcmp(info->name,"..")) && (strcmp(info->name,"."))) ){ dbg_out("dir:%s\n",info->name); next_dir=g_build_filename(top_dir,info->name,NULL); if (!next_dir) goto error_out; rc=send_directory(con,next_dir,info->name,info); g_free(next_dir); if (rc<0) return rc; rc=create_response(IPMSG_FILE_RETPARENT,info->name,info->size,top_dir,&res_message); if (rc<0) return rc; dbg_out("Send ret parent:%s\n",res_message); rc=send_header(con,res_message); g_free(res_message); if (rc<0) return rc; } res=gnome_vfs_directory_read_next(handle,info); if (res!=GNOME_VFS_OK) { if (res != GNOME_VFS_ERROR_EOF) err_out("Can not read next dir:%s %s (%d)\n", top_dir, gnome_vfs_result_to_string(res), res); goto error_out; } } error_out: gnome_vfs_directory_close(handle); g_free(uri); return rc; }