aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--text.c10
-rw-r--r--text.h2
2 files changed, 11 insertions, 1 deletions
diff --git a/text.c b/text.c
index 5ab53b3..3a875fb 100644
--- a/text.c
+++ b/text.c
@@ -1116,7 +1116,15 @@ Text *text_load(const char *filename) {
return text_load_method(filename, TEXT_LOAD_AUTO);
}
+Text *text_loadat(int dirfd, const char *filename) {
+ return text_loadat_method(dirfd, filename, TEXT_LOAD_AUTO);
+}
+
Text *text_load_method(const char *filename, enum TextLoadMethod method) {
+ return text_loadat_method(AT_FDCWD, filename, method);
+}
+
+Text *text_loadat_method(int dirfd, const char *filename, enum TextLoadMethod method) {
int fd = -1;
size_t size = 0;
Text *txt = calloc(1, sizeof *txt);
@@ -1127,7 +1135,7 @@ Text *text_load_method(const char *filename, enum TextLoadMethod method) {
goto out;
lineno_cache_invalidate(&txt->lines);
if (filename) {
- if ((fd = open(filename, O_RDONLY)) == -1)
+ if ((fd = openat(dirfd, filename, O_RDONLY)) == -1)
goto out;
if (fstat(fd, &txt->info) == -1)
goto out;
diff --git a/text.h b/text.h
index a5816eb..43ff9c1 100644
--- a/text.h
+++ b/text.h
@@ -95,6 +95,7 @@ enum TextLoadMethod {
* @endrst
*/
Text *text_load(const char *filename);
+Text *text_loadat(int dirfd, const char *filename);
/**
* Create a text instance populated with the given file content.
*
@@ -109,6 +110,7 @@ Text *text_load(const char *filename);
* @endrst
*/
Text *text_load_method(const char *filename, enum TextLoadMethod);
+Text *text_loadat_method(int dirfd, const char *filename, enum TextLoadMethod);
/** Release all ressources associated with this text instance. */
void text_free(Text*);
/**