Home | History | Annotate | Download | only in utils
      1 // Copyright 2014 The Android Open Source Project
      2 //
      3 // This software is licensed under the terms of the GNU General Public
      4 // License version 2, as published by the Free Software Foundation, and
      5 // may be copied, distributed, and modified under those terms.
      6 //
      7 // This program is distributed in the hope that it will be useful,
      8 // but WITHOUT ANY WARRANTY; without even the implied warranty of
      9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     10 // GNU General Public License for more details.
     11 
     12 #ifndef ANDROID_UTILS_PROPERTY_FILE_H
     13 #define ANDROID_UTILS_PROPERTY_FILE_H
     14 
     15 #include <stdbool.h>
     16 #include <stddef.h>
     17 
     18 #include "android/utils/compiler.h"
     19 
     20 ANDROID_BEGIN_HEADER
     21 
     22 // Parse the content of a property file and retrieve the value of a given
     23 // named property, or NULL if it is undefined or empty. If a property
     24 // appears several times in a file, the last definition is returned.
     25 // |propertyFile| is the address of the file in memory.
     26 // |propertyFileLen| is its length in bytes.
     27 // |propertyName| is the name of the property.
     28 char* propertyFile_getValue(const char* propertyFile,
     29                             size_t propertyFileLen,
     30                             const char* propertyName);
     31 
     32 // Maximum length of a property name (including terminating zero).
     33 // Any property name that is equal or greater than this value will be
     34 // considered undefined / ignored.
     35 #define MAX_PROPERTY_NAME_LEN  32
     36 
     37 // Maximum length of a property value (including terminating zero).
     38 // Any value stored in a file that has a length equal or greater than this
     39 // will be truncated!.
     40 #define MAX_PROPERTY_VALUE_LEN 92
     41 
     42 // Structure used to hold an iterator over a property file.
     43 // Usage is simple:
     44 //    1) Initialize iterator with propertyFileIterator_init()
     45 //
     46 //    2) Call propertyFileIterator_next() in a loop. If it returns true
     47 //       one can read the |name| and |value| zero-terminated strings to
     48 //       get property names and values, in the order they appear in the
     49 //       file.
     50 //
     51 //       Once propertyFileIterator_next() returns false, you're done.
     52 //
     53 typedef struct {
     54     char name[MAX_PROPERTY_NAME_LEN];
     55     char value[MAX_PROPERTY_VALUE_LEN];
     56     // private.
     57     const char* p;
     58     const char* end;
     59 } PropertyFileIterator;
     60 
     61 // Initialize a PropertyFileIterator.
     62 // |iter| is the iterator instance.
     63 // |propertyFile| is the address of the property file in memory.
     64 // |propertyFileLen| is its lengh in bytes.
     65 void propertyFileIterator_init(PropertyFileIterator* iter,
     66                                const void* propertyFile,
     67                                size_t propertyFileLen);
     68 
     69 // Extract one property from a property file iterator.
     70 // Returns true if there is one, or false if the iteration has stopped.
     71 // If true, one can read |iter->name| and |iter->value| to get the
     72 // property name and value, respectively, as zero-terminated strings
     73 // that need to be copied by the caller.
     74 bool propertyFileIterator_next(PropertyFileIterator* iter);
     75 
     76 ANDROID_END_HEADER
     77 
     78 #endif  // ANDROID_UTILS_PROPERTY_FILE_H
     79