140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/* 240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * YAFFS: Yet another FFS. A NAND-flash specific file system. 340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * devextras.h 440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * 540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * Copyright (C) 2002 Aleph One Ltd. 640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * for Toby Churchill Ltd and Brightstar Engineering 740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * 840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * Created by Charles Manning <charles@aleph1.co.uk> 940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * 1040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * This program is free software; you can redistribute it and/or modify 1140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * it under the terms of the GNU Lesser General Public License version 2.1 as 1240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * published by the Free Software Foundation. 1340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * 1440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL. 1540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * 1640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * This file is just holds extra declarations used during development. 1740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * Most of these are from kernel includes placed here so we can use them in 1840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * applications. 1940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * 2040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * $Id: devextras.h,v 1.2 2005/08/11 02:37:49 marty Exp $ 2140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * 2240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 2340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 2440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#ifndef __EXTRAS_H__ 2540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define __EXTRAS_H__ 2640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 2740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#if defined WIN32 2840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define __inline__ __inline 2940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define new newHack 3040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#endif 3140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 3240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#if !(defined __KERNEL__) || (defined WIN32) 3340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 3440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/* User space defines */ 3540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 3640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projecttypedef unsigned char __u8; 3740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projecttypedef unsigned short __u16; 3840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projecttypedef unsigned __u32; 3940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 4070c156f8a849746ae6417fd5c323902a471ea32fAlexey Tarasov#if defined(__APPLE__) || defined(__FreeBSD__) 4140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projecttypedef long long loff_t; 4240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#endif 4340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 4440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/* 4540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * Simple doubly linked list implementation. 4640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * 4740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * Some of the internal functions ("__xxx") are useful when 4840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * manipulating whole lists rather than single entries, as 4940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * sometimes we already know the next/prev entries and we can 5040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * generate better code by using them directly rather than 5140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * using the generic single-entry routines. 5240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 5340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 5440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define prefetch(x) 1 5540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 5640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectstruct list_head { 5740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project struct list_head *next, *prev; 5840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}; 5940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 6040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define LIST_HEAD_INIT(name) { &(name), &(name) } 6140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 6240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define LIST_HEAD(name) \ 6340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project struct list_head name = LIST_HEAD_INIT(name) 6440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 6540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define INIT_LIST_HEAD(ptr) do { \ 6640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project (ptr)->next = (ptr); (ptr)->prev = (ptr); \ 6740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project} while (0) 6840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 6940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/* 7040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * Insert a new entry between two known consecutive entries. 7140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * 7240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * This is only for internal list manipulation where we know 7340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * the prev/next entries already! 7440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 7540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectstatic __inline__ void __list_add(struct list_head *new, 7640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project struct list_head *prev, 7740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project struct list_head *next) 7840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{ 7940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project next->prev = new; 8040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project new->next = next; 8140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project new->prev = prev; 8240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project prev->next = new; 8340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project} 8440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 8540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/** 8640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * list_add - add a new entry 8740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @new: new entry to be added 8840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @head: list head to add it after 8940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * 9040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * Insert a new entry after the specified head. 9140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * This is good for implementing stacks. 9240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 9340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectstatic __inline__ void list_add(struct list_head *new, struct list_head *head) 9440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{ 9540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project __list_add(new, head, head->next); 9640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project} 9740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 9840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/** 9940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * list_add_tail - add a new entry 10040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @new: new entry to be added 10140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @head: list head to add it before 10240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * 10340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * Insert a new entry before the specified head. 10440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * This is useful for implementing queues. 10540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 10640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectstatic __inline__ void list_add_tail(struct list_head *new, 10740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project struct list_head *head) 10840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{ 10940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project __list_add(new, head->prev, head); 11040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project} 11140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 11240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/* 11340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * Delete a list entry by making the prev/next entries 11440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * point to each other. 11540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * 11640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * This is only for internal list manipulation where we know 11740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * the prev/next entries already! 11840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 11940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectstatic __inline__ void __list_del(struct list_head *prev, 12040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project struct list_head *next) 12140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{ 12240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project next->prev = prev; 12340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project prev->next = next; 12440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project} 12540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 12640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/** 12740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * list_del - deletes entry from list. 12840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @entry: the element to delete from the list. 12940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * Note: list_empty on entry does not return true after this, the entry is 13040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * in an undefined state. 13140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 13240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectstatic __inline__ void list_del(struct list_head *entry) 13340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{ 13440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project __list_del(entry->prev, entry->next); 13540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project} 13640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 13740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/** 13840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * list_del_init - deletes entry from list and reinitialize it. 13940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @entry: the element to delete from the list. 14040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 14140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectstatic __inline__ void list_del_init(struct list_head *entry) 14240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{ 14340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project __list_del(entry->prev, entry->next); 14440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project INIT_LIST_HEAD(entry); 14540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project} 14640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 14740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/** 14840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * list_empty - tests whether a list is empty 14940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @head: the list to test. 15040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 15140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectstatic __inline__ int list_empty(struct list_head *head) 15240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{ 15340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project return head->next == head; 15440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project} 15540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 15640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/** 15740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * list_splice - join two lists 15840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @list: the new list to add. 15940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @head: the place to add it in the first list. 16040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 16140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectstatic __inline__ void list_splice(struct list_head *list, 16240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project struct list_head *head) 16340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{ 16440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project struct list_head *first = list->next; 16540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 16640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project if (first != list) { 16740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project struct list_head *last = list->prev; 16840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project struct list_head *at = head->next; 16940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 17040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project first->prev = head; 17140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project head->next = first; 17240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 17340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project last->next = at; 17440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project at->prev = last; 17540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project } 17640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project} 17740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 17840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/** 17940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * list_entry - get the struct for this entry 18040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @ptr: the &struct list_head pointer. 18140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @type: the type of the struct this is embedded in. 18240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @member: the name of the list_struct within the struct. 18340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 18440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define list_entry(ptr, type, member) \ 18540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) 18640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 18740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/** 18840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * list_for_each - iterate over a list 18940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @pos: the &struct list_head to use as a loop counter. 19040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @head: the head for your list. 19140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 19240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define list_for_each(pos, head) \ 19340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project for (pos = (head)->next, prefetch(pos->next); pos != (head); \ 19440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project pos = pos->next, prefetch(pos->next)) 19540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 19640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/** 19740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * list_for_each_safe - iterate over a list safe against removal 19840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * of list entry 19940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @pos: the &struct list_head to use as a loop counter. 20040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @n: another &struct list_head to use as temporary storage 20140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * @head: the head for your list. 20240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 20340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define list_for_each_safe(pos, n, head) \ 20440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project for (pos = (head)->next, n = pos->next; pos != (head); \ 20540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project pos = n, n = pos->next) 20640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 20740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/* 20840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * File types 20940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 21040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define DT_UNKNOWN 0 21140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define DT_FIFO 1 21240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define DT_CHR 2 21340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define DT_DIR 4 21440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define DT_BLK 6 21540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define DT_REG 8 21640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define DT_LNK 10 21740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define DT_SOCK 12 21840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define DT_WHT 14 21940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 22040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#ifndef WIN32 22140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#include <sys/stat.h> 22240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#endif 22340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 22440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/* 22540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * Attribute flags. These should be or-ed together to figure out what 22640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project * has been changed! 22740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project */ 22840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define ATTR_MODE 1 22940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define ATTR_UID 2 23040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define ATTR_GID 4 23140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define ATTR_SIZE 8 23240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define ATTR_ATIME 16 23340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define ATTR_MTIME 32 23440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define ATTR_CTIME 64 23540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define ATTR_ATIME_SET 128 23640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define ATTR_MTIME_SET 256 23740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define ATTR_FORCE 512 /* Not a change, but a change it */ 23840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define ATTR_ATTR_FLAG 1024 23940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 24040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectstruct iattr { 24140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project unsigned int ia_valid; 24240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project unsigned ia_mode; 24340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project unsigned ia_uid; 24440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project unsigned ia_gid; 24540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project unsigned ia_size; 24640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project unsigned ia_atime; 24740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project unsigned ia_mtime; 24840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project unsigned ia_ctime; 24940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project unsigned int ia_attr_flags; 25040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}; 25140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 25240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#define KERN_DEBUG 25340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 25440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#else 25540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 25640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#ifndef WIN32 25740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#include <linux/types.h> 25840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#include <linux/list.h> 25940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#include <linux/fs.h> 26040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#include <linux/stat.h> 26140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#endif 26240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 26340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#endif 26440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 26540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#if defined WIN32 26640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#undef new 26740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#endif 26840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project 26940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#endif 270