blob: 88b532a728cc9df52f38e2d5664783d143058ef1 [file] [log] [blame]
// Copyright 2014 The Android Open Source Project
//
// This software is licensed under the terms of the GNU General Public
// License version 2, as published by the Free Software Foundation, and
// may be copied, distributed, and modified under those terms.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
#ifndef ANDROID_UTILS_PROPERTY_FILE_H
#define ANDROID_UTILS_PROPERTY_FILE_H
#include <stdbool.h>
#include <stddef.h>
#include "android/utils/compiler.h"
ANDROID_BEGIN_HEADER
// Parse the content of a property file and retrieve the value of a given
// named property, or NULL if it is undefined or empty. If a property
// appears several times in a file, the last definition is returned.
// |propertyFile| is the address of the file in memory.
// |propertyFileLen| is its length in bytes.
// |propertyName| is the name of the property.
char* propertyFile_getValue(const char* propertyFile,
size_t propertyFileLen,
const char* propertyName);
// Maximum length of a property name (including terminating zero).
// Any property name that is equal or greater than this value will be
// considered undefined / ignored.
#define MAX_PROPERTY_NAME_LEN 32
// Maximum length of a property value (including terminating zero).
// Any value stored in a file that has a length equal or greater than this
// will be truncated!.
#define MAX_PROPERTY_VALUE_LEN 92
// Structure used to hold an iterator over a property file.
// Usage is simple:
// 1) Initialize iterator with propertyFileIterator_init()
//
// 2) Call propertyFileIterator_next() in a loop. If it returns true
// one can read the |name| and |value| zero-terminated strings to
// get property names and values, in the order they appear in the
// file.
//
// Once propertyFileIterator_next() returns false, you're done.
//
typedef struct {
char name[MAX_PROPERTY_NAME_LEN];
char value[MAX_PROPERTY_VALUE_LEN];
// private.
const char* p;
const char* end;
} PropertyFileIterator;
// Initialize a PropertyFileIterator.
// |iter| is the iterator instance.
// |propertyFile| is the address of the property file in memory.
// |propertyFileLen| is its lengh in bytes.
void propertyFileIterator_init(PropertyFileIterator* iter,
const void* propertyFile,
size_t propertyFileLen);
// Extract one property from a property file iterator.
// Returns true if there is one, or false if the iteration has stopped.
// If true, one can read |iter->name| and |iter->value| to get the
// property name and value, respectively, as zero-terminated strings
// that need to be copied by the caller.
bool propertyFileIterator_next(PropertyFileIterator* iter);
ANDROID_END_HEADER
#endif // ANDROID_UTILS_PROPERTY_FILE_H