1/* mpq_inp_str -- read an mpq from a FILE. 2 3Copyright 2001 Free Software Foundation, Inc. 4 5This file is part of the GNU MP Library. 6 7The GNU MP Library is free software; you can redistribute it and/or modify 8it under the terms of the GNU Lesser General Public License as published by 9the Free Software Foundation; either version 3 of the License, or (at your 10option) any later version. 11 12The GNU MP Library is distributed in the hope that it will be useful, but 13WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 14or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 15License for more details. 16 17You should have received a copy of the GNU Lesser General Public License 18along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */ 19 20#include <stdio.h> 21#include <ctype.h> 22#include "gmp.h" 23#include "gmp-impl.h" 24 25 26size_t 27mpq_inp_str (mpq_ptr q, FILE *fp, int base) 28{ 29 size_t nread; 30 int c; 31 32 if (fp == NULL) 33 fp = stdin; 34 35 q->_mp_den._mp_size = 1; 36 q->_mp_den._mp_d[0] = 1; 37 38 nread = mpz_inp_str (mpq_numref(q), fp, base); 39 if (nread == 0) 40 return 0; 41 42 c = getc (fp); 43 nread++; 44 45 if (c == '/') 46 { 47 c = getc (fp); 48 nread++; 49 50 nread = mpz_inp_str_nowhite (mpq_denref(q), fp, base, c, nread); 51 if (nread == 0) 52 { 53 q->_mp_num._mp_size = 0; 54 q->_mp_den._mp_size = 1; 55 q->_mp_den._mp_d[0] = 1; 56 } 57 } 58 else 59 { 60 ungetc (c, fp); 61 nread--; 62 } 63 64 return nread; 65} 66