}
}
-
+#define MAX_TAR_READ_BUF 1024
int uapi_tar_file(const char *src_path,const char *tar_path,char *tarfilename)
{
//const char *tarfilePath = "%s/exc_%d.tar";
DIR *dir;
struct dirent *entry;
mtar_t tar;
- char buffer[1024];
size_t bytesRead = 0;
FILE *fp;
struct stat file_inf;
long tar_size = 0;
int ret = 0;
-
+ char *buffer = malloc(MAX_TAR_READ_BUF);
+ if (buffer == NULL) return -1;
if(access(src_path, F_OK) == -1)
{
PRINT("%s does not exist!!!\r\n", src_path);
tar_size += file_inf.st_size;
mtar_write_file_header(&tar, entry->d_name, file_inf.st_size);
- while((bytesRead = fread(buffer, 1, sizeof(buffer), fp)) > 0)
+ while((bytesRead = fread(buffer, 1, MAX_TAR_READ_BUF, fp)) > 0)
{
mtar_write_data(&tar, buffer, bytesRead);
- memset(buffer, 0, sizeof(buffer));
+ memset(buffer, 0, MAX_TAR_READ_BUF);
if (bytesRead < 1024 && !feof(fp))
continue;
remove(str);
return -1;
}
- //free(str);
+ free(buffer);
return ret;
}
int uapi_save_exc(void)
{
uint32_t timestamp = get_local_timestamp();
- char *tarfilePath = "exc_%d.tar";
+ char *tarfilePath = "exc_%s_%d.tar";
char str[200] = {0};
- sprintf(str, tarfilePath, timestamp);
+ char buildversion[64]={0};
+ uapi_get_buildversion((uint8_t*)&buildversion[0],sizeof(buildversion));
+ sprintf(str, tarfilePath,buildversion,timestamp);
return uapi_tar_file("/user/exc","/user/tar",str);
}
int mtar_read_header(mtar_t *tar, mtar_header_t *h) {
int err;
- mtar_raw_header_t rh;
+ mtar_raw_header_t *rh = malloc(sizeof(mtar_raw_header_t));
+
+ if(rh == NULL) return MTAR_EFAILURE;
/* Save header position */
tar->last_header = tar->pos;
/* Read raw header */
- err = tread(tar, &rh, sizeof(rh));
+ err = tread(tar, rh, sizeof(mtar_raw_header_t));
if (err) {
+ free(rh);
return err;
}
/* Seek back to start of header */
err = mtar_seek(tar, tar->last_header);
if (err) {
+ free(rh);
return err;
}
/* Load raw header into header struct and return */
- return raw_to_header(h, &rh);
+ err = raw_to_header(h, rh);
+ free(rh);
+ return err;
}
int mtar_write_header(mtar_t *tar, const mtar_header_t *h) {
- mtar_raw_header_t rh;
+ mtar_raw_header_t *rh=malloc(sizeof(mtar_raw_header_t));
+ if (rh == NULL) return MTAR_EFAILURE;
/* Build raw header and write */
- header_to_raw(&rh, h);
+ header_to_raw(rh, h);
tar->remaining_data = h->size;
- return twrite(tar, &rh, sizeof(rh));
+ int err = twrite(tar, rh, sizeof(mtar_raw_header_t));
+ free(rh);
+ return err;
}