]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libmemlayer/lsetrefresh.c
etheriwl: don't break controller on command flush timeout
[plan9front.git] / sys / src / libmemlayer / lsetrefresh.c
1 #include <u.h>
2 #include <libc.h>
3 #include <draw.h>
4 #include <memdraw.h>
5 #include <memlayer.h>
6
7 int
8 memlsetrefresh(Memimage *i, Refreshfn fn, void *ptr)
9 {
10         Memlayer *l;
11
12         l = i->layer;
13         if(l->refreshfn!=nil && fn!=nil){       /* just change functions */
14                 l->refreshfn = fn;
15                 l->refreshptr = ptr;
16                 return 1;
17         }
18
19         if(l->refreshfn == nil){        /* is using backup image; just free it */
20                 freememimage(l->save);
21                 l->save = nil;
22                 l->refreshfn = fn;
23                 l->refreshptr = ptr;
24                 return 1;
25         }
26
27         l->save = allocmemimage(i->r, i->chan);
28         if(l->save == nil)
29                 return 0;
30         /* easiest way is just to update the entire save area */
31         l->refreshfn(i, i->r, l->refreshptr);
32         l->refreshfn = nil;
33         l->refreshptr = nil;
34         return 1;
35 }