From 61fa4e4808be5202768d9372df001038c4d2d5e1 Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Mon, 31 May 2021 20:10:04 +0100 Subject: [PATCH] cinera.c: Make ResolvePath() use realpath() --- cinera/cinera.c | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/cinera/cinera.c b/cinera/cinera.c index 8258453..27f78c4 100644 --- a/cinera/cinera.c +++ b/cinera/cinera.c @@ -23,12 +23,14 @@ typedef struct version CINERA_APP_VERSION = { .Major = 0, .Minor = 8, - .Patch = 13 + .Patch = 14 }; #include // NOTE(matt): varargs #include // NOTE(matt): printf, sprintf, vsprintf, fprintf, perror +#define __USE_XOPEN_EXTENDED // NOTE(matt): realpath() #include // NOTE(matt): calloc, malloc, free +#undef __USE_XOPEN_EXTENDED #include // NOTE(matt): getopts #include #include @@ -4074,26 +4076,9 @@ SeekBufferForString(buffer *Buffer, char *String, void ResolvePath(char **Path) { - buffer B; - ClaimBuffer(&B, BID_RESOLVED_PATH, StringLength(*Path) + 1); - CopyStringToBufferNoFormat(&B, Wrap0(*Path)); - - B.Ptr = B.Location; - while(SeekBufferForString(&B, "/../", C_SEEK_FORWARDS, C_SEEK_END) == RC_SUCCESS) - { - char *NextComponentHead = B.Ptr; - int RemainingChars = StringLength(NextComponentHead); - --B.Ptr; - SeekBufferForString(&B, "/", C_SEEK_BACKWARDS, C_SEEK_BEFORE); - SeekBufferForString(&B, "/", C_SEEK_BACKWARDS, C_SEEK_START); - CopyStringToBufferNoFormat(&B, Wrap0(NextComponentHead)); - Clear(B.Ptr, B.Size - (B.Ptr - B.Location)); - B.Ptr -= RemainingChars; - } - + char *Result = realpath(*Path, 0); Free(*Path); - ExtendString0(Path, Wrap0(B.Location)); - DeclaimBuffer(&B); + *Path = Result; } char *