diff -ru wmii.org/fs.c wmii.fs/fs.c --- wmii.org/fs.c 2006-12-13 11:00:04.000000000 +0100 +++ wmii.fs/fs.c 2006-12-17 23:15:25.414066000 +0100 @@ -29,16 +29,16 @@ typedef struct FileId FileId; struct FileId { FileId *next; -// union { + union { void *ref; -// char *buf; -// Bar *bar; -// Bar **bar_p; -// View *view; -// Client *client; -// Ruleset *rule; -// BlitzColor *col; -// }; + char *buf; + Bar *bar; + Bar **bar_p; + View *view; + Client *client; + Ruleset *rule; + BlitzColor *col; + } content; unsigned int id; unsigned int index; Dirtab tab; @@ -308,11 +308,11 @@ void respond_event(P9Req *r) { FileId *f = r->fid->aux; - if((char*)f->ref) { - r->ofcall.data = f->ref; - r->ofcall.count = strlen((char*)f->ref); + if(f->content.buf) { + r->ofcall.data = (void *)f->content.buf; + r->ofcall.count = strlen(f->content.buf); respond(r, NULL); - f->ref = NULL; + f->content.buf = NULL; }else{ r->aux = pending_event_reads; pending_event_reads = r; @@ -334,10 +334,10 @@ return; for(f=pending_event_fids; f; f=f->next) { fi = f->fid->aux; - slen = fi->ref ? strlen((char*)fi->ref) : 0; - fi->ref = ixp_erealloc(fi->ref, slen + len + 1); - ((char*)fi->ref)[slen] = '\0'; - strcat((char*)fi->ref, buffer); + slen = fi->content.buf ? strlen(fi->content.buf) : 0; + fi->content.buf = (char *) ixp_erealloc(fi->content.buf, slen + len + 1); + (fi->content.buf)[slen] = '\0'; + strcat(fi->content.buf, buffer); } while((aux = pending_event_reads)) { pending_event_reads = pending_event_reads->aux; @@ -391,7 +391,7 @@ file = get_file(); *last = file; last = &file->next; - file->ref = c; + file->content.client = c; file->id = c->id; file->index = idx_of_client(c); file->tab = *dir; @@ -408,7 +408,7 @@ file = get_file(); *last = file; last = &file->next; - file->ref = c; + file->content.client = c; file->id = c->id; file->tab = *dir; file->tab.name = ixp_emallocz(16); @@ -423,7 +423,7 @@ file = get_file(); *last = file; last = &file->next; - file->ref = screen->sel; + file->content.view = screen->sel; file->id = screen->sel->id; file->tab = *dir; file->tab.name = ixp_estrdup("sel"); @@ -434,7 +434,7 @@ file = get_file(); *last = file; last = &file->next; - file->ref = v; + file->content.view = v; file->id = v->id; file->tab = *dir; file->tab.name = ixp_estrdup(v->name); @@ -443,12 +443,12 @@ } break; case FsDBars: - for(b=*(Bar**)parent->ref; b; b=b->next) { + for(b=*parent->content.bar_p; b; b=b->next) { if(!name || !strcmp(name, b->name)) { file = get_file(); *last = file; last = &file->next; - file->ref = b; + file->content.bar = b; file->id = b->id; file->tab = *dir; file->tab.name = ixp_estrdup(b->name); @@ -463,7 +463,7 @@ *last = file; last = &file->next; file->id = 0; - file->ref = parent->ref; + file->content.ref = parent->content.ref; file->index = parent->index; file->tab = *dir; file->tab.name = ixp_estrdup(file->tab.name); @@ -471,15 +471,15 @@ switch(file->tab.type) { case FsDBars: if(!strncmp(file->tab.name, "lbar", 5)) - file->ref = &screen[0].lbar; + file->content.bar_p = &screen[0].lbar; else - file->ref = &screen[0].rbar; + file->content.bar_p = &screen[0].rbar; break; case FsFColRules: - file->ref = &def.colrules; + file->content.rule = &def.colrules; break; case FsFTagRules: - file->ref = &def.tagrules; + file->content.rule = &def.tagrules; break; } if(name) goto LastItem; @@ -499,7 +499,7 @@ FileId *f = get_file(); f->tab = dirtab[FsRoot][0]; f->tab.name = ixp_estrdup("/"); - f->ref = NULL; /* shut up valgrind */ + f->content.ref = NULL; /* shut up valgrind */ r->fid->aux = f; r->fid->qid.type = f->tab.qtype; r->fid->qid.path = QID(f->tab.type, 0); @@ -566,13 +566,13 @@ return 0; case FsFColRules: case FsFTagRules: - return ((Ruleset*)f->ref)->size; + return f->content.rule->size; case FsFKeys: return def.keyssz; case FsFCtags: - return strlen(((Client*)f->ref)->tags); + return strlen(f->content.client->tags); case FsFprops: - return strlen(((Client*)f->ref)->props); + return strlen(f->content.client->props); } } @@ -628,12 +628,12 @@ else{ switch(f->tab.type) { case FsFprops: - write_buf(r, (void *)((Client*)f->ref)->props, strlen(((Client*)f->ref)->props)); + write_buf(r, (void *)f->content.client->props, strlen(f->content.client->props)); respond(r, NULL); return; case FsFColRules: case FsFTagRules: - write_buf(r, (void *)((Ruleset*)f->ref)->string, ((Ruleset*)f->ref)->size); + write_buf(r, (void *)f->content.rule->string, f->content.rule->size); respond(r, NULL); return; case FsFKeys: @@ -641,15 +641,15 @@ respond(r, NULL); return; case FsFCtags: - write_buf(r, (void *)((Client*)f->ref)->tags, strlen(((Client*)f->ref)->tags)); + write_buf(r, (void *)f->content.client->tags, strlen(f->content.client->tags)); respond(r, NULL); return; case FsFTctl: - write_buf(r, (void *)((View*)f->ref)->name, strlen(((View*)f->ref)->name)); + write_buf(r, (void *)f->content.view->name, strlen(f->content.view->name)); respond(r, NULL); return; case FsFBar: - write_buf(r, (void *)((Bar*)f->ref)->buf, strlen(((Bar*)f->ref)->buf)); + write_buf(r, (void *)f->content.bar->buf, strlen(f->content.bar->buf)); respond(r, NULL); return; case FsFRctl: @@ -669,7 +669,7 @@ respond(r, NULL); return; case FsFTindex: - buf = (char *)view_index((View*)f->ref); + buf = (char *)view_index(f->content.view); n = strlen(buf); write_buf(r, (void *)buf, n); respond(r, NULL); @@ -699,7 +699,7 @@ switch(f->tab.type) { case FsFColRules: case FsFTagRules: - write_to_buf(r, &((Ruleset*)f->ref)->string, &((Ruleset*)f->ref)->size, 0); + write_to_buf(r, &f->content.rule->string, &f->content.rule->size, 0); respond(r, NULL); return; case FsFKeys: @@ -708,21 +708,21 @@ return; case FsFCtags: data_to_cstring(r); - i=strlen(((Client*)f->ref)->tags); - write_to_buf(r, &((Client*)f->ref)->tags, &i, 255); + i=strlen(f->content.client->tags); + write_to_buf(r, &f->content.client->tags, &i, 255); r->ofcall.count = i- r->ifcall.offset; respond(r, NULL); return; case FsFBar: /* XXX: This should validate after each write */ - i = strlen(((Bar*)f->ref)->buf); - write_to_buf(r, &((Bar*)f->ref)->buf, &i, 279); + i = strlen(f->content.bar->buf); + write_to_buf(r, &f->content.bar->buf, &i, 279); r->ofcall.count = i - r->ifcall.offset; respond(r, NULL); return; case FsFCctl: data_to_cstring(r); - if((errstr = message_client((Client*)f->ref, r->ifcall.data))) { + if((errstr = message_client(f->content.client, r->ifcall.data))) { respond(r, errstr); return; } @@ -731,7 +731,7 @@ return; case FsFTctl: data_to_cstring(r); - if((errstr = message_view((View*)f->ref, r->ifcall.data))) { + if((errstr = message_view(f->content.view, r->ifcall.data))) { respond(r, errstr); return; } @@ -817,7 +817,7 @@ respond(r, Ebadvalue); return; } - create_bar((Bar**)f->ref, r->ifcall.name); + create_bar(f->content.bar_p, r->ifcall.name); f = lookup_file(f, r->ifcall.name); if(!f) { respond(r, Enofile); @@ -842,7 +842,7 @@ respond(r, Enoperm); return; case FsFBar: - destroy_bar((Bar**)f->next->ref, (Bar*)f->ref); + destroy_bar(f->next->content.bar_p, f->content.bar); draw_bar(screen); respond(r, NULL); break; @@ -859,10 +859,10 @@ switch(f->tab.type) { case FsFColRules: - update_rules(&((Ruleset*)f->ref)->rule, ((Ruleset*)f->ref)->string); + update_rules(&f->content.rule->rule, f->content.rule->string); break; case FsFTagRules: - update_rules(&((Ruleset*)f->ref)->rule, ((Ruleset*)f->ref)->string); + update_rules(&f->content.rule->rule, f->content.rule->string); for(c=client; c; c=c->next) apply_rules(c); update_views(); @@ -871,17 +871,17 @@ update_keys(); break; case FsFCtags: - apply_tags((Client*)f->ref, ((Client*)f->ref)->tags); + apply_tags(f->content.client, f->content.client->tags); update_views(); - draw_frame(((Client*)f->ref)->sel); + draw_frame(f->content.client->sel); break; case FsFBar: - buf = ((Bar*)f->ref)->buf; - i = strlen(((Bar*)f->ref)->buf); - parse_colors(&buf, &i, &((Bar*)f->ref)->brush.color); + buf = f->content.bar->buf; + i = strlen(f->content.bar->buf); + parse_colors(&buf, &i, &f->content.bar->brush.color); while(i > 0 && buf[i - 1] == '\n') buf[--i] = '\0'; - strncpy(((Bar*)f->ref)->text, buf, sizeof(((Bar*)f->ref)->text)); + strncpy(f->content.bar->text, buf, sizeof(f->content.bar->text)); draw_bar(screen); break; case FsFEvent: @@ -890,7 +890,7 @@ ft = *fl; *fl = (*fl)->next; f = ft->fid->aux; - free(f->ref); + free(f->content.buf); free(ft); break; } Only in wmii.fs: fs.c.orig