330
331 /* Check if attempting to rename a stream - not yet supported */
332 rc = smb_rename_check_stream(src_fqi, dst_fqi);
333 if (rc != 0)
334 return (rc);
335
336 /* The source node may already have been provided */
337 if (src_fqi->fq_fnode) {
338 smb_node_start_crit(src_fqi->fq_fnode, RW_READER);
339 smb_node_ref(src_fqi->fq_fnode);
340 smb_node_ref(src_fqi->fq_dnode);
341 } else {
342 /* lookup and validate src node */
343 rc = smb_rename_lookup_src(sr);
344 if (rc != 0)
345 return (rc);
346 }
347
348 src_fnode = src_fqi->fq_fnode;
349 src_dnode = src_fqi->fq_dnode;
350
351 /* Find destination dnode and last_comp */
352 if (dst_fqi->fq_dnode) {
353 smb_node_ref(dst_fqi->fq_dnode);
354 } else {
355 tnode = sr->tid_tree->t_snode;
356 rc = smb_pathname_reduce(sr, sr->user_cr, path, tnode, tnode,
357 &dst_fqi->fq_dnode, dst_fqi->fq_last_comp);
358 if (rc != 0) {
359 smb_rename_release_src(sr);
360 return (rc);
361 }
362 }
363
364 dst_dnode = dst_fqi->fq_dnode;
365 new_name = dst_fqi->fq_last_comp;
366
367 /* If exact name match in same directory, we're done */
368 if ((src_dnode == dst_dnode) &&
369 (strcmp(src_fnode->od_name, new_name) == 0)) {
370 smb_rename_release_src(sr);
371 smb_node_release(dst_dnode);
372 return (0);
373 }
374
375 /* Lookup destination node */
|
330
331 /* Check if attempting to rename a stream - not yet supported */
332 rc = smb_rename_check_stream(src_fqi, dst_fqi);
333 if (rc != 0)
334 return (rc);
335
336 /* The source node may already have been provided */
337 if (src_fqi->fq_fnode) {
338 smb_node_start_crit(src_fqi->fq_fnode, RW_READER);
339 smb_node_ref(src_fqi->fq_fnode);
340 smb_node_ref(src_fqi->fq_dnode);
341 } else {
342 /* lookup and validate src node */
343 rc = smb_rename_lookup_src(sr);
344 if (rc != 0)
345 return (rc);
346 }
347
348 src_fnode = src_fqi->fq_fnode;
349 src_dnode = src_fqi->fq_dnode;
350 tnode = sr->tid_tree->t_snode;
351
352 /* Find destination dnode and last_comp */
353 if (dst_fqi->fq_dnode) {
354 smb_node_ref(dst_fqi->fq_dnode);
355 } else {
356 rc = smb_pathname_reduce(sr, sr->user_cr, path, tnode, tnode,
357 &dst_fqi->fq_dnode, dst_fqi->fq_last_comp);
358 if (rc != 0) {
359 smb_rename_release_src(sr);
360 return (rc);
361 }
362 }
363
364 dst_dnode = dst_fqi->fq_dnode;
365 new_name = dst_fqi->fq_last_comp;
366
367 /* If exact name match in same directory, we're done */
368 if ((src_dnode == dst_dnode) &&
369 (strcmp(src_fnode->od_name, new_name) == 0)) {
370 smb_rename_release_src(sr);
371 smb_node_release(dst_dnode);
372 return (0);
373 }
374
375 /* Lookup destination node */
|