mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
Use host's functions for file i/o directly (open(), close() ,etc.), not the sim_* variants. Some dir functions need to be wrapped still because we need to cache the parents dir's path (host's dirent doesn't let us know). For the same reason (incompatibility) with host's dirent) detach some members from Rockbox' dirent struct and put it into an extra one, the values can be retrieved via the new dir_get_info(). Get rid of the sim_ prefix for sleep as well and change the signature to unix sleep(). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27968 a1c6a512-1295-4272-9138-f99709370657
99 lines
2.7 KiB
C
99 lines
2.7 KiB
C
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
* $Id$
|
|
*
|
|
* Copyright (C) 2002 by Björn Stenberg
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
****************************************************************************/
|
|
#include "config.h"
|
|
#include "dir.h"
|
|
#include "stdlib.h"
|
|
#include "string.h"
|
|
#include "debug.h"
|
|
#include "file.h"
|
|
#include "filefuncs.h"
|
|
|
|
#ifdef HAVE_MULTIVOLUME
|
|
/* returns on which volume this is, and copies the reduced name
|
|
(sortof a preprocessor for volume-decorated pathnames) */
|
|
int strip_volume(const char* name, char* namecopy)
|
|
{
|
|
int volume = 0;
|
|
const char *temp = name;
|
|
|
|
while (*temp == '/') /* skip all leading slashes */
|
|
++temp;
|
|
|
|
if (*temp && !strncmp(temp, VOL_NAMES, VOL_ENUM_POS))
|
|
{
|
|
temp += VOL_ENUM_POS; /* behind special name */
|
|
volume = atoi(temp); /* number is following */
|
|
temp = strchr(temp, '/'); /* search for slash behind */
|
|
if (temp != NULL)
|
|
name = temp; /* use the part behind the volume */
|
|
else
|
|
name = "/"; /* else this must be the root dir */
|
|
}
|
|
|
|
strlcpy(namecopy, name, MAX_PATH);
|
|
|
|
return volume;
|
|
}
|
|
#endif /* #ifdef HAVE_MULTIVOLUME */
|
|
|
|
#ifndef __PCTOOL__
|
|
/* Test file existence, using dircache of possible */
|
|
bool file_exists(const char *file)
|
|
{
|
|
int fd;
|
|
|
|
#ifdef DEBUG
|
|
if (!file || strlen(file) <= 0)
|
|
{
|
|
DEBUGF("%s(): Invalid parameter!\n");
|
|
return false;
|
|
}
|
|
#endif
|
|
|
|
#ifdef HAVE_DIRCACHE
|
|
if (dircache_is_enabled())
|
|
return (dircache_get_entry_ptr(file) != NULL);
|
|
#endif
|
|
|
|
fd = open(file, O_RDONLY);
|
|
if (fd < 0)
|
|
return false;
|
|
close(fd);
|
|
return true;
|
|
}
|
|
|
|
bool dir_exists(const char *path)
|
|
{
|
|
DIR* d = opendir(path);
|
|
if (!d)
|
|
return false;
|
|
closedir(d);
|
|
return true;
|
|
}
|
|
|
|
#if !(CONFIG_PLATFORM & PLATFORM_ANDROID)
|
|
struct dirinfo dir_get_info(struct DIR* parent, struct dirent *entry)
|
|
{
|
|
(void)parent;
|
|
return entry->info;
|
|
}
|
|
#endif
|
|
#endif /* __PCTOOL__ */
|