get directory name from OS instead of storing
							parent
							
								
									8ea91269cd
								
							
						
					
					
						commit
						44756b2d5c
					
				
							
								
								
									
										50
									
								
								4ed.cpp
								
								
								
								
							
							
						
						
									
										50
									
								
								4ed.cpp
								
								
								
								
							|  | @ -1724,56 +1724,6 @@ App_Step_Sig(app_step){ | |||
|         end_temp_memory(temp); | ||||
|     } | ||||
|      | ||||
| #if 0 | ||||
|     // NOTE(allen): check files are up to date
 | ||||
|     if (!input->first_step){ | ||||
|         Panel *panel = 0, *used_panels = &models->layout.used_sentinel; | ||||
|         for (dll_items(panel, used_panels)){ | ||||
|             View *view = panel->view; | ||||
|             Editing_File *file = view->file_data.file; | ||||
|              | ||||
|             terminate_with_null(&file->name.source_path); | ||||
|             u64 time_stamp = system->file_time_stamp(file->name.source_path.str); | ||||
|              | ||||
|             if (time_stamp > 0){ | ||||
|                 if (file->state.last_sync < time_stamp){ | ||||
|                     file_mark_behind_os(file); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|          | ||||
|         File_Node *node = models->working_set.sync_check_iter; | ||||
|         File_Node *used_nodes = &models->working_set.used_sentinel; | ||||
|          | ||||
|         if (node == used_nodes){ | ||||
|             node = node->next; | ||||
|         } | ||||
|         Assert(!((Editing_File*)node)->is_dummy); | ||||
|          | ||||
|         for (i32 i = 0; i < 4; ++i){ | ||||
|             if (node == used_nodes){ | ||||
|                 break; | ||||
|             } | ||||
|              | ||||
|             Editing_File *file = (Editing_File*)node; | ||||
|              | ||||
|             terminate_with_null(&file->name.source_path); | ||||
|             u64 time_stamp = system->file_time_stamp(file->name.source_path.str); | ||||
|              | ||||
|             if (time_stamp > 0){ | ||||
|                 if (file->state.last_sync < time_stamp){ | ||||
|                     file_mark_behind_os(file); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|          | ||||
|         models->working_set.sync_check_iter = node; | ||||
|     } | ||||
|     else{ | ||||
|         models->working_set.sync_check_iter = &models->working_set.used_sentinel; | ||||
|     } | ||||
| #endif | ||||
|      | ||||
|     // NOTE(allen): reorganizing panels on screen
 | ||||
|     { | ||||
|         i32 prev_width = models->layout.full_width; | ||||
|  |  | |||
|  | @ -914,6 +914,7 @@ buffer_bind_file(System_Functions *system, General_Memory *general, Working_Set | |||
|      | ||||
|     file->canon.name = make_fixed_width_string(file->canon.name_); | ||||
|     copy(&file->canon.name, canon_filename); | ||||
|     terminate_with_null(&file->canon.name); | ||||
|     system->add_listener(file->canon.name_); | ||||
|     b32 result = working_set_canon_add(general, working_set, file, file->canon.name); | ||||
|     Assert(result); AllowLocal(result); | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
| * 19.08.2015 | ||||
| * | ||||
| * File editing view for 4coder | ||||
| * | ||||
| *  | ||||
| */ | ||||
| 
 | ||||
| // TOP
 | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ typedef struct{ | |||
|     uint8_t opaque[128]; | ||||
| } File_Track_System; | ||||
| 
 | ||||
| typedef int32_t  File_Track_Result; | ||||
| typedef int32_t File_Track_Result; | ||||
| 
 | ||||
| File_Track_Result | ||||
| init_track_system(File_Track_System *system, | ||||
|  |  | |||
|  | @ -59,14 +59,6 @@ typedef struct { | |||
|     HANDLE dir; | ||||
|     int32_t user_count; | ||||
|      | ||||
|     char dir_name[512]; | ||||
|     int32_t dir_name_len; | ||||
|      | ||||
|     // TODO(allen): I am only ever using one thread
 | ||||
|     // for reading results.  So is it possible to
 | ||||
|     // have them all go through the same location
 | ||||
|     // instead of having a different 2K block
 | ||||
|     // for each directory node?
 | ||||
|     char result[2048]; | ||||
| } Directory_Listener; | ||||
| 
 | ||||
|  | @ -446,8 +438,7 @@ add_listener(File_Track_System *system, char *filename){ | |||
|          | ||||
|         // TODO(allen): make this real!
 | ||||
|         char dir_name[1024]; | ||||
|         int32_t dir_name_len = | ||||
|             internal_get_parent_name(dir_name, sizeof(dir_name), filename); | ||||
|         internal_get_parent_name(dir_name, sizeof(dir_name), filename); | ||||
|          | ||||
|         HANDLE dir = CreateFile( | ||||
|             dir_name, | ||||
|  | @ -484,14 +475,6 @@ add_listener(File_Track_System *system, char *filename){ | |||
|                                     node->listener.dir = dir; | ||||
|                                     node->listener.user_count = 1; | ||||
|                                      | ||||
|                                     // TODO(allen): make this real!
 | ||||
|                                     Assert(dir_name_len < sizeof(node->listener.dir_name)); | ||||
|                                     for (int32_t i = 0; i < dir_name_len; ++i){ | ||||
|                                         node->listener.dir_name[i] = dir_name[i]; | ||||
|                                     } | ||||
|                                     node->listener.dir_name[dir_name_len] = 0; | ||||
|                                     node->listener.dir_name_len = dir_name_len; | ||||
|                                      | ||||
|                                     dir_lookup.entry->hash = dir_hash; | ||||
|                                     dir_lookup.entry->dir = dir; | ||||
|                                     dir_lookup.entry->listener_node = node; | ||||
|  | @ -722,21 +705,26 @@ get_change_event(File_Track_System *system, char *buffer, int32_t max, int32_t * | |||
|                 info = (FILE_NOTIFY_INFORMATION*)(listener_buffer + offset); | ||||
|                  | ||||
|                 int32_t len = info->FileNameLength / 2; | ||||
|                 int32_t req_size = listener.dir_name_len + 1 + len; | ||||
|                 int32_t dir_len =GetFinalPathNameByHandle(listener.dir, 0, 0, FILE_NAME_NORMALIZED); | ||||
|                 int32_t req_size = dir_len + 1 + len; | ||||
|                 *size = req_size; | ||||
|                 if (req_size < max){ | ||||
|                     int32_t pos = 0; | ||||
|                     char *src = listener.dir_name; | ||||
|                     for (int32_t i = 0; src[i]; ++i, ++pos){ | ||||
|                         buffer[pos] = src[i]; | ||||
|                     } | ||||
|                      | ||||
|                     pos = GetFinalPathNameByHandle(listener.dir, buffer, max, FILE_NAME_NORMALIZED); | ||||
|                     buffer[pos++] = '/'; | ||||
|                      | ||||
|                     for (int32_t i = 0; i < len; ++i, ++pos){ | ||||
|                         buffer[pos] = (char)info->FileName[i]; | ||||
|                     } | ||||
|                      | ||||
|                     if (buffer[0] == '\\'){ | ||||
|                         for (int32_t i = 0; i+4 < pos; ++i){ | ||||
|                             buffer[i] = buffer[i+4]; | ||||
|                         } | ||||
|                         *size -= 4; | ||||
|                     } | ||||
|                      | ||||
|                     result = FileTrack_Good; | ||||
|                 } | ||||
|                 else{ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Allen Webster
						Allen Webster