Changeset 30150 in vbox for trunk/src/VBox/Additions/linux/sharedfolders/dirops.c
- Timestamp:
- Jun 10, 2010 4:05:56 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 62572
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/linux/sharedfolders/dirops.c
r28998 r30150 122 122 struct sf_glob_info *sf_g; 123 123 struct sf_dir_info *sf_d; 124 struct sf_inode_info *sf_i; 125 struct inode *inode; 124 126 struct list_head *pos, *list; 125 127 126 128 TRACE (); 129 127 130 sf_g = GET_GLOB_INFO (dir->f_dentry->d_inode->i_sb); 128 131 sf_d = dir->private_data; … … 131 134 BUG_ON (!sf_d); 132 135 136 inode = dir->f_dentry->d_inode; 137 sf_i = GET_INODE_INFO(inode); 138 139 BUG_ON (!sf_i); 140 141 if (sf_i->force_reread) 142 { 143 int rc; 144 int err; 145 SHFLCREATEPARMS params; 146 147 RT_ZERO(params); 148 149 params.CreateFlags = 0 150 | SHFL_CF_DIRECTORY 151 | SHFL_CF_ACT_OPEN_IF_EXISTS 152 | SHFL_CF_ACT_FAIL_IF_NEW 153 | SHFL_CF_ACCESS_READ 154 ; 155 156 LogFunc(("sf_getdent: calling vboxCallCreate, folder %s, flags %#x\n", 157 sf_i->path->String.utf8, params.CreateFlags)); 158 rc = vboxCallCreate (&client_handle, &sf_g->map, sf_i->path, ¶ms); 159 if (RT_FAILURE (rc)) { 160 LogRel(("open failed %d\n", rc)); 161 LogFunc(("vboxCallCreate(%s) failed rc=%Rrc\n", 162 sf_i->path->String.utf8, rc)); 163 return -EPERM; 164 } 165 166 if (params.Result != SHFL_FILE_EXISTS) { 167 LogRel(("not exist %x\n", params.Result)); 168 LogFunc(("directory %s does not exist\n", sf_i->path->String.utf8)); 169 sf_dir_info_free (sf_d); 170 return -ENOENT; 171 } 172 173 sf_dir_info_empty (sf_d); 174 err = sf_dir_read_all (sf_g, sf_i, sf_d, params.Handle); 175 rc = vboxCallClose (&client_handle, &sf_g->map, params.Handle); 176 if (RT_FAILURE (rc)) { 177 LogFunc(("vboxCallClose(%s) failed rc=%Rrc\n", 178 sf_i->path->String.utf8, rc)); 179 } 180 if (err) 181 return err; 182 sf_i->force_reread = 0; 183 } 184 133 185 cur = 0; 134 186 list = &sf_d->info_list; … … 531 583 } 532 584 585 /* directory access/change time changed */ 586 sf_i->force_restat = 1; 587 /* directory content changed */ 588 sf_i->force_reread = 1; 533 589 kfree (path); 534 590 return 0;
Note:
See TracChangeset
for help on using the changeset viewer.