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