1e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes/*	$NetBSD: utime.c,v 1.14 2012/06/25 22:32:44 abs Exp $	*/
2e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes
31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*-
41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (c) 1990, 1993
51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *	The Regents of the University of California.  All rights reserved.
61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without
81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions
91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met:
101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    documentation and/or other materials provided with the distribution.
15e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes * 3. Neither the name of the University nor the names of its contributors
161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    may be used to endorse or promote products derived from this software
171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    without specific prior written permission.
181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE.
301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
32e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes#include <sys/cdefs.h>
331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if defined(LIBC_SCCS) && !defined(lint)
34e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes#if 0
351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic char sccsid[] = "@(#)utime.c	8.1 (Berkeley) 6/4/93";
36e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes#else
37e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes__RCSID("$NetBSD: utime.c,v 1.14 2012/06/25 22:32:44 abs Exp $");
38e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes#endif
391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* LIBC_SCCS and not lint */
401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
41e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes#include "namespace.h"
421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/time.h>
431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
44e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes#include <assert.h>
45e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes#include <errno.h>
46e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes#include <stddef.h>
471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <utime.h>
481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint
50e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughesutime(const char *path, const struct utimbuf *times)
511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct timeval tv[2], *tvp;
531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
54e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes	_DIAGASSERT(path != NULL);
55e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes
56e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes	if (times == (struct utimbuf *) NULL)
57e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes		tvp = NULL;
58e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes	else {
591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		tv[0].tv_sec = times->actime;
601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		tv[1].tv_sec = times->modtime;
611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		tv[0].tv_usec = tv[1].tv_usec = 0;
621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		tvp = tv;
63e8bcca3a2ca4a70156c72239d62bb68eeb2929fdElliott Hughes	}
641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	return (utimes(path, tvp));
651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
66