#ifndef __KMCREATEUSB_UTILS_H__
#define __KMCREATEUSB_UTILS_H__

#include <gio/gio.h>
#include <string>
#include <stdlib.h>
#include <string.h>

#include "common/KMMacros.h"
#include "common/KMMetaData.h"
#include "app/KMSubCommand.h"

using namespace std;

typedef struct CommitAndSubpaths
{
    gchar *commit;
    gchar **subpaths;
} CommitAndSubpaths;

/**
 * @brief 提交和子路径创建函数
 * @param commit 提交字符串指针
 * @param subpaths 子路径指针的指针
 * @return CommitAndSubpaths* 指针
 */
CommitAndSubpaths *commitAndSubpathsNew(const char *commit, const char *const *subpaths);

/**
 * @brief 提交和子路径释放函数
 * @param commitSubpath 结构体指针
 * @return void
 */
void commitAndSubpathsFree(CommitAndSubpaths *commitSubpath);

/**
 * @brief 是否以sudo权限运行
 * @return bool true 是 fase 否
 */
bool runningUnderSudo();

/**
 * @brief 分割字符串
 * @param str 字符串
 * @param separator 分割字符串
 * @param front 分割后前面的字符串
 * @return 0 成功 非0 失败
 */
int splits(string &str, const string &separator, string &front);

/**
 * @brief 获取文件描述符和文件状态
 * @param path 路径
 * @param mode 权限
 * @param fd 文件描述符
 * @param st 文件状态
 * @return true 成功 false 失败
 */
bool getFdAndStat(const int &fd, const string &path, const int &flags, int &dfd, struct stat &st);

/**
 * @brief 从部署目录中获取子路径
 * @param subpaths deploy子路径
 * @return 返回子目录数组
 */
char **getSubpathsFromDeploySubpaths(const char *const *subpaths);

#endif