| /* | |
| * Copyright (C) 2012-2015 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| #ifndef _LOGD_LOG_UTILS_H__ | |
| #define _LOGD_LOG_UTILS_H__ | |
| #include <sys/cdefs.h> | |
| #include <sys/types.h> | |
| #include <private/android_logger.h> | |
| #include <sysutils/SocketClient.h> | |
| #include <utils/FastStrcmp.h> | |
| // Hijack this header as a common include file used by most all sources | |
| // to report some utilities defined here and there. | |
| namespace android { | |
| // Furnished in main.cpp. Caller must own and free returned value | |
| char* uidToName(uid_t uid); | |
| void prdebug(const char* fmt, ...) __printflike(1, 2); | |
| // Furnished in LogStatistics.cpp. | |
| size_t sizesTotal(); | |
| // Caller must own and free returned value | |
| char* pidToName(pid_t pid); | |
| char* tidToName(pid_t tid); | |
| uid_t pidToUid(pid_t pid); | |
| pid_t tidToPid(pid_t tid); | |
| // Furnished in LogTags.cpp. Thread safe. | |
| const char* tagToName(uint32_t tag); | |
| void ReReadEventLogTags(); | |
| // Furnished by LogKlog.cpp | |
| char* log_strntok_r(char* s, ssize_t& len, char*& saveptr, ssize_t& sublen); | |
| // needle should reference a string longer than 1 character | |
| static inline const char* strnstr(const char* s, ssize_t len, | |
| const char* needle) { | |
| if (len <= 0) return nullptr; | |
| const char c = *needle++; | |
| const size_t needleLen = strlen(needle); | |
| do { | |
| do { | |
| if (len <= (ssize_t)needleLen) return nullptr; | |
| --len; | |
| } while (*s++ != c); | |
| } while (fastcmp<memcmp>(s, needle, needleLen)); | |
| s--; | |
| return s; | |
| } | |
| } | |
| // Furnished in LogCommand.cpp | |
| bool clientHasLogCredentials(uid_t uid, gid_t gid, pid_t pid); | |
| bool clientHasLogCredentials(SocketClient* cli); | |
| static inline bool worstUidEnabledForLogid(log_id_t id) { | |
| return (id == LOG_ID_MAIN) || (id == LOG_ID_SYSTEM) || | |
| (id == LOG_ID_RADIO) || (id == LOG_ID_EVENTS); | |
| } | |
| #endif // _LOGD_LOG_UTILS_H__ |