Author: SATOH Fumiyasu <fumiyas@osstech.co.jp>
Date: Wed Dec 17 00:42:25 2008 +0900
libsmbclient: Fix SIGBUS on non-x86 CPUs
We must align the struct smbc_dirent in the struct
SMBC_internal_data because the struct smbc_dirent
has numeric values that require alignment.
Signed-off-by: Derrell Lipman <derrell.lipman@unwireduniverse.com>
/* True when this handle is initialized */
bool initialized;
/* True when this handle is initialized */
bool initialized;
- /* dirent pointer location
- *
+ /* dirent pointer location */
+ struct smbc_dirent dirent;
+ /*
* Leave room for any urlencoded filename and the comment field.
*
* Leave room for any urlencoded filename and the comment field.
*
- * We really should use sizeof(struct smbc_dirent) plus (NAME_MAX * 3)
- * plus whatever the max length of a comment is, plus a couple of null
- * terminators (one after the filename, one after the comment).
+ * We use (NAME_MAX * 3) plus whatever the max length of a comment is,
+ * plus a couple of null terminators (one after the filename,
+ * one after the comment).
*
* According to <linux/limits.h>, NAME_MAX is 255. Is it longer
* anyplace else?
*/
*
* According to <linux/limits.h>, NAME_MAX is 255. Is it longer
* anyplace else?
*/
+ char _dirent_name[1024];
/*
* server connection list
/*
* server connection list
- dirp = (struct smbc_dirent *)context->internal->dirent;
- maxlen = (sizeof(context->internal->dirent) -
- sizeof(struct smbc_dirent));
+ dirp = &context->internal->dirent;
+ maxlen = sizeof(context->internal->_dirent_name);
smbc_readdir_internal(context, dirp, dirent, maxlen);
smbc_readdir_internal(context, dirp, dirent, maxlen);
}
/* Do urlencoding of next entry, if so selected */
}
/* Do urlencoding of next entry, if so selected */
- dirent = (struct smbc_dirent *)context->internal->dirent;
- maxlen = (sizeof(context->internal->dirent) -
- sizeof(struct smbc_dirent));
+ dirent = &context->internal->dirent;
+ maxlen = sizeof(context->internal->_dirent_name);
smbc_readdir_internal(context, dirent,
dirlist->dirent, maxlen);
smbc_readdir_internal(context, dirent,
dirlist->dirent, maxlen);