Re: [PATCH v3 10/23] untracked cache: save to an index extension
- From
Duy Nguyen <pclouds@gmail.com>
- Date
- Dec 10, 2014, 00:21 UTC
- Message-ID
- <CACsJy8BGfRPAMK9rFBiHs7w8L_3JwbRsZViDwPPVw6AVjUXg8g@mail.gmail.com>
- In-Reply-To
- <1418047507-22892-12-git-send-email-pclouds@gmail.com>
On Mon, Dec 8, 2014 at 9:04 PM, Nguyễn Thái Ngọc Duy <pclouds@gmail.com> wrote:
Show 16 quoted lines
> +void write_untracked_extension(struct strbuf *out, struct untracked_cache *untracked)
> +{
> + struct ondisk_untracked_cache *ouc;
> + struct write_data wd;
> + unsigned char varbuf[16];
> + int len = 0, varint_len;
> + if (untracked->exclude_per_dir)
> + len = strlen(untracked->exclude_per_dir);
> + ouc = xmalloc(sizeof(*ouc) + len);
> + stat_data_to_disk(&ouc->info_exclude_stat, &untracked->ss_info_exclude.stat);
> + stat_data_to_disk(&ouc->excludes_file_stat, &untracked->ss_excludes_file.stat);
> + hashcpy(ouc->info_exclude_sha1, untracked->ss_info_exclude.sha1);
> + hashcpy(ouc->excludes_file_sha1, untracked->ss_excludes_file.sha1);
> + ouc->dir_flags = htonl(untracked->dir_flags);
> + memcpy(ouc->exclude_per_dir, untracked->exclude_per_dir, len + 1);
> + strbuf_add(out, ouc, sizeof(*ouc) + len);just fyi, this sizeof(*ouc) here is wrong because we write down an unknown number of padding by the compiler after the last field "char exclude_per_dir[1]". I will use offsetof(struct..., exclude_per_dir) next time. Spotted by valgrind.
-- Duy