Fix path conversion. Convert path in dir info.
This commit is contained in:
parent
69d636860d
commit
32fdcdc660
@ -207,7 +207,7 @@ int guac_rdpdr_fs_open(guac_rdpdr_device* device, const char* path,
|
|||||||
file = &(data->files[file_id]);
|
file = &(data->files[file_id]);
|
||||||
file->fd = fd;
|
file->fd = fd;
|
||||||
file->dir = NULL;
|
file->dir = NULL;
|
||||||
file->absolute_path = strdup(path);
|
file->absolute_path = strdup(normalized_path);
|
||||||
|
|
||||||
/* Attempt to pull file information */
|
/* Attempt to pull file information */
|
||||||
if (fstat(fd, &file_stat) == 0) {
|
if (fstat(fd, &file_stat) == 0) {
|
||||||
@ -341,7 +341,8 @@ int guac_rdpdr_fs_normalize_path(const char* path, char* abs_path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Otherwise, if component not current directory, add to list */
|
/* Otherwise, if component not current directory, add to list */
|
||||||
else if (strcmp(current_path_component_data, ".") != 0)
|
else if (strcmp(current_path_component_data, ".") != 0
|
||||||
|
&& strcmp(current_path_component_data, "") != 0)
|
||||||
path_components[path_depth++] = current_path_component_data;
|
path_components[path_depth++] = current_path_component_data;
|
||||||
|
|
||||||
/* If end of string, stop */
|
/* If end of string, stop */
|
||||||
@ -355,9 +356,11 @@ int guac_rdpdr_fs_normalize_path(const char* path, char* abs_path) {
|
|||||||
|
|
||||||
} /* end for each character */
|
} /* end for each character */
|
||||||
|
|
||||||
/* If no components, the path could not be parsed */
|
/* If no components, the path is simply root */
|
||||||
if (path_depth == 0)
|
if (path_depth == 0) {
|
||||||
return 1;
|
strcpy(abs_path, "\\");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Ensure last component is null-terminated */
|
/* Ensure last component is null-terminated */
|
||||||
path_component_data[i] = 0;
|
path_component_data[i] = 0;
|
||||||
@ -383,7 +386,30 @@ int guac_rdpdr_fs_normalize_path(const char* path, char* abs_path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int guac_rdpdr_fs_convert_path(const char* parent, const char* rel_path, char* abs_path) {
|
int guac_rdpdr_fs_convert_path(const char* parent, const char* rel_path, char* abs_path) {
|
||||||
/* STUB */
|
|
||||||
return 0;
|
int i;
|
||||||
|
char combined_path[GUAC_RDPDR_FS_MAX_PATH];
|
||||||
|
char* current = combined_path;
|
||||||
|
|
||||||
|
/* Copy parent path */
|
||||||
|
for (i=0; i<GUAC_RDPDR_FS_MAX_PATH; i++) {
|
||||||
|
|
||||||
|
char c = *(parent++);
|
||||||
|
if (c == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
*(current++) = c;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add trailing slash */
|
||||||
|
*(current++) = '\\';
|
||||||
|
|
||||||
|
/* Copy remaining path */
|
||||||
|
strncpy(current, rel_path, GUAC_RDPDR_FS_MAX_PATH-i);
|
||||||
|
|
||||||
|
/* Normalize into provided buffer */
|
||||||
|
return guac_rdpdr_fs_normalize_path(combined_path, abs_path);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -275,6 +275,8 @@ void guac_rdpdr_fs_process_notify_change_directory(guac_rdpdr_device* device,
|
|||||||
void guac_rdpdr_fs_process_query_directory(guac_rdpdr_device* device, wStream* input_stream,
|
void guac_rdpdr_fs_process_query_directory(guac_rdpdr_device* device, wStream* input_stream,
|
||||||
int file_id, int completion_id) {
|
int file_id, int completion_id) {
|
||||||
|
|
||||||
|
guac_rdpdr_fs_data* data = (guac_rdpdr_fs_data*) device->data;
|
||||||
|
guac_rdpdr_fs_file* file = &(data->files[file_id]);
|
||||||
int fs_information_class, initial_query;
|
int fs_information_class, initial_query;
|
||||||
int path_length;
|
int path_length;
|
||||||
|
|
||||||
@ -307,7 +309,13 @@ void guac_rdpdr_fs_process_query_directory(guac_rdpdr_device* device, wStream* i
|
|||||||
entry_name = guac_rdpdr_fs_read_dir(device, file_id);
|
entry_name = guac_rdpdr_fs_read_dir(device, file_id);
|
||||||
if (entry_name != NULL) {
|
if (entry_name != NULL) {
|
||||||
|
|
||||||
guac_client_log_info(device->rdpdr->client, "NAME: %s", entry_name);
|
/* Convert to absolute path */
|
||||||
|
char entry_path[GUAC_RDPDR_FS_MAX_PATH];
|
||||||
|
if (guac_rdpdr_fs_convert_path(file->absolute_path, entry_name, entry_path))
|
||||||
|
guac_client_log_info(device->rdpdr->client, "Conversion failed"); /* FIXME: Return ENOENT */
|
||||||
|
|
||||||
|
guac_client_log_info(device->rdpdr->client, "parent=\"%s\", name=\"%s\", path=\"%s\"",
|
||||||
|
file->absolute_path, entry_name, entry_path);
|
||||||
|
|
||||||
/* Dispatch to appropriate class-specific handler */
|
/* Dispatch to appropriate class-specific handler */
|
||||||
switch (fs_information_class) {
|
switch (fs_information_class) {
|
||||||
|
Loading…
Reference in New Issue
Block a user