Home | History | Annotate | Download | only in utils
      1 /* Copyright (c) 2014, The Linux Foundation. All rights reserved.
      2  *
      3  * Redistribution and use in source and binary forms, with or without
      4  * modification, are permitted provided that the following conditions are
      5  * met:
      6  *     * Redistributions of source code must retain the above copyright
      7  *       notice, this list of conditions and the following disclaimer.
      8  *     * Redistributions in binary form must reproduce the above
      9  *       copyright notice, this list of conditions and the following
     10  *       disclaimer in the documentation and/or other materials provided
     11  *       with the distribution.
     12  *     * Neither the name of The Linux Foundation, nor the names of its
     13  *       contributors may be used to endorse or promote products derived
     14  *       from this software without specific prior written permission.
     15  *
     16  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
     17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
     19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
     20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
     23  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     24  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     25  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
     26  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  *
     28  */
     29 #define LOG_NDEBUG 0
     30 #define LOG_TAG "LocSvc_misc_utils"
     31 #include <stdio.h>
     32 #include <string.h>
     33 #include <platform_lib_log_util.h>
     34 #include <loc_misc_utils.h>
     35 #include <ctype.h>
     36 
     37 
     38 int loc_util_split_string(char *raw_string, char **split_strings_ptr,
     39                           int max_num_substrings, char delimiter)
     40 {
     41     int raw_string_index=0;
     42     int num_split_strings=0;
     43     unsigned char end_string=0;
     44     int raw_string_length=0;
     45 
     46     if(!raw_string || !split_strings_ptr) {
     47         LOC_LOGE("%s:%d]: NULL parameters", __func__, __LINE__);
     48         num_split_strings = -1;
     49         goto err;
     50     }
     51     LOC_LOGD("%s:%d]: raw string: %s\n", __func__, __LINE__, raw_string);
     52     raw_string_length = strlen(raw_string) + 1;
     53     split_strings_ptr[num_split_strings] = &raw_string[raw_string_index];
     54     for(raw_string_index=0; raw_string_index < raw_string_length; raw_string_index++) {
     55         if(raw_string[raw_string_index] == '\0')
     56             end_string=1;
     57         if((raw_string[raw_string_index] == delimiter) || end_string) {
     58             raw_string[raw_string_index] = '\0';
     59             LOC_LOGD("%s:%d]: split string: %s\n",
     60                      __func__, __LINE__, split_strings_ptr[num_split_strings]);
     61             num_split_strings++;
     62             if(((raw_string_index + 1) < raw_string_length) &&
     63                (num_split_strings < max_num_substrings)) {
     64                 split_strings_ptr[num_split_strings] = &raw_string[raw_string_index+1];
     65             }
     66             else {
     67                 break;
     68             }
     69         }
     70         if(end_string)
     71             break;
     72     }
     73 err:
     74     LOC_LOGD("%s:%d]: num_split_strings: %d\n", __func__, __LINE__, num_split_strings);
     75     return num_split_strings;
     76 }
     77 
     78 void loc_util_trim_space(char *org_string)
     79 {
     80     char *scan_ptr, *write_ptr;
     81     char *first_nonspace = NULL, *last_nonspace = NULL;
     82 
     83     if(org_string == NULL) {
     84         LOC_LOGE("%s:%d]: NULL parameter", __func__, __LINE__);
     85         goto err;
     86     }
     87 
     88     scan_ptr = write_ptr = org_string;
     89 
     90     while (*scan_ptr) {
     91         //Find the first non-space character
     92         if ( !isspace(*scan_ptr) && first_nonspace == NULL) {
     93             first_nonspace = scan_ptr;
     94         }
     95         //Once the first non-space character is found in the
     96         //above check, keep shifting the characters to the left
     97         //to replace the spaces
     98         if (first_nonspace != NULL) {
     99             *(write_ptr++) = *scan_ptr;
    100             //Keep track of which was the last non-space character
    101             //encountered
    102             //last_nonspace will not be updated in the case where
    103             //the string ends with spaces
    104             if ( !isspace(*scan_ptr)) {
    105                 last_nonspace = write_ptr;
    106             }
    107         }
    108         scan_ptr++;
    109     }
    110     //Add NULL terminator after the last non-space character
    111     if (last_nonspace) { *last_nonspace = '\0'; }
    112 err:
    113     return;
    114 }
    115