polardbxengine/storage/ndb/include/portlib/NdbDir.hpp

114 lines
3.2 KiB
C++

/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2.0,
as published by the Free Software Foundation.
This program is also distributed with certain software (including
but not limited to OpenSSL) that is licensed under separate terms,
as designated in a particular file or component or in included license
documentation. The authors of MySQL hereby grant you an additional
permission to link the program and your derivative works with the
separately licensed software that they have included with MySQL.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License, version 2.0, for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#ifndef NdbDir_HPP
#define NdbDir_HPP
#ifdef _WIN32
#ifndef mode_t /* MySQL 5.5+ defines mode_t */
typedef int mode_t;
#endif
#endif
class NdbDir {
public:
class Iterator {
class DirIteratorImpl& m_impl;
Iterator(const Iterator&); // not impl
Iterator& operator=(const Iterator&); // not impl
public:
Iterator();
~Iterator();
int open(const char* path);
void close(void);
/*
Return the next regular file or NULL if no more file found
*/
const char* next_file(void);
/*
Return the next entry(file, dir, symlink etc.) or NULL if no
more entries found
*/
const char* next_entry(void);
};
class Temp {
const char* m_path;
Temp(const Temp&); // not impl
Temp& operator=(const Temp&); // not impl
public:
Temp();
~Temp();
const char* path(void) const;
};
static mode_t u_r(void);
static mode_t u_w(void);
static mode_t u_x(void);
static mode_t u_rwx(void) { return (u_r() | u_w() | u_x()); }
static mode_t g_r(void);
static mode_t g_w(void);
static mode_t g_x(void);
static mode_t g_rwx(void) { return (g_r() | g_w() | g_x()); }
static mode_t o_r(void);
static mode_t o_w(void);
static mode_t o_x(void);
static mode_t o_rwx(void) { return (o_r() | o_w() | o_x()); }
/*
Create directory
path - path to directory to create
mode - mode for the directory to create
ignore_existing - don't print or return error if directory
already exist
*/
static bool create(const char *path,
mode_t mode = u_rwx(),
bool ignore_existing = false);
/*
Remove directory recursively
path - path to directory that should be removed
only_contents - only remove the contents of the directory
*/
static bool remove_recursive(const char* path, bool only_contents = false);
/*
Remove empty directory
*/
static bool remove(const char* path);
/*
Change working directory
*/
static int chdir(const char* path);
};
#endif