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