From 2af30e9b2988111e45ed6ea6af55e49ec7cb1cb1 Mon Sep 17 00:00:00 2001
From: Andrea Adami <andrea.adami@gmail.com>
Date: Sun, 29 Jun 2014 00:44:57 +0200
Subject: [PATCH 6/9] libiniparser: remove unused function needing float

Fixes:
|   LD      ubi-utils/ubiformat
| .../git/ubi-utils/libiniparser.a(libiniparser.o): In function
| `  LD      ubi-utils/ubirename
| iniparser_getdouble':
| .../git/ubi-utils/libiniparser.c:336: undefined reference to `atof'

Grep doesn't reveal any occurrence of iniparser_getdouble(), using atof() so
remove it: floating-point is not supported in klibc

Upstream-Status: Accepted

Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
---
 ubi-utils/include/libiniparser.h | 15 ---------------
 ubi-utils/libiniparser.c         | 22 ----------------------
 2 files changed, 37 deletions(-)

diff --git a/ubi-utils/include/libiniparser.h b/ubi-utils/include/libiniparser.h
index be3c667..abd77aa 100644
--- a/ubi-utils/include/libiniparser.h
+++ b/ubi-utils/include/libiniparser.h
@@ -158,21 +158,6 @@ int iniparser_getint(dictionary * d, const char * key, int notfound);
 
 /*-------------------------------------------------------------------------*/
 /**
-  @brief    Get the string associated to a key, convert to a double
-  @param    d Dictionary to search
-  @param    key Key string to look for
-  @param    notfound Value to return in case of error
-  @return   double
-
-  This function queries a dictionary for a key. A key as read from an
-  ini file is given as "section:key". If the key cannot be found,
-  the notfound value is returned.
- */
-/*--------------------------------------------------------------------------*/
-double iniparser_getdouble(dictionary * d, char * key, double notfound);
-
-/*-------------------------------------------------------------------------*/
-/**
   @brief    Get the string associated to a key, convert to a boolean
   @param    d Dictionary to search
   @param    key Key string to look for
diff --git a/ubi-utils/libiniparser.c b/ubi-utils/libiniparser.c
index 898f57f..ba70c08 100644
--- a/ubi-utils/libiniparser.c
+++ b/ubi-utils/libiniparser.c
@@ -316,28 +316,6 @@ int iniparser_getint(dictionary * d, const char * key, int notfound)
 
 /*-------------------------------------------------------------------------*/
 /**
-  @brief    Get the string associated to a key, convert to a double
-  @param    d Dictionary to search
-  @param    key Key string to look for
-  @param    notfound Value to return in case of error
-  @return   double
-
-  This function queries a dictionary for a key. A key as read from an
-  ini file is given as "section:key". If the key cannot be found,
-  the notfound value is returned.
- */
-/*--------------------------------------------------------------------------*/
-double iniparser_getdouble(dictionary * d, char * key, double notfound)
-{
-    char    *   str ;
-
-    str = iniparser_getstring(d, key, INI_INVALID_KEY);
-    if (str==INI_INVALID_KEY) return notfound ;
-    return atof(str);
-}
-
-/*-------------------------------------------------------------------------*/
-/**
   @brief    Get the string associated to a key, convert to a boolean
   @param    d Dictionary to search
   @param    key Key string to look for
-- 
2.7.4

