188ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey/*
288ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey * Copyright (C) 2017 The Android Open Source Project
388ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey *
488ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License");
588ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey * you may not use this file except in compliance with the License.
688ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey * You may obtain a copy of the License at
788ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey *
888ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey *      http://www.apache.org/licenses/LICENSE-2.0
988ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey *
1088ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey * Unless required by applicable law or agreed to in writing, software
1188ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS,
1288ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1388ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey * See the License for the specific language governing permissions and
1488ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey * limitations under the License.
1588ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey */
1688ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey
1788ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey#ifndef ANDROID_INSTALLD_CACHE_ITEM_H
1888ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey#define ANDROID_INSTALLD_CACHE_ITEM_H
1988ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey
2088ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey#include <memory>
2188ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey#include <string>
2288ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey
2388ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey#include <fts.h>
2488ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey#include <sys/types.h>
2588ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey#include <sys/stat.h>
2688ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey
2788ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey#include <android-base/macros.h>
2888ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey
2988ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkeynamespace android {
3088ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkeynamespace installd {
3188ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey
3288ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey/**
3388ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey * Single cache item that can be purged to free up space. This may be an
34ed909ae8db2f44ce7fe7003c6fee457f13669702Jeff Sharkey * isolated file, or an entire directory tree that should be deleted as a
35ed909ae8db2f44ce7fe7003c6fee457f13669702Jeff Sharkey * group.
3688ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey */
3788ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkeyclass CacheItem {
3888ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkeypublic:
39871a8f236ef2a055b9955b47a342b2c44c020ef7Jeff Sharkey    CacheItem(FTSENT* p);
4088ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey    ~CacheItem();
4188ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey
4288ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey    std::string toString();
4388ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey    std::string buildPath();
4488ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey
4588ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey    int purge();
4688ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey
4788ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey    short level;
4888ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey    bool directory;
49ed909ae8db2f44ce7fe7003c6fee457f13669702Jeff Sharkey    bool group;
50871a8f236ef2a055b9955b47a342b2c44c020ef7Jeff Sharkey    bool tombstone;
5188ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey    int64_t size;
5288ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey    time_t modified;
5388ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey
5488ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkeyprivate:
55871a8f236ef2a055b9955b47a342b2c44c020ef7Jeff Sharkey    CacheItem* mParent;
5688ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey    std::string mName;
5788ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey
5888ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey    DISALLOW_COPY_AND_ASSIGN(CacheItem);
5988ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey};
6088ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey
6188ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey}  // namespace installd
6288ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey}  // namespace android
6388ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey
6488ddd94834dae9c5862a07a1e4432b171b2f5d9fJeff Sharkey#endif  // ANDROID_INSTALLD_CACHE_ITEM_H
65