bool *converted_xattr)
{
static struct char_mappings **string_replace_cmaps = NULL;
- char *map = MAP_FAILED;
- size_t maplen;
uint16_t i;
- ssize_t len;
int saved_errno = 0;
NTSTATUS status;
int rc;
TALLOC_FREE(mappings);
}
- maplen = ad_getentryoff(ad, ADEID_RFORK) +
- ad_getentrylen(ad, ADEID_RFORK);
-
- /* FIXME: direct use of mmap(), vfs_aio_fork does it too */
- map = mmap(NULL, maplen, PROT_READ|PROT_WRITE, MAP_SHARED,
- ad->ad_fsp->fh->fd, 0);
- if (map == MAP_FAILED) {
- DBG_ERR("mmap AppleDouble: %s\n", strerror(errno));
- return false;
- }
-
for (i = 0; i < ad->adx_header.adx_num_attrs; i++) {
struct ad_xattr_entry *e = &ad->adx_entries[i];
char *mapped_name = NULL;
}
nwritten = SMB_VFS_PWRITE(fsp,
- map + e->adx_offset,
+ ad->ad_data + e->adx_offset,
e->adx_length,
0);
if (nwritten == -1) {
goto fail;
}
- len = sys_pwrite(ad->ad_fsp->fh->fd, ad->ad_data, AD_DATASZ_DOT_UND, 0);
- if (len != AD_DATASZ_DOT_UND) {
- DBG_ERR("%s: bad size: %zd\n", smb_fname->base_name, len);
+ rc = ad_fset(handle, ad, ad->ad_fsp);
+ if (rc != 0) {
+ DBG_ERR("ad_fset on [%s] failed: %s\n",
+ fsp_str_dbg(ad->ad_fsp), strerror(errno));
ok = false;
goto fail;
}
ok = true;
fail:
- rc = munmap(map, maplen);
- if (rc != 0) {
- DBG_ERR("munmap failed: %s\n", strerror(errno));
- return false;
- }
-
return ok;
}
return true;
}
-static bool ad_convert_truncate(struct adouble *ad,
+static bool ad_convert_truncate(vfs_handle_struct *handle,
+ struct adouble *ad,
const struct smb_filename *smb_fname)
{
int rc;
+ off_t newlen;
- /*
- * FIXME: direct ftruncate(), but we don't have a fsp for the
- * VFS call
- */
- rc = ftruncate(ad->ad_fsp->fh->fd, ADEDOFF_RFORK_DOT_UND +
- ad_getentrylen(ad, ADEID_RFORK));
+ newlen = ADEDOFF_RFORK_DOT_UND + ad_getentrylen(ad, ADEID_RFORK);
+
+ rc = SMB_VFS_FTRUNCATE(ad->ad_fsp, newlen);
if (rc != 0) {
return false;
}
}
if (converted_xattr || blank) {
- ok = ad_convert_truncate(ad, smb_fname);
+ ok = ad_convert_truncate(handle, ad, smb_fname);
if (!ok) {
ret = -1;
goto done;