168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file.
468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#ifndef LIBRARIES_NACL_IO_GETDENTS_HELPER_H_
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define LIBRARIES_NACL_IO_GETDENTS_HELPER_H_
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include <vector>
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "nacl_io/error.h"
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "nacl_io/osdirent.h"
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace nacl_io {
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class GetDentsHelper {
1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Initialize the helper without any defaults.
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  GetDentsHelper();
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  GetDentsHelper(ino_t curdir_ino, ino_t parentdir_ino);
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void Reset();
2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void AddDirent(ino_t ino, const char* name, size_t namelen);
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  Error GetDents(size_t offs, dirent* pdir, size_t size, int* out_bytes) const;
2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private:
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void Initialize();
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  std::vector<dirent> dirents_;
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ino_t curdir_ino_;
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ino_t parentdir_ino_;
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool init_defaults_;
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace nacl_io
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif  // LIBRARIES_NACL_IO_GETDENTS_HELPER_H_
37