1ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes/*	$NetBSD: lldiv.c,v 1.4 2012/06/25 22:32:45 abs Exp $	*/
2ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes
31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
4ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes * Copyright (c) 1990, 1993
5ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes *	The Regents of the University of California.  All rights reserved.
61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * This code is derived from software contributed to Berkeley by
81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Chris Torek.
91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without
111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions
121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met:
131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    documentation and/or other materials provided with the distribution.
181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 3. Neither the name of the University nor the names of its contributors
191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    may be used to endorse or promote products derived from this software
201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    without specific prior written permission.
211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE.
331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
35ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes#include <sys/cdefs.h>
36ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes#if defined(LIBC_SCCS) && !defined(lint)
37ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes#if 0
38ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughesstatic char sccsid[] = "from: @(#)ldiv.c	8.1 (Berkeley) 6/4/93";
39ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes#else
40ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes__RCSID("$NetBSD: lldiv.c,v 1.4 2012/06/25 22:32:45 abs Exp $");
41ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes#endif
42ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes#endif /* LIBC_SCCS and not lint */
43ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes
44ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes#include "namespace.h"
451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <stdlib.h>		/* lldiv_t */
461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
47ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes#ifdef __weak_alias
48ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes__weak_alias(lldiv, _lldiv)
49ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes#endif
50ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes
51ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hughes/* LONGLONG */
521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectlldiv_t
53ab44f52202878cdf2bf22457aeae33ec24089556Elliott Hugheslldiv(long long int num, long long int denom)
541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	lldiv_t r;
561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* see div.c for comments */
581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	r.quot = num / denom;
601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	r.rem = num % denom;
611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	if (num >= 0 && r.rem < 0) {
621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		r.quot++;
631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		r.rem -= denom;
641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	}
651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	return (r);
661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
67