For the xenix_ftime() routine, don't use the native version of the struct --

the XENIX version is packed, and two bytes smaller than ours.  So, define
the structure, and have it packed.  I used the __attribte__((packed))
modifier for this; I could also have surrounded the struct definition with
#pragma pack(2) -- but that would have meant making ibcs2_timeb's definition
outside the function.  This may need to be revisited if we ever want to
compile with a compiler other than gcc.  (I also used 'unsigned long'
instead of 'time_t' because I am writing to match an external specification
-- and the definition of time_t could change.)

Reviewed by:	Steven Wallace
This commit is contained in:
Sean Eric Fagan 1997-06-22 19:04:03 +00:00
parent 3fe1f92329
commit c6d139318e

View File

@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: ibcs2_xenix.c,v 1.10 1997/03/24 11:37:49 bde Exp $
* $Id: ibcs2_xenix.c,v 1.11 1997/05/07 20:05:45 peter Exp $
*/
#include <sys/param.h>
@ -119,7 +119,12 @@ xenix_ftime(p, uap, retval)
int *retval;
{
struct timeval tv;
struct timeb itb;
struct ibcs2_timeb {
unsigned long time __attribute__((packed));
unsigned short millitm;
short timezone;
short dstflag;
} itb;
DPRINTF(("IBCS2: 'xenix ftime'\n"));
microtime(&tv);
@ -129,7 +134,7 @@ xenix_ftime(p, uap, retval)
itb.dstflag = tz.tz_dsttime != DST_NONE;
return copyout((caddr_t)&itb, (caddr_t)SCARG(uap, tp),
sizeof(struct timeb));
sizeof(struct ibcs2_timeb));
}
int