|  | /* | 
|  | * 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__ |