set errno to result ASAP for safety
parent
ec181d51cf
commit
8174aed8e3
|
|
@ -1146,6 +1146,7 @@ void chopPath(char *filePath)
|
||||||
int getFileContent(const char *filename, char **buff, int64_t *file_size)
|
int getFileContent(const char *filename, char **buff, int64_t *file_size)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
int result;
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
if (!isFile(filename))
|
if (!isFile(filename))
|
||||||
|
|
@ -1154,7 +1155,8 @@ int getFileContent(const char *filename, char **buff, int64_t *file_size)
|
||||||
*file_size = 0;
|
*file_size = 0;
|
||||||
if (errno != 0)
|
if (errno != 0)
|
||||||
{
|
{
|
||||||
if (errno == ENOENT)
|
result = errno;
|
||||||
|
if (result == ENOENT)
|
||||||
{
|
{
|
||||||
logError("file: "__FILE__", line: %d, "
|
logError("file: "__FILE__", line: %d, "
|
||||||
"file %s not exist", __LINE__, filename);
|
"file %s not exist", __LINE__, filename);
|
||||||
|
|
@ -1163,9 +1165,9 @@ int getFileContent(const char *filename, char **buff, int64_t *file_size)
|
||||||
{
|
{
|
||||||
logError("file: "__FILE__", line: %d, "
|
logError("file: "__FILE__", line: %d, "
|
||||||
"stat %s fail, errno: %d, error info: %s",
|
"stat %s fail, errno: %d, error info: %s",
|
||||||
__LINE__, filename, errno, STRERROR(errno));
|
__LINE__, filename, result, STRERROR(result));
|
||||||
}
|
}
|
||||||
return errno != 0 ? errno : ENOENT;
|
return result;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -1180,23 +1182,25 @@ int getFileContent(const char *filename, char **buff, int64_t *file_size)
|
||||||
{
|
{
|
||||||
*buff = NULL;
|
*buff = NULL;
|
||||||
*file_size = 0;
|
*file_size = 0;
|
||||||
logError("file: "__FILE__", line: %d, " \
|
result = errno != 0 ? errno : ENOENT;
|
||||||
"open file %s fail, " \
|
logError("file: "__FILE__", line: %d, "
|
||||||
"errno: %d, error info: %s", __LINE__, \
|
"open file %s fail, "
|
||||||
filename, errno, STRERROR(errno));
|
"errno: %d, error info: %s", __LINE__,
|
||||||
return errno != 0 ? errno : ENOENT;
|
filename, result, STRERROR(result));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((*file_size=lseek(fd, 0, SEEK_END)) < 0)
|
if ((*file_size=lseek(fd, 0, SEEK_END)) < 0)
|
||||||
{
|
{
|
||||||
*buff = NULL;
|
*buff = NULL;
|
||||||
*file_size = 0;
|
*file_size = 0;
|
||||||
|
result = errno != 0 ? errno : EIO;
|
||||||
close(fd);
|
close(fd);
|
||||||
logError("file: "__FILE__", line: %d, " \
|
logError("file: "__FILE__", line: %d, "
|
||||||
"lseek file %s fail, " \
|
"lseek file %s fail, "
|
||||||
"errno: %d, error info: %s", __LINE__, \
|
"errno: %d, error info: %s", __LINE__,
|
||||||
filename, errno, STRERROR(errno));
|
filename, result, STRERROR(result));
|
||||||
return errno != 0 ? errno : EIO;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
*buff = (char *)fc_malloc(*file_size + 1);
|
*buff = (char *)fc_malloc(*file_size + 1);
|
||||||
|
|
@ -1204,7 +1208,6 @@ int getFileContent(const char *filename, char **buff, int64_t *file_size)
|
||||||
{
|
{
|
||||||
*file_size = 0;
|
*file_size = 0;
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1212,24 +1215,26 @@ int getFileContent(const char *filename, char **buff, int64_t *file_size)
|
||||||
{
|
{
|
||||||
*buff = NULL;
|
*buff = NULL;
|
||||||
*file_size = 0;
|
*file_size = 0;
|
||||||
|
result = errno != 0 ? errno : EIO;
|
||||||
close(fd);
|
close(fd);
|
||||||
logError("file: "__FILE__", line: %d, " \
|
logError("file: "__FILE__", line: %d, "
|
||||||
"lseek file %s fail, " \
|
"lseek file %s fail, "
|
||||||
"errno: %d, error info: %s", __LINE__, \
|
"errno: %d, error info: %s", __LINE__,
|
||||||
filename, errno, STRERROR(errno));
|
filename, result, STRERROR(result));
|
||||||
return errno != 0 ? errno : EIO;
|
return result;
|
||||||
}
|
}
|
||||||
if (read(fd, *buff, *file_size) != *file_size)
|
if (read(fd, *buff, *file_size) != *file_size)
|
||||||
{
|
{
|
||||||
free(*buff);
|
free(*buff);
|
||||||
*buff = NULL;
|
*buff = NULL;
|
||||||
*file_size = 0;
|
*file_size = 0;
|
||||||
|
result = errno != 0 ? errno : EIO;
|
||||||
close(fd);
|
close(fd);
|
||||||
logError("file: "__FILE__", line: %d, " \
|
logError("file: "__FILE__", line: %d, "
|
||||||
"read from file %s fail, " \
|
"read from file %s fail, "
|
||||||
"errno: %d, error info: %s", __LINE__, \
|
"errno: %d, error info: %s", __LINE__,
|
||||||
filename, errno, STRERROR(errno));
|
filename, result, STRERROR(result));
|
||||||
return errno != 0 ? errno : EIO;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*buff)[*file_size] = '\0';
|
(*buff)[*file_size] = '\0';
|
||||||
|
|
@ -1242,13 +1247,13 @@ int getFileContentEx(const char *filename, char *buff, \
|
||||||
int64_t offset, int64_t *size)
|
int64_t offset, int64_t *size)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
int result;
|
||||||
int read_bytes;
|
int read_bytes;
|
||||||
|
|
||||||
if (*size <= 0)
|
if (*size <= 0)
|
||||||
{
|
{
|
||||||
logError("file: "__FILE__", line: %d, " \
|
logError("file: "__FILE__", line: %d, "
|
||||||
"invalid size: %"PRId64, \
|
"invalid size: %"PRId64, __LINE__, *size);
|
||||||
__LINE__, *size);
|
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1256,33 +1261,36 @@ int getFileContentEx(const char *filename, char *buff, \
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
{
|
{
|
||||||
*size = 0;
|
*size = 0;
|
||||||
logError("file: "__FILE__", line: %d, " \
|
result = errno != 0 ? errno : ENOENT;
|
||||||
"open file %s fail, " \
|
logError("file: "__FILE__", line: %d, "
|
||||||
"errno: %d, error info: %s", __LINE__, \
|
"open file %s fail, "
|
||||||
filename, errno, STRERROR(errno));
|
"errno: %d, error info: %s", __LINE__,
|
||||||
return errno != 0 ? errno : ENOENT;
|
filename, result, STRERROR(result));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (offset > 0 && lseek(fd, offset, SEEK_SET) < 0)
|
if (offset > 0 && lseek(fd, offset, SEEK_SET) < 0)
|
||||||
{
|
{
|
||||||
*size = 0;
|
*size = 0;
|
||||||
|
result = errno != 0 ? errno : EIO;
|
||||||
close(fd);
|
close(fd);
|
||||||
logError("file: "__FILE__", line: %d, " \
|
logError("file: "__FILE__", line: %d, "
|
||||||
"lseek file %s fail, " \
|
"lseek file %s fail, "
|
||||||
"errno: %d, error info: %s", __LINE__, \
|
"errno: %d, error info: %s", __LINE__,
|
||||||
filename, errno, STRERROR(errno));
|
filename, result, STRERROR(result));
|
||||||
return errno != 0 ? errno : EIO;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((read_bytes=read(fd, buff, *size - 1)) < 0)
|
if ((read_bytes=read(fd, buff, *size - 1)) < 0)
|
||||||
{
|
{
|
||||||
*size = 0;
|
*size = 0;
|
||||||
|
result = errno != 0 ? errno : EIO;
|
||||||
close(fd);
|
close(fd);
|
||||||
logError("file: "__FILE__", line: %d, " \
|
logError("file: "__FILE__", line: %d, "
|
||||||
"read from file %s fail, " \
|
"read from file %s fail, "
|
||||||
"errno: %d, error info: %s", __LINE__, \
|
"errno: %d, error info: %s", __LINE__,
|
||||||
filename, errno, STRERROR(errno));
|
filename, result, STRERROR(result));
|
||||||
return errno != 0 ? errno : EIO;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
*size = read_bytes;
|
*size = read_bytes;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue