On Tue, Nov 19, 2013 at 04:17:52PM +0000, Serge Hallyn wrote:
> From: Serge Hallyn <serge.hal...@ubuntu.com>
> 
> Signed-off-by: Serge Hallyn <serge.hal...@ubuntu.com>

Acked-by: Stéphane Graber <stgra...@ubuntu.com>

> ---
>  src/lxc/lxc_user_nic.c | 42 ++++++++++++++++++++++++++++++++----------
>  1 file changed, 32 insertions(+), 10 deletions(-)
> 
> diff --git a/src/lxc/lxc_user_nic.c b/src/lxc/lxc_user_nic.c
> index 7d367c1..7ac3020 100644
> --- a/src/lxc/lxc_user_nic.c
> +++ b/src/lxc/lxc_user_nic.c
> @@ -622,11 +622,19 @@ static bool get_nic_from_line(char *p, char **nic)
>       return true;
>  }
>  
> +struct entry_line {
> +     char *start;
> +     int len;
> +     bool keep;
> +};
> +
>  static bool cull_entries(int fd, char *me, char *t, char *br)
>  {
>       struct stat sb;
>       char *buf, *p, *e, *nic;
>       off_t len;
> +     struct entry_line *entry_lines = NULL;
> +     int i, n = 0;
>  
>       nic = alloca(100);
>  
> @@ -643,22 +651,36 @@ static bool cull_entries(int fd, char *me, char *t, 
> char *br)
>       p = buf;
>       e = buf + len;
>       while ((p = find_line(p, e, me, t, br)) != NULL) {
> +             struct entry_line *newe = realloc(entry_lines, n+1);
> +             if (!newe) {
> +                     free(entry_lines);
> +                     return false;
> +             }
> +             entry_lines = newe;
> +             entry_lines[n].start = p;
> +             entry_lines[n].len = get_eol(p) - entry_lines[n].start;
> +             entry_lines[n].keep = true;
> +             n++;
>               if (!get_nic_from_line(p, &nic))
>                       continue;
> -             if (nic && !nic_exists(nic)) {
> -                     // copy from eol(p)+1..e to p
> -                     char *src = get_eol(p) + 1, *dest = p;
> -                     int diff = src - p;
> -                     while (src < e)
> -                             *(dest++) = *(src)++;
> -                     e -= diff;
> -             } else
> -                     p = get_eol(p) + 1;
> +             if (nic && !nic_exists(nic))
> +                     entry_lines[n-1].keep = false;
> +             p += entry_lines[n-1].len + 1;
>               if (p >= e)
>                       break;
>       }
> +     p = buf;
> +     for (i=0; i<n; i++) {
> +             if (!entry_lines[i].keep)
> +                     continue;
> +             memcpy(p, entry_lines[i].start, entry_lines[i].len);
> +             p += entry_lines[i].len;
> +             *p = '\n';
> +             p++;
> +     }
> +     free(entry_lines);
>       munmap(buf, sb.st_size);
> -     if (ftruncate(fd, e-buf))
> +     if (ftruncate(fd, p-buf))
>               fprintf(stderr, "Failed to set new file size\n");
>       return true;
>  }
> -- 
> 1.8.3.2
> 
> 
> ------------------------------------------------------------------------------
> Shape the Mobile Experience: Free Subscription
> Software experts and developers: Be at the forefront of tech innovation.
> Intel(R) Software Adrenaline delivers strategic insight and game-changing 
> conversations that shape the rapidly evolving mobile landscape. Sign up now. 
> http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
> _______________________________________________
> Lxc-devel mailing list
> Lxc-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/lxc-devel

-- 
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com

Attachment: signature.asc
Description: Digital signature

------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing 
conversations that shape the rapidly evolving mobile landscape. Sign up now. 
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to