• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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