mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-10-29 16:26:39 +01:00
IO: don't require posix specific stuff for ffPathExists
This commit is contained in:
+38
-2
@@ -7,6 +7,7 @@
|
||||
#ifdef _WIN32
|
||||
#include <fileapi.h>
|
||||
#else
|
||||
#include <sys/stat.h>
|
||||
#include <termios.h>
|
||||
#include <poll.h>
|
||||
#endif
|
||||
@@ -231,12 +232,47 @@ void ffSuppressIO(bool suppress)
|
||||
dup2(suppress ? nullFile : origErr, STDERR_FILENO);
|
||||
}
|
||||
|
||||
bool ffFileExists(const char* fileName, mode_t mode)
|
||||
#ifndef _WIN32
|
||||
bool ffPathExists(const char* path, FFPathType type)
|
||||
{
|
||||
struct stat fileStat;
|
||||
return stat(fileName, &fileStat) == 0 && ((fileStat.st_mode & S_IFMT) == mode);
|
||||
if(stat(path, &fileStat) != 0)
|
||||
return false;
|
||||
|
||||
int mode = fileStat.st_mode & S_IFMT;
|
||||
|
||||
if(type & FF_PATHTYPE_REGULAR && mode == S_IFREG)
|
||||
return true;
|
||||
|
||||
if(type & FF_PATHTYPE_DIRECTORY && mode == S_IFDIR)
|
||||
return true;
|
||||
|
||||
if(type & FF_PATHTYPE_LINK && mode == S_IFLNK)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#else
|
||||
bool ffPathExists(const char* path, FFPathType type)
|
||||
{
|
||||
DWORD attr = GetFileAttributesA(path);
|
||||
if(attr == INVALID_FILE_ATTRIBUTES)
|
||||
return false;
|
||||
|
||||
if(type & FF_PATHTYPE_REGULAR && !(attr & FILE_ATTRIBUTE_DIRECTORY))
|
||||
return true;
|
||||
|
||||
if(type & FF_PATHTYPE_DIRECTORY && (attr & FILE_ATTRIBUTE_DIRECTORY))
|
||||
return true;
|
||||
|
||||
if(type & FF_PATHTYPE_LINK && (attr & FILE_ATTRIBUTE_REPARSE_POINT))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
void ffGetTerminalResponse(const char* request, const char* format, ...)
|
||||
{
|
||||
#ifndef WIN32
|
||||
|
||||
+12
-3
@@ -5,8 +5,6 @@
|
||||
|
||||
#include "fastfetch.h"
|
||||
|
||||
#include <sys/stat.h> //mode_t, fstat, stat
|
||||
|
||||
bool ffWriteFDBuffer(int fd, const FFstrbuf* content);
|
||||
bool ffWriteFileData(const char* fileName, size_t dataSize, const void* data);
|
||||
bool ffWriteFileBuffer(const char* fileName, const FFstrbuf* buffer);
|
||||
@@ -20,7 +18,18 @@ bool ffReadFileBuffer(const char* fileName, FFstrbuf* buffer);
|
||||
bool ffAppendHandleBuffer(HANDLE handle, FFstrbuf* buffer);
|
||||
#endif
|
||||
|
||||
bool ffFileExists(const char* fileName, mode_t mode);
|
||||
//Bit flags, combine with |
|
||||
typedef enum FFPathType
|
||||
{
|
||||
FF_PATHTYPE_REGULAR = 1,
|
||||
FF_PATHTYPE_LINK = 2,
|
||||
FF_PATHTYPE_DIRECTORY = 4
|
||||
} FFPathType;
|
||||
|
||||
#define FF_PATHTYPE_FILE (FF_PATHTYPE_REGULAR | FF_PATHTYPE_LINK)
|
||||
#define FF_PATHTYPE_ANY (FF_PATHTYPE_FILE | FF_PATHTYPE_DIRECTORY)
|
||||
|
||||
bool ffPathExists(const char* path, FFPathType pathType);
|
||||
|
||||
// Not thread safe!
|
||||
void ffSuppressIO(bool suppress);
|
||||
|
||||
@@ -309,7 +309,7 @@ static const SQLiteData* getSQLiteData(const FFinstance* instance)
|
||||
|
||||
int ffSettingsGetSQLite3Int(const FFinstance* instance, const char* dbPath, const char* query)
|
||||
{
|
||||
if(!ffFileExists(dbPath, S_IFREG))
|
||||
if(!ffPathExists(dbPath, FF_PATHTYPE_FILE))
|
||||
return 0;
|
||||
|
||||
const SQLiteData* data = getSQLiteData(instance);
|
||||
|
||||
@@ -131,7 +131,7 @@ void ffDetectCPUImpl(const FFinstance* instance, FFCPUResult* cpu)
|
||||
cpu->coresOnline = (uint16_t) get_nprocs();
|
||||
|
||||
#define BP "/sys/devices/system/cpu/cpufreq/policy0/"
|
||||
if(ffFileExists(BP, S_IFDIR))
|
||||
if(ffPathExists(BP, FF_PATHTYPE_DIRECTORY))
|
||||
{
|
||||
cpu->frequencyMin = getFrequency(BP"cpuinfo_min_freq", BP"scaling_min_freq");
|
||||
cpu->frequencyMax = getFrequency(BP"cpuinfo_max_freq", BP"scaling_max_freq");
|
||||
|
||||
@@ -48,7 +48,7 @@ static const char* parseEnv()
|
||||
|
||||
if(
|
||||
getenv("WAYLAND_DISPLAY") != NULL &&
|
||||
ffFileExists("/mnt/wslg/", S_IFDIR)
|
||||
ffPathExists("/mnt/wslg/", FF_PATHTYPE_DIRECTORY)
|
||||
) return "WSLg";
|
||||
|
||||
return NULL;
|
||||
|
||||
@@ -88,7 +88,7 @@ static uint32_t countFilesRecursiveImpl(FFstrbuf* baseDirPath, const char* filen
|
||||
|
||||
ffStrbufAppendC(baseDirPath, '/');
|
||||
ffStrbufAppendS(baseDirPath, filename);
|
||||
bool exists = ffFileExists(baseDirPath->chars, S_IFREG);
|
||||
bool exists = ffPathExists(baseDirPath->chars, FF_PATHTYPE_FILE);
|
||||
ffStrbufSubstrBefore(baseDirPath, baseDirPathLength);
|
||||
if(exists)
|
||||
return 1;
|
||||
@@ -129,7 +129,7 @@ static uint32_t countFilesRecursive(FFstrbuf* baseDir, const char* dirname, cons
|
||||
static uint32_t getNixPackagesImpl(char* path)
|
||||
{
|
||||
//Nix detection is kinda slow, so we only do it if the dir exists
|
||||
if(!ffFileExists(path, S_IFDIR))
|
||||
if(!ffPathExists(path, FF_PATHTYPE_DIRECTORY))
|
||||
return 0;
|
||||
|
||||
FFstrbuf output;
|
||||
|
||||
@@ -62,7 +62,7 @@ void ffDetectTerminalFontPlatform(const FFinstance* instance, const FFTerminalSh
|
||||
return;
|
||||
}
|
||||
|
||||
if(!ffFileExists(FF_TERMUX_FONT_PATH, S_IFREG))
|
||||
if(!ffPathExists(FF_TERMUX_FONT_PATH, FF_PATHTYPE_FILE))
|
||||
{
|
||||
ffFontInitCopy(&terminalFont->font, "monospace");
|
||||
return;
|
||||
|
||||
@@ -219,7 +219,7 @@ static const char* detectWifiWithIoctls(FF_MAYBE_UNUSED const FFinstance* instan
|
||||
for(struct if_nameindex* i = infs; !(i->if_index == 0 && i->if_name == NULL); ++i)
|
||||
{
|
||||
ffStrbufSetF(&path, "/sys/class/net/%s/phy80211", i->if_name);
|
||||
if(!ffFileExists(path.chars, S_IFDIR))
|
||||
if(!ffPathExists(path.chars, FF_PATHTYPE_DIRECTORY))
|
||||
continue;
|
||||
|
||||
FFWifiResult* item = (FFWifiResult*)ffListAdd(result);
|
||||
|
||||
+2
-2
@@ -556,7 +556,7 @@ static void listConfigPaths(FFinstance* instance)
|
||||
FF_LIST_FOR_EACH(FFstrbuf, folder, instance->state.platform.configDirs)
|
||||
{
|
||||
ffStrbufAppendS(folder, "fastfetch/config.conf");
|
||||
printf("%s%s\n", folder->chars, ffFileExists(folder->chars, S_IFREG) ? " (*)" : "");
|
||||
printf("%s%s\n", folder->chars, ffPathExists(folder->chars, FF_PATHTYPE_FILE) ? " (*)" : "");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -640,7 +640,7 @@ static void generateConfigFile(FFinstance* instance, bool force)
|
||||
// Paths generated in `init.c/initConfigDirs` end with `/`
|
||||
ffStrbufAppendS(filename, "fastfetch/config.conf");
|
||||
|
||||
if (!force && ffFileExists(filename->chars, S_IFREG))
|
||||
if (!force && ffPathExists(filename->chars, FF_PATHTYPE_FILE))
|
||||
{
|
||||
fprintf(stderr, "Config file exists in `%s`, use `--gen-config-force` to overwrite\n", filename->chars);
|
||||
exit(1);
|
||||
|
||||
@@ -750,7 +750,7 @@ static bool printImageIfExistsSlowPath(FFinstance* instance, FFLogoType type, bo
|
||||
|
||||
bool ffLogoPrintImageIfExists(FFinstance* instance, FFLogoType type, bool printError)
|
||||
{
|
||||
if(!ffFileExists(instance->config.logo.source.chars, S_IFREG & S_IFLNK))
|
||||
if(!ffPathExists(instance->config.logo.source.chars, FF_PATHTYPE_FILE))
|
||||
{
|
||||
if(printError)
|
||||
fprintf(stderr, "Logo: Image source \"%s\" does not exist\n", instance->config.logo.source.chars);
|
||||
|
||||
+2
-2
@@ -291,7 +291,7 @@ static bool logoPrintData(FFinstance* instance, bool doColorReplacement) {
|
||||
|
||||
static void updateLogoPath(FFinstance* instance)
|
||||
{
|
||||
if(ffFileExists(instance->config.logo.source.chars, S_IFREG & S_IFLNK))
|
||||
if(ffPathExists(instance->config.logo.source.chars, FF_PATHTYPE_FILE))
|
||||
return;
|
||||
|
||||
FFstrbuf fullPath;
|
||||
@@ -304,7 +304,7 @@ static void updateLogoPath(FFinstance* instance)
|
||||
ffStrbufAppendS(&fullPath, "fastfetch/logos/");
|
||||
ffStrbufAppend(&fullPath, &instance->config.logo.source);
|
||||
|
||||
if(ffFileExists(fullPath.chars, S_IFREG & S_IFLNK))
|
||||
if(ffPathExists(fullPath.chars, FF_PATHTYPE_FILE))
|
||||
{
|
||||
ffStrbufSet(&instance->config.logo.source, &fullPath);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user