• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2005 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 //
18 // Handy utility functions and portability code.
19 //
20 #ifndef _LIBS_UTILS_MISC_H
21 #define _LIBS_UTILS_MISC_H
22 
23 #include <sys/time.h>
24 #include <utils/Endian.h>
25 
26 namespace android {
27 
28 /* get #of elements in a static array */
29 #ifndef NELEM
30 # define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0])))
31 #endif
32 
33 /*
34  * Make a copy of the string, using "new[]" instead of "malloc".  Free the
35  * string with delete[].
36  *
37  * Returns NULL if "str" is NULL.
38  */
39 char* strdupNew(const char* str);
40 
41 /*
42  * Concatenate an argument vector into a single string.  If argc is >= 0
43  * it will be used; if it's < 0 then the last element in the arg vector
44  * must be NULL.
45  *
46  * This inserts a space between each argument.
47  *
48  * This does not automatically add double quotes around arguments with
49  * spaces in them.  This practice is necessary for Win32, because Win32's
50  * CreateProcess call is stupid.
51  *
52  * The caller should delete[] the returned string.
53  */
54 char* concatArgv(int argc, const char* const argv[]);
55 
56 /*
57  * Count up the number of arguments in "argv".  The count does not include
58  * the final NULL entry.
59  */
60 int countArgv(const char* const argv[]);
61 
62 /*
63  * Some utility functions for working with files.  These could be made
64  * part of a "File" class.
65  */
66 typedef enum FileType {
67     kFileTypeUnknown = 0,
68     kFileTypeNonexistent,       // i.e. ENOENT
69     kFileTypeRegular,
70     kFileTypeDirectory,
71     kFileTypeCharDev,
72     kFileTypeBlockDev,
73     kFileTypeFifo,
74     kFileTypeSymlink,
75     kFileTypeSocket,
76 } FileType;
77 /* get the file's type; follows symlinks */
78 FileType getFileType(const char* fileName);
79 /* get the file's modification date; returns -1 w/errno set on failure */
80 time_t getFileModDate(const char* fileName);
81 
82 /*
83  * Round up to the nearest power of 2.  Handy for hash tables.
84  */
85 unsigned int roundUpPower2(unsigned int val);
86 
87 void strreverse(char* begin, char* end);
88 void k_itoa(int value, char* str, int base);
89 char* itoa(int val, int base);
90 
91 typedef void (*sysprop_change_callback)(void);
92 void add_sysprop_change_callback(sysprop_change_callback cb, int priority);
93 void report_sysprop_change();
94 
95 }; // namespace android
96 
97 #endif // _LIBS_UTILS_MISC_H
98