struct memory_file * make_memory_file(const char *archive_name, void *data, size_t len, const char *owner, const char *group, mode_t mode) { struct memory_file *file; file = xmalloc(sizeof(*file)); file->name = archive_name; file->owner = (owner != NULL) ? xstrdup(owner) : NULL; file->group = (group != NULL) ? xstrdup(group) : NULL; file->data = data; file->len = len; memset(&file->st, 0, sizeof(file->st)); file->st.st_atime = file->st.st_ctime = file->st.st_mtime = time(NULL); file->st.st_nlink = 1; file->st.st_size = len; file->st.st_mode = mode | S_IFREG; update_ids(file); return file; }
struct memory_file * make_memory_file(const char *archive_name, void *data, size_t len, const char *owner, const char *group, mode_t mode) { struct memory_file *file; if ((file = malloc(sizeof(*file))) == NULL) err(2, "malloc failed"); file->name = archive_name; file->owner = owner; file->group = group; file->data = data; file->len = len; memset(&file->st, 0, sizeof(file->st)); file->st.st_atime = file->st.st_ctime = file->st.st_mtime = time(NULL); file->st.st_nlink = 1; file->st.st_size = len; file->st.st_mode = mode | S_IFREG; update_ids(file); return file; }
EXTERN_C void __csirt_unit_init(const char * const name, uint64_t num_inst, uint64_t *inst_id_base, fed_entry *entries) { // TODO(ddoucet): threadsafety if (!csi_init_called) { // TODO(ddoucet): what to call this with? __csi_init("TODO: give the actual name here"); csi_init_called = true; } add_to_fed_table(entries, num_inst); update_ids(num_inst, inst_id_base); __csi_unit_init(name, num_inst); }
struct memory_file * load_memory_file(const char *disk_name, const char *archive_name, const char *owner, const char *group, mode_t mode) { struct memory_file *file; int fd; file = xmalloc(sizeof(*file)); file->name = archive_name; file->owner = (owner != NULL) ? xstrdup(owner) : NULL; file->group = (group != NULL) ? xstrdup(group) : NULL; file->mode = mode; fd = open(disk_name, O_RDONLY); if (fd == -1) err(2, "cannot open file %s", disk_name); if (fstat(fd, &file->st) == -1) err(2, "cannot stat file %s", disk_name); update_ids(file); if ((file->st.st_mode & S_IFMT) != S_IFREG) errx(1, "meta data file %s is not regular file", disk_name); if (file->st.st_size > SSIZE_MAX) errx(2, "meta data file too large: %s", disk_name); file->data = xmalloc(file->st.st_size); if (read(fd, file->data, file->st.st_size) != file->st.st_size) err(2, "cannot read file into memory %s", disk_name); file->len = file->st.st_size; close(fd); return file; }
struct memory_file * load_memory_file(const char *disk_name, const char *archive_name, const char *owner, const char *group, mode_t mode) { struct memory_file *file; int fd; if ((file = malloc(sizeof(*file))) == NULL) err(2, "malloc failed"); file->name = archive_name; file->owner = owner; file->group = group; file->mode = mode; fd = open(disk_name, O_RDONLY); if (fd == -1) err(2, "cannot open file %s", disk_name); if (fstat(fd, &file->st) == -1) err(2, "cannot stat file %s", disk_name); update_ids(file); if (file->st.st_size > SSIZE_MAX || (file->data = malloc(file->st.st_size)) == NULL) errx(2, "cannot allocate memory for file %s", disk_name); if (read(fd, file->data, file->st.st_size) != file->st.st_size) err(2, "cannot read file into memory %s", disk_name); file->len = file->st.st_size; close(fd); return file; }