Skip to content

Commit 5bceb29

Browse files
Image caching
1 parent 8b15383 commit 5bceb29

File tree

6 files changed

+343
-135
lines changed

6 files changed

+343
-135
lines changed

src/common/io.c

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,41 @@ bool ffWriteFDContent(int fd, const FFstrbuf* content)
1212
return write(fd, content->chars, content->length) != -1;
1313
}
1414

15-
void ffWriteFileContent(const char* fileName, const FFstrbuf* content)
15+
static void createSubfolders(const char* fileName)
1616
{
17-
int fd = open(fileName, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
17+
FFstrbuf path;
18+
ffStrbufInit(&path);
19+
20+
while(*fileName != '\0')
21+
{
22+
ffStrbufAppendC(&path, *fileName);
23+
if(*fileName == '/')
24+
mkdir(path.chars, S_IRWXU | S_IRGRP | S_IROTH);
25+
++fileName;
26+
}
27+
28+
ffStrbufDestroy(&path);
29+
}
30+
31+
bool ffWriteFileContent(const char* fileName, const FFstrbuf* content)
32+
{
33+
int openFlagsModes = O_WRONLY | O_CREAT | O_TRUNC;
34+
int openFlagsRights = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
35+
36+
int fd = open(fileName, openFlagsModes, openFlagsRights);
1837
if(fd == -1)
19-
return;
38+
{
39+
createSubfolders(fileName);
40+
fd = open(fileName, openFlagsModes, openFlagsRights);
41+
if(fd == -1)
42+
return false;
43+
}
2044

21-
ffWriteFDContent(fd, content);
45+
bool ret = ffWriteFDContent(fd, content);
2246

2347
close(fd);
48+
49+
return ret;
2450
}
2551

2652
void ffAppendFDContent(int fd, FFstrbuf* buffer)
@@ -118,6 +144,8 @@ void ffGetTerminalResponse(const char* request, char end, const char* format, ..
118144
while((size_t) pos < sizeof(buffer) - 1)
119145
{
120146
char c = (char) getc(stdin);
147+
if(c == '\0')
148+
break;
121149
buffer[pos++] = c;
122150
if(c == end)
123151
break;

src/fastfetch.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ void ffAppendFDContent(int fd, FFstrbuf* buffer);
400400
bool ffAppendFileContent(const char* fileName, FFstrbuf* buffer); //returns true if open() succeeds. This is used to differentiate between <file not found> and <empty file>
401401
bool ffGetFileContent(const char* fileName, FFstrbuf* buffer);
402402
bool ffWriteFDContent(int fd, const FFstrbuf* content);
403-
void ffWriteFileContent(const char* fileName, const FFstrbuf* buffer);
403+
bool ffWriteFileContent(const char* fileName, const FFstrbuf* buffer);
404404

405405
bool ffFileExists(const char* fileName, mode_t mode);
406406
void ffSuppressIO(bool suppress); // Not thread safe!

src/logo/image/im6.c

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,22 @@
44
#include <magick/MagickCore.h>
55

66
static FF_LIBRARY_SYMBOL(ResizeImage);
7-
static FF_LIBRARY_SYMBOL(WriteImage);
87

98
static void* logoResize(const void* image, size_t width, size_t height, void* exceptionInfo)
109
{
1110
return ffResizeImage(image, width, height, UndefinedFilter, 1.0, exceptionInfo);
1211
}
1312

14-
static bool logoWrite(void* imageInfo, void* image, void* exceptionInfo)
15-
{
16-
FF_UNUSED(exceptionInfo);
17-
return ffWriteImage(imageInfo, image) == MagickTrue;
18-
}
19-
20-
FFLogoImageResult ffLogoPrintImageIM6(FFinstance* instance, FFLogoType type)
13+
FFLogoImageResult ffLogoPrintImageIM6(FFinstance* instance, FFLogoRequestData* requestData)
2114
{
2215
FF_LIBRARY_LOAD(imageMagick, instance->config.libImageMagick, FF_LOGO_IMAGE_RESULT_INIT_ERROR, "libMagickCore-6.Q16HDRI.so", 8, "libMagickCore-6.Q16.so", 8)
2316
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffResizeImage, ResizeImage, FF_LOGO_IMAGE_RESULT_INIT_ERROR);
24-
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffWriteImage, WriteImage, FF_LOGO_IMAGE_RESULT_INIT_ERROR);
2517

26-
FFLogoImageResult result = ffLogoPrintImageImpl(instance, imageMagick, logoResize, logoWrite, type);
18+
FFIMData imData;
19+
imData.resizeFunc = logoResize;
20+
imData.library = imageMagick;
21+
22+
FFLogoImageResult result = ffLogoPrintImageImpl(instance, requestData, &imData);
2723

2824
dlclose(imageMagick);
2925

src/logo/image/im7.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,22 @@
44
#include <MagickCore/MagickCore.h>
55

66
static FF_LIBRARY_SYMBOL(ResizeImage);
7-
static FF_LIBRARY_SYMBOL(WriteImage);
87

98
static void* logoResize(const void* image, size_t width, size_t height, void* exceptionInfo)
109
{
1110
return ffResizeImage(image, width, height, UndefinedFilter, exceptionInfo);
1211
}
1312

14-
static bool logoWrite(void* imageInfo, void* image, void* exceptionInfo)
15-
{
16-
return ffWriteImage(imageInfo, image, exceptionInfo) == MagickTrue;
17-
}
18-
19-
FFLogoImageResult ffLogoPrintImageIM7(FFinstance* instance, FFLogoType type)
13+
FFLogoImageResult ffLogoPrintImageIM7(FFinstance* instance, FFLogoRequestData* requestData)
2014
{
2115
FF_LIBRARY_LOAD(imageMagick, instance->config.libImageMagick, FF_LOGO_IMAGE_RESULT_INIT_ERROR, "libMagickCore-7.Q16HDRI.so", 11, "libMagickCore-7.Q16.so", 11)
2216
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffResizeImage, ResizeImage, FF_LOGO_IMAGE_RESULT_INIT_ERROR);
23-
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffWriteImage, WriteImage, FF_LOGO_IMAGE_RESULT_INIT_ERROR);
2417

25-
FFLogoImageResult result = ffLogoPrintImageImpl(instance, imageMagick, logoResize, logoWrite, type);
18+
FFIMData imData;
19+
imData.resizeFunc = logoResize;
20+
imData.library = imageMagick;
21+
22+
FFLogoImageResult result = ffLogoPrintImageImpl(instance, requestData, &imData);
2623

2724
dlclose(imageMagick);
2825

0 commit comments

Comments
 (0)