1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #pragma ident "@(#)utils.c 1.7 09/05/26 SMI" 28 29 #include <sys/types.h> 30 #include <unistd.h> 31 #include <fcntl.h> 32 #include "utils.h" 33 34 /* 35 * Push the file descriptor above 255 to get above stdio 36 */ 37 int 38 get_high_fd(int fdin) 39 { 40 int newfd; 41 42 if (fdin < 0) 43 return (fdin); 44 45 if ((newfd = fcntl(fdin, F_DUPFD, 0xff)) != -1) { 46 (void) close(fdin); 47 return (newfd); 48 } else 49 return (fdin); 50 } 51 52 /* 53 * Return the greatest common divisor of two numbers. 54 * See: Euclidean algorithm. 55 */ 56 int 57 gcd(int one, int two) 58 { 59 int rem; 60 61 if (one < two) { 62 return (gcd(two, one)); 63 } 64 65 rem = one % two; 66 while (rem != 0) { 67 one = two; 68 two = rem; 69 rem = one % two; 70 } 71 return (two); 72 } 73