- sp_len = strlen(lck->servicepath);
- delete_token_size = (lck->delete_token ?
- (sizeof(uid_t) + sizeof(gid_t) + (lck->delete_token->ngroups*sizeof(gid_t))) : 0);
-
- result.dsize = sizeof(*data) +
- lck->num_share_modes * sizeof(struct share_mode_entry) +
- delete_token_size +
- sp_len + 1 +
- strlen(lck->filename) + 1;
- result.dptr = TALLOC_ARRAY(lck, uint8, result.dsize);
-
- if (result.dptr == NULL) {
- smb_panic("talloc failed");
- }
-
- data = (struct locking_data *)result.dptr;
- ZERO_STRUCTP(data);
- data->u.s.num_share_mode_entries = lck->num_share_modes;
- data->u.s.delete_on_close = lck->delete_on_close;
- data->u.s.old_write_time = lck->old_write_time;
- data->u.s.changed_write_time = lck->changed_write_time;
- data->u.s.delete_token_size = delete_token_size;
-
- DEBUG(10,("unparse_share_modes: del: %d, owrt: %s cwrt: %s, tok: %u, "
- "num: %d\n", data->u.s.delete_on_close,
- timestring(debug_ctx(),
- convert_timespec_to_time_t(lck->old_write_time)),
- timestring(debug_ctx(),
- convert_timespec_to_time_t(
- lck->changed_write_time)),
- (unsigned int)data->u.s.delete_token_size,
- data->u.s.num_share_mode_entries));
-
- memcpy(result.dptr + sizeof(*data), lck->share_modes,
- sizeof(struct share_mode_entry)*lck->num_share_modes);
- offset = sizeof(*data) +
- sizeof(struct share_mode_entry)*lck->num_share_modes;
-
- /* Store any delete on close token. */
- if (lck->delete_token) {
- uint8 *p = result.dptr + offset;
-
- memcpy(p, &lck->delete_token->uid, sizeof(uid_t));
- p += sizeof(uid_t);
-
- memcpy(p, &lck->delete_token->gid, sizeof(gid_t));
- p += sizeof(gid_t);
-
- for (i = 0; i < lck->delete_token->ngroups; i++) {
- memcpy(p, &lck->delete_token->groups[i], sizeof(gid_t));
- p += sizeof(gid_t);
- }
- offset = p - result.dptr;