io: implement b_error support for file/directory operations
This commit is contained in:
@@ -61,7 +61,7 @@ static unsigned int b_mode_to_unix_mode(enum b_file_mode mode)
|
||||
return result;
|
||||
}
|
||||
|
||||
enum b_status b_file_open(
|
||||
b_result b_file_open(
|
||||
struct b_directory *root, const struct b_path *path,
|
||||
enum b_file_mode mode, struct b_file **out)
|
||||
{
|
||||
@@ -70,7 +70,7 @@ enum b_status b_file_open(
|
||||
|
||||
if (flags == (unsigned int)-1) {
|
||||
b_path_release(file_path);
|
||||
return B_ERR_INVALID_ARGUMENT;
|
||||
return B_RESULT_ERR(INVALID_ARGUMENT);
|
||||
}
|
||||
|
||||
struct b_path *root_path = NULL;
|
||||
@@ -92,13 +92,14 @@ enum b_status b_file_open(
|
||||
b_path_release(file_path);
|
||||
|
||||
if (!abs_path) {
|
||||
return B_ERR_NO_MEMORY;
|
||||
return B_RESULT_ERR(NO_MEMORY);
|
||||
}
|
||||
|
||||
int fd = open(b_path_ptr(abs_path), flags, 0644);
|
||||
if (fd == -1) {
|
||||
b_path_release(abs_path);
|
||||
return b_status_from_errno(errno, B_ERR_IO_FAILURE);
|
||||
return B_RESULT_STATUS(
|
||||
b_status_from_errno(errno, B_ERR_IO_FAILURE));
|
||||
}
|
||||
|
||||
struct b_file *file
|
||||
@@ -106,7 +107,7 @@ enum b_status b_file_open(
|
||||
if (!file) {
|
||||
close(fd);
|
||||
b_path_release(abs_path);
|
||||
return B_ERR_NO_MEMORY;
|
||||
return B_RESULT_ERR(NO_MEMORY);
|
||||
}
|
||||
|
||||
file->fd = fd;
|
||||
@@ -114,7 +115,7 @@ enum b_status b_file_open(
|
||||
file->mode = mode;
|
||||
|
||||
*out = file;
|
||||
return B_SUCCESS;
|
||||
return B_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
static void generate_tmp_filename(char *out, size_t len)
|
||||
@@ -135,7 +136,7 @@ static void generate_tmp_filename(char *out, size_t len)
|
||||
out[len - 1] = 0;
|
||||
}
|
||||
|
||||
enum b_status b_file_open_temp(enum b_file_mode mode, struct b_file **out)
|
||||
b_result b_file_open_temp(enum b_file_mode mode, struct b_file **out)
|
||||
{
|
||||
mode |= B_FILE_DELETE_ON_CLOSE;
|
||||
|
||||
@@ -147,10 +148,10 @@ enum b_status b_file_open_temp(enum b_file_mode mode, struct b_file **out)
|
||||
snprintf(path, sizeof path, "/tmp/%s", name);
|
||||
struct b_path *rpath = b_path_create_from_cstr(path);
|
||||
|
||||
enum b_status status = b_file_open(
|
||||
b_result status = b_file_open(
|
||||
B_DIRECTORY_ROOT, rpath, mode | B_FILE_CREATE_ONLY, out);
|
||||
|
||||
if (status == B_ERR_NAME_EXISTS) {
|
||||
if (b_error_get_status_code(status) == B_ERR_NAME_EXISTS) {
|
||||
b_path_release(rpath);
|
||||
continue;
|
||||
}
|
||||
@@ -162,7 +163,7 @@ enum b_status b_file_open_temp(enum b_file_mode mode, struct b_file **out)
|
||||
}
|
||||
}
|
||||
|
||||
enum b_status b_file_open_shadow(
|
||||
b_result b_file_open_shadow(
|
||||
struct b_file *original, enum b_file_mode mode, struct b_file **out)
|
||||
{
|
||||
mode |= B_FILE_SHADOW | B_FILE_DELETE_ON_CLOSE | B_FILE_CREATE;
|
||||
@@ -194,16 +195,16 @@ enum b_status b_file_open_shadow(
|
||||
}
|
||||
|
||||
struct b_file *shadow_file;
|
||||
enum b_status status = b_file_open(
|
||||
b_result status = b_file_open(
|
||||
B_DIRECTORY_ROOT, shadow_filepath, mode, &shadow_file);
|
||||
b_path_release(shadow_filepath);
|
||||
|
||||
if (!B_OK(status)) {
|
||||
if (b_result_is_error(status)) {
|
||||
return status;
|
||||
}
|
||||
|
||||
*out = shadow_file;
|
||||
return B_SUCCESS;
|
||||
return B_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
static enum b_status stream_close(struct b_stream *stream)
|
||||
|
||||
Reference in New Issue
Block a user