[hackers] [libixp] Remove LPL-licensed Plan 9 code. Update build system. Cleanup. || Kris Maglione

From: <hg_AT_suckless.org>
Date: Sat, 10 Oct 2009 19:00:13 +0000 (UTC)

changeset: 112:64309bb2db2a
tag: tip
user: Kris Maglione <jg_AT_suckless.org>
date: Sat Oct 10 14:59:02 2009 -0400
files: config.mk include/ixp.h include/ixp_local.h libixp/LICENSE libixp/LICENSE.p9p libixp/Makefile libixp/intmap.c libixp/map.c libixp/request.c mk/hdr.mk mk/ixp.mk util/compile util/link
description:
Remove LPL-licensed Plan 9 code. Update build system. Cleanup.

diff -r 6c7079a5cc46 -r 64309bb2db2a config.mk
--- a/config.mk Thu Sep 03 14:28:50 2009 -0400
+++ b/config.mk Sat Oct 10 14:59:02 2009 -0400
@@ -13,7 +13,7 @@
   INCLUDE = $(PREFIX)/include
 
 # Includes and libs
-INCPATH = .:$(ROOT)/include:$(INCLUDE):/usr/include
+INCLUDES = -I. -I$(ROOT)/include -I$(INCLUDE) -I/usr/include
 LIBS = -L/usr/lib -lc
 
 # Flags
diff -r 6c7079a5cc46 -r 64309bb2db2a include/ixp.h
--- a/include/ixp.h Thu Sep 03 14:28:50 2009 -0400
+++ b/include/ixp.h Sat Oct 10 14:59:02 2009 -0400
@@ -216,7 +216,7 @@
 # define IxpStat Stat
 #endif
 
-typedef struct Intmap Intmap;
+typedef struct IxpMap IxpMap;
 typedef struct Ixp9Conn Ixp9Conn;
 typedef struct Ixp9Req Ixp9Req;
 typedef struct Ixp9Srv Ixp9Srv;
@@ -543,7 +543,7 @@
 
         /* Implementation details */
         Ixp9Conn* conn;
- Intmap* map;
+ IxpMap* map;
 };
 
 struct Ixp9Req {
diff -r 6c7079a5cc46 -r 64309bb2db2a include/ixp_local.h
--- a/include/ixp_local.h Thu Sep 03 14:28:50 2009 -0400
+++ b/include/ixp_local.h Sat Oct 10 14:59:02 2009 -0400
@@ -1,6 +1,7 @@
 #define IXP_NO_P9_
 #define IXP_P9_STRUCTS
 #include <ixp.h>
+#include <stdbool.h>
 
 char *argv0;
 #define ARGBEGIN \
@@ -30,6 +31,7 @@
 
 #undef nil
 #define nil ((void*)0)
+#define nelem(ary) (sizeof(ary) / sizeof(*ary))
 
 #define thread ixp_thread
 
@@ -45,29 +47,22 @@
 #define muxfree ixp_muxfree
 #define muxrpc ixp_muxrpc
 
-#define initmap ixp_initmap
-#define incref ixp_incref
-#define decref ixp_decref
-#define freemap ixp_freemap
-#define execmap ixp_execmap
-#define lookupkey ixp_lookupkey
-#define insertkey ixp_insertkey
-#define deletekey ixp_deletekey
-#define caninsertkey ixp_caninsertkey
-
 #define errstr ixp_errstr
 #define rerrstr ixp_rerrstr
 #define werrstr ixp_werrstr
 
-typedef struct Intlist Intlist;
+typedef struct IxpMap Map;
+typedef struct MapEnt MapEnt;
+
 typedef IxpTimer Timer;
 
 typedef struct timeval timeval;
 
-struct Intmap {
- ulong nhash;
- Intlist **hash;
- IxpRWLock lk;
+struct IxpMap {
+ MapEnt** bucket;
+ int nhash;
+
+ IxpRWLock lock;
 };
 
 struct IxpTimer {
@@ -78,16 +73,13 @@
         void* aux;
 };
 
-/* intmap.c */
-int caninsertkey(Intmap*, ulong, void*);
-void decref_map(Intmap*);
-void* deletekey(Intmap*, ulong);
-void execmap(Intmap*, void (*destroy)(void*));
-void freemap(Intmap*, void (*destroy)(void*));
-void incref_map(Intmap*);
-void initmap(Intmap*, ulong, void*);
-void* insertkey(Intmap*, ulong, void*);
-void* lookupkey(Intmap*, ulong);
+/* map.c */
+void ixp_mapfree(Map*, void(*)(void*));
+void ixp_mapexec(Map*, void(*)(void*, void*), void*);
+void ixp_mapinit(Map*, MapEnt**, int);
+bool ixp_mapinsert(Map*, ulong, void*, bool);
+void* ixp_mapget(Map*, ulong);
+void* ixp_maprm(Map*, ulong);
 
 /* mux.c */
 void muxfree(IxpClient*);
diff -r 6c7079a5cc46 -r 64309bb2db2a libixp/LICENSE
--- a/libixp/LICENSE Thu Sep 03 14:28:50 2009 -0400
+++ b/libixp/LICENSE Sat Oct 10 14:59:02 2009 -0400
@@ -1,7 +1,6 @@
-MIT/X Consortium License
 
-(C)opyright MMV-MMVI Anselm R. Garbe <garbeam_AT_gmail.com>
-(C)opyright MMVI Kris Maglione <bsdaemon at comcast dot net>
+© 2005-2006 Anselm R. Garbe <garbeam_AT_gmail.com>
+© 2006-2009 Kris Maglione <maglione.k at Gmail>
 
 Permission is hereby granted, free of charge, to any person obtaining a
 copy of this software and associated documentation files (the "Software"),
diff -r 6c7079a5cc46 -r 64309bb2db2a libixp/LICENSE.p9p
--- a/libixp/LICENSE.p9p Thu Sep 03 14:28:50 2009 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,251 +0,0 @@
-The bulk of this software is derived from Plan 9 and is thus distributed
-under the Lucent Public License, Version 1.02, reproduced below.
-
-There are a few exceptions: libutf, libfmt, and libregexp are distributed
-under simpler BSD-like boilerplates. See the LICENSE files in those
-directories. There are other exceptions, also marked with LICENSE files
-in their directories.
-
-The bitmap fonts in the font/luc, font/lucm, font/lucsans, and font/pelm
-directory are copyright B&H Inc. and distributed under more restricted
-terms under agreement with B&H. See the NOTICE file in those directories.
-
-===================================================================
-
-Lucent Public License Version 1.02
-
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS PUBLIC
-LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE
-PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
- a. in the case of Lucent Technologies Inc. ("LUCENT"), the Original
- Program, and
- b. in the case of each Contributor,
-
- i. changes to the Program, and
- ii. additions to the Program;
-
- where such changes and/or additions to the Program were added to the
- Program by such Contributor itself or anyone acting on such
- Contributor's behalf, and the Contributor explicitly consents, in
- accordance with Section 3C, to characterization of the changes and/or
- additions as Contributions.
-
-"Contributor" means LUCENT and any other entity that has Contributed a
-Contribution to the Program.
-
-"Distributor" means a Recipient that distributes the Program,
-modifications to the Program, or any part thereof.
-
-"Licensed Patents" mean patent claims licensable by a Contributor
-which are necessarily infringed by the use or sale of its Contribution
-alone or when combined with the Program.
-
-"Original Program" means the original version of the software
-accompanying this Agreement as released by LUCENT, including source
-code, object code and documentation, if any.
-
-"Program" means the Original Program and Contributions or any part
-thereof
-
-"Recipient" means anyone who receives the Program under this
-Agreement, including all Contributors.
-
-2. GRANT OF RIGHTS
-
- a. Subject to the terms of this Agreement, each Contributor hereby
- grants Recipient a non-exclusive, worldwide, royalty-free copyright
- license to reproduce, prepare derivative works of, publicly display,
- publicly perform, distribute and sublicense the Contribution of such
- Contributor, if any, and such derivative works, in source code and
- object code form.
-
- b. Subject to the terms of this Agreement, each Contributor hereby
- grants Recipient a non-exclusive, worldwide, royalty-free patent
- license under Licensed Patents to make, use, sell, offer to sell,
- import and otherwise transfer the Contribution of such Contributor, if
- any, in source code and object code form. The patent license granted
- by a Contributor shall also apply to the combination of the
- Contribution of that Contributor and the Program if, at the time the
- Contribution is added by the Contributor, such addition of the
- Contribution causes such combination to be covered by the Licensed
- Patents. The patent license granted by a Contributor shall not apply
- to (i) any other combinations which include the Contribution, nor to
- (ii) Contributions of other Contributors. No hardware per se is
- licensed hereunder.
-
- c. Recipient understands that although each Contributor grants the
- licenses to its Contributions set forth herein, no assurances are
- provided by any Contributor that the Program does not infringe the
- patent or other intellectual property rights of any other entity. Each
- Contributor disclaims any liability to Recipient for claims brought by
- any other entity based on infringement of intellectual property rights
- or otherwise. As a condition to exercising the rights and licenses
- granted hereunder, each Recipient hereby assumes sole responsibility
- to secure any other intellectual property rights needed, if any. For
- example, if a third party patent license is required to allow
- Recipient to distribute the Program, it is Recipient's responsibility
- to acquire that license before distributing the Program.
-
- d. Each Contributor represents that to its knowledge it has sufficient
- copyright rights in its Contribution, if any, to grant the copyright
- license set forth in this Agreement.
-
-3. REQUIREMENTS
-
-A. Distributor may choose to distribute the Program in any form under
-this Agreement or under its own license agreement, provided that:
-
- a. it complies with the terms and conditions of this Agreement;
-
- b. if the Program is distributed in source code or other tangible
- form, a copy of this Agreement or Distributor's own license agreement
- is included with each copy of the Program; and
-
- c. if distributed under Distributor's own license agreement, such
- license agreement:
-
- i. effectively disclaims on behalf of all Contributors all warranties
- and conditions, express and implied, including warranties or
- conditions of title and non-infringement, and implied warranties or
- conditions of merchantability and fitness for a particular purpose;
- ii. effectively excludes on behalf of all Contributors all liability
- for damages, including direct, indirect, special, incidental and
- consequential damages, such as lost profits; and
- iii. states that any provisions which differ from this Agreement are
- offered by that Contributor alone and not by any other party.
-
-B. Each Distributor must include the following in a conspicuous
- location in the Program:
-
- Copyright (C) 2003, Lucent Technologies Inc. and others. All Rights
- Reserved.
-
-C. In addition, each Contributor must identify itself as the
-originator of its Contribution in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution.
-Also, each Contributor must agree that the additions and/or changes
-are intended to be a Contribution. Once a Contribution is contributed,
-it may not thereafter be revoked.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain
-responsibilities with respect to end users, business partners and the
-like. While this license is intended to facilitate the commercial use
-of the Program, the Distributor who includes the Program in a
-commercial product offering should do so in a manner which does not
-create potential liability for Contributors. Therefore, if a
-Distributor includes the Program in a commercial product offering,
-such Distributor ("Commercial Distributor") hereby agrees to defend
-and indemnify every Contributor ("Indemnified Contributor") against
-any losses, damages and costs (collectively"Losses") arising from
-claims, lawsuits and other legal actions brought by a third party
-against the Indemnified Contributor to the extent caused by the acts
-or omissions of such Commercial Distributor in connection with its
-distribution of the Program in a commercial product offering. The
-obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement.
-In order to qualify, an Indemnified Contributor must: a) promptly
-notify the Commercial Distributor in writing of such claim, and b)
-allow the Commercial Distributor to control, and cooperate with the
-Commercial Distributor in, the defense and any related settlement
-negotiations. The Indemnified Contributor may participate in any such
-claim at its own expense.
-
-For example, a Distributor might include the Program in a commercial
-product offering, Product X. That Distributor is then a Commercial
-Distributor. If that Commercial Distributor then makes performance
-claims, or offers warranties related to Product X, those performance
-claims and warranties are such Commercial Distributor's responsibility
-alone. Under this section, the Commercial Distributor would have to
-defend claims against the Contributors related to those performance
-claims and warranties, and if a court requires any Contributor to pay
-any damages as a result, the Commercial Distributor must pay those
-damages.
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
-PROVIDED ON AN"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
-WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
-OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and
-distributing the Program and assumes all risks associated with its
-exercise of rights under this Agreement, including but not limited to
-the risks and costs of program errors, compliance with applicable
-laws, damage to or loss of data, programs or equipment, and
-unavailability or interruption of operations.
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR
-ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
-WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
-DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
-HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-7. EXPORT CONTROL
-
-Recipient agrees that Recipient alone is responsible for compliance
-with the United States export administration regulations (and the
-export control laws and regulation of any other countries).
-
-8. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of
-the remainder of the terms of this Agreement, and without further
-action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against a Contributor with
-respect to a patent applicable to software (including a cross-claim or
-counterclaim in a lawsuit), then any patent licenses granted by that
-Contributor to such Recipient under this Agreement shall terminate as
-of the date such litigation is filed. In addition, if Recipient
-institutes patent litigation against any entity (including a
-cross-claim or counterclaim in a lawsuit) alleging that the Program
-itself (excluding combinations of the Program with other software or
-hardware) infringes such Recipient's patent(s), then such Recipient's
-rights granted under Section 2(b) shall terminate as of the date such
-litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it
-fails to comply with any of the material terms or conditions of this
-Agreement and does not cure such failure in a reasonable period of
-time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use
-and distribution of the Program as soon as reasonably practicable.
-However, Recipient's obligations under this Agreement and any licenses
-granted by Recipient relating to the Program shall continue and
-survive.
-
-LUCENT may publish new versions (including revisions) of this
-Agreement from time to time. Each new version of the Agreement will be
-given a distinguishing version number. The Program (including
-Contributions) may always be distributed subject to the version of the
-Agreement under which it was received. In addition, after a new
-version of the Agreement is published, Contributor may elect to
-distribute the Program (including its Contributions) under the new
-version. No one other than LUCENT has the right to modify this
-Agreement. Except as expressly stated in Sections 2(a) and 2(b) above,
-Recipient receives no rights or licenses to the intellectual property
-of any Contributor under this Agreement, whether expressly, by
-implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.
-
-This Agreement is governed by the laws of the State of New York and
-the intellectual property laws of the United States of America. No
-party to this Agreement will bring a legal action under this Agreement
-more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.
-
diff -r 6c7079a5cc46 -r 64309bb2db2a libixp/Makefile
--- a/libixp/Makefile Thu Sep 03 14:28:50 2009 -0400
+++ b/libixp/Makefile Sat Oct 10 14:59:02 2009 -0400
@@ -7,7 +7,7 @@
 OBJ = client \
         convert \
         error \
- intmap \
+ map \
         message \
         request \
         rpc \
diff -r 6c7079a5cc46 -r 64309bb2db2a libixp/intmap.c
--- a/libixp/intmap.c Thu Sep 03 14:28:50 2009 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-/* This file is derived from src/lib9p/intmap.c from plan9port */
-/* See LICENCE.p9p for terms of use */
-
-#include <stdlib.h>
-#include "ixp_local.h"
-
-struct Intlist {
- ulong id;
- void* aux;
- Intlist* link;
- uint ref;
-};
-
-static ulong
-hashid(Intmap *map, ulong id) {
- return id%map->nhash;
-}
-
-static void
-nop(void *v) {
- USED(v);
-}
-
-void
-initmap(Intmap *m, ulong nhash, void *hash) {
- m->nhash = nhash;
- m->hash = hash;
-
- thread->initrwlock(&m->lk);
-}
-
-static Intlist**
-llookup(Intmap *map, ulong id) {
- Intlist **lf;
-
- for(lf=&map->hash[hashid(map, id)]; *lf; lf=&(*lf)->link)
- if((*lf)->id == id)
- break;
- return lf;
-}
-
-void
-freemap(Intmap *map, void (*destroy)(void*)) {
- int i;
- Intlist *p, *nlink;
-
- if(destroy == nil)
- destroy = nop;
- for(i=0; i<map->nhash; i++){
- for(p=map->hash[i]; p; p=nlink){
- nlink = p->link;
- destroy(p->aux);
- free(p);
- }
- }
-
- thread->rwdestroy(&map->lk);
-}
-
-void
-execmap(Intmap *map, void (*run)(void*)) {
- int i;
- Intlist *p, *nlink;
-
- thread->rlock(&map->lk);
- for(i=0; i<map->nhash; i++){
- for(p=map->hash[i]; p; p=nlink){
- thread->runlock(&map->lk);
- nlink = p->link;
- run(p->aux);
- thread->rlock(&map->lk);
- }
- }
- thread->runlock(&map->lk);
-}
-
-void*
-lookupkey(Intmap *map, ulong id) {
- Intlist *f;
- void *v;
-
- thread->rlock(&map->lk);
- if((f = *llookup(map, id)))
- v = f->aux;
- else
- v = nil;
- thread->runlock(&map->lk);
- return v;
-}
-
-void*
-insertkey(Intmap *map, ulong id, void *v) {
- Intlist *f;
- void *ov;
- ulong h;
-
- thread->wlock(&map->lk);
- if((f = *llookup(map, id))){
- /* no decrement for ov because we're returning it */
- ov = f->aux;
- f->aux = v;
- }else{
- f = emallocz(sizeof *f);
- f->id = id;
- f->aux = v;
- h = hashid(map, id);
- f->link = map->hash[h];
- map->hash[h] = f;
- ov = nil;
- }
- thread->wunlock(&map->lk);
- return ov;
-}
-
-int
-caninsertkey(Intmap *map, ulong id, void *v) {
- Intlist *f;
- int rv;
- ulong h;
-
- thread->wlock(&map->lk);
- if(*llookup(map, id))
- rv = 0;
- else{
- f = emallocz(sizeof *f);
- f->id = id;
- f->aux = v;
- h = hashid(map, id);
- f->link = map->hash[h];
- map->hash[h] = f;
- rv = 1;
- }
- thread->wunlock(&map->lk);
- return rv;
-}
-
-void*
-deletekey(Intmap *map, ulong id) {
- Intlist **lf, *f;
- void *ov;
-
- thread->wlock(&map->lk);
- if((f = *(lf = llookup(map, id)))){
- ov = f->aux;
- *lf = f->link;
- free(f);
- }else
- ov = nil;
- thread->wunlock(&map->lk);
- return ov;
-}
diff -r 6c7079a5cc46 -r 64309bb2db2a libixp/map.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libixp/map.c Sat Oct 10 14:59:02 2009 -0400
@@ -0,0 +1,132 @@
+/* Written by Kris Maglione */
+/* Public domain */
+#include <stdlib.h>
+#include "ixp_local.h"
+
+/* Edit s/^([a-zA-Z].*)\n([a-z].*) {/\1 \2;/g x/^([^a-zA-Z]|static|$)/-+d s/ (\*map|val|*str)//g */
+
+struct MapEnt {
+ ulong hash;
+ const char* key;
+ void* val;
+ MapEnt* next;
+};
+
+MapEnt *NM;
+
+static void
+insert(MapEnt **e, ulong val, const char *key) {
+ MapEnt *te;
+
+ te = emallocz(sizeof *te);
+ te->hash = val;
+ te->key = key;
+ te->next = *e;
+ *e = te;
+}
+
+static MapEnt**
+map_getp(Map *map, ulong val, bool create, bool *exists) {
+ MapEnt **e;
+
+ e = &map->bucket[val%map->nhash];
+ for(; *e; e = &(*e)->next)
+ if((*e)->hash >= val) break;
+ if(exists)
+ *exists = *e && (*e)->hash == val;
+
+ if(*e == nil || (*e)->hash != val) {
+ if(create)
+ insert(e, val, nil);
+ else
+ e = &NM;
+ }
+ return e;
+}
+
+void
+ixp_mapfree(Map *map, void (*destroy)(void*)) {
+ int i;
+ MapEnt *e;
+
+ thread->wlock(&map->lock);
+ for(i=0; i < map->nhash; i++)
+ while((e = map->bucket[i])) {
+ map->bucket[i] = e->next;
+ if(destroy)
+ destroy(e->val);
+ free(e);
+ }
+ thread->wunlock(&map->lock);
+ thread->rwdestroy(&map->lock);
+}
+
+void
+ixp_mapexec(Map *map, void (*run)(void*, void*), void *context) {
+ int i;
+ MapEnt *e;
+
+ thread->rlock(&map->lock);
+ for(i=0; i < map->nhash; i++)
+ for(e=map->bucket[i]; e; e=e->next)
+ run(context, e->val);
+ thread->runlock(&map->lock);
+}
+
+void
+ixp_mapinit(Map *map, MapEnt **buckets, int nbuckets) {
+
+ map->bucket = buckets;
+ map->nhash = nbuckets;
+
+ thread->initrwlock(&map->lock);
+}
+
+bool
+ixp_mapinsert(Map *map, ulong key, void *val, bool overwrite) {
+ MapEnt *e;
+ bool existed, res;
+
+ res = true;
+ thread->wlock(&map->lock);
+ e = *map_getp(map, key, true, &existed);
+ if(existed && !overwrite)
+ res = false;
+ else
+ e->val = val;
+ thread->wunlock(&map->lock);
+ return res;
+}
+
+void*
+ixp_mapget(Map *map, ulong val) {
+ MapEnt *e;
+ void *res;
+
+ thread->rlock(&map->lock);
+ e = *map_getp(map, val, false, nil);
+ res = e ? e->val : nil;
+ thread->runlock(&map->lock);
+ return res;
+}
+
+void*
+ixp_maprm(Map *map, ulong val) {
+ MapEnt **e, *te;
+ void *ret;
+
+ ret = nil;
+ thread->wlock(&map->lock);
+ e = map_getp(map, val, false, nil);
+ if(*e) {
+ te = *e;
+ ret = te->val;
+ *e = te->next;
+ thread->wunlock(&map->lock);
+ free(te);
+ }
+ else
+ thread->wunlock(&map->lock);
+ return ret;
+}
+
diff -r 6c7079a5cc46 -r 64309bb2db2a libixp/request.c
--- a/libixp/request.c Thu Sep 03 14:28:50 2009 -0400
+++ b/libixp/request.c Sat Oct 10 14:59:02 2009 -0400
@@ -42,68 +42,69 @@
 };
 
 struct Ixp9Conn {
- Intmap tagmap;
- Intmap fidmap;
- void *taghash[TAG_BUCKETS];
- void *fidhash[FID_BUCKETS];
- Ixp9Srv *srv;
- IxpConn *conn;
- IxpMutex rlock, wlock;
+ Map tagmap;
+ Map fidmap;
+ MapEnt* taghash[TAG_BUCKETS];
+ MapEnt* fidhash[FID_BUCKETS];
+ Ixp9Srv* srv;
+ IxpConn* conn;
+ IxpMutex rlock;
+ IxpMutex wlock;
         IxpMsg rmsg;
         IxpMsg wmsg;
         int ref;
 };
 
 static void
-decref_p9conn(Ixp9Conn *pc) {
- thread->lock(&pc->wlock);
- if(--pc->ref > 0) {
- thread->unlock(&pc->wlock);
+decref_p9conn(Ixp9Conn *p9conn) {
+ thread->lock(&p9conn->wlock);
+ if(--p9conn->ref > 0) {
+ thread->unlock(&p9conn->wlock);
                 return;
         }
- thread->unlock(&pc->wlock);
+ thread->unlock(&p9conn->wlock);
 
- assert(pc->conn == nil);
+ assert(p9conn->conn == nil);
 
- thread->mdestroy(&pc->rlock);
- thread->mdestroy(&pc->wlock);
+ thread->mdestroy(&p9conn->rlock);
+ thread->mdestroy(&p9conn->wlock);
 
- freemap(&pc->tagmap, nil);
- freemap(&pc->fidmap, nil);
+ ixp_mapfree(&p9conn->tagmap, nil);
+ ixp_mapfree(&p9conn->fidmap, nil);
 
- free(pc->rmsg.data);
- free(pc->wmsg.data);
- free(pc);
+ free(p9conn->rmsg.data);
+ free(p9conn->wmsg.data);
+ free(p9conn);
 }
 
 static void*
-createfid(Intmap *map, int fid, Ixp9Conn *pc) {
+createfid(Map *map, int fid, Ixp9Conn *p9conn) {
         Fid *f;
 
         f = emallocz(sizeof *f);
- pc->ref++;
- f->conn = pc;
+ p9conn->ref++;
+ f->conn = p9conn;
         f->fid = fid;
         f->omode = -1;
         f->map = map;
- if(caninsertkey(map, fid, f))
+ if(ixp_mapinsert(map, fid, f, false))
                 return f;
         free(f);
         return nil;
 }
 
 static int
-destroyfid(Ixp9Conn *pc, ulong fid) {
+destroyfid(Ixp9Conn *p9conn, ulong fid) {
         Fid *f;
 
- f = deletekey(&pc->fidmap, fid);
+ f = ixp_maprm(&p9conn->fidmap, fid);
         if(f == nil)
                 return 0;
 
- if(pc->srv->freefid)
- pc->srv->freefid(f);
+ if(p9conn->srv->freefid)
+ p9conn->srv->freefid(f);
 
- decref_p9conn(pc);
+ decref_p9conn(p9conn);
         free(f);
         return 1;
 }
@@ -111,26 +112,26 @@
 static void
 handlefcall(IxpConn *c) {
         Fcall fcall = {0};
- Ixp9Conn *pc;
+ Ixp9Conn *p9conn;
         Ixp9Req *req;
 
- pc = c->aux;
+ p9conn = c->aux;
 
- thread->lock(&pc->rlock);
- if(ixp_recvmsg(c->fd, &pc->rmsg) == 0)
+ thread->lock(&p9conn->rlock);
+ if(ixp_recvmsg(c->fd, &p9conn->rmsg) == 0)
                 goto Fail;
- if(ixp_msg2fcall(&pc->rmsg, &fcall) == 0)
+ if(ixp_msg2fcall(&p9conn->rmsg, &fcall) == 0)
                 goto Fail;
- thread->unlock(&pc->rlock);
+ thread->unlock(&p9conn->rlock);
 
         req = emallocz(sizeof *req);
- pc->ref++;
- req->conn = pc;
- req->srv = pc->srv;
+ p9conn->ref++;
+ req->conn = p9conn;
+ req->srv = p9conn->srv;
         req->ifcall = fcall;
- pc->conn = c;
+ p9conn->conn = c;
 
- if(caninsertkey(&pc->tagmap, fcall.hdr.tag, req) == 0) {
+ if(!ixp_mapinsert(&p9conn->tagmap, fcall.hdr.tag, req, false)) {
                 respond(req, Eduptag);
                 return;
         }
@@ -139,18 +140,18 @@
         return;
 
 Fail:
- thread->unlock(&pc->rlock);
+ thread->unlock(&p9conn->rlock);
         ixp_hangup(c);
         return;
 }
 
 static void
 handlereq(Ixp9Req *r) {
- Ixp9Conn *pc;
+ Ixp9Conn *p9conn;
         Ixp9Srv *srv;
 
- pc = r->conn;
- srv = pc->srv;
+ p9conn = r->conn;
+ srv = p9conn->srv;
 
         ixp_printfcall(&r->ifcall);
 
@@ -169,7 +170,7 @@
                 respond(r, nil);
                 break;
         case TAttach:
- if(!(r->fid = createfid(&pc->fidmap, r->ifcall.hdr.fid, pc))) {
+ if(!(r->fid = createfid(&p9conn->fidmap, r->ifcall.hdr.fid, p9conn))) {
                         respond(r, Edupfid);
                         return;
                 }
@@ -177,7 +178,7 @@
                 srv->attach(r);
                 break;
         case TClunk:
- if(!(r->fid = lookupkey(&pc->fidmap, r->ifcall.hdr.fid))) {
+ if(!(r->fid = ixp_mapget(&p9conn->fidmap, r->ifcall.hdr.fid))) {
                         respond(r, Enofid);
                         return;
                 }
@@ -188,7 +189,7 @@
                 srv->clunk(r);
                 break;
         case TFlush:
- if(!(r->oldreq = lookupkey(&pc->tagmap, r->ifcall.tflush.oldtag))) {
+ if(!(r->oldreq = ixp_mapget(&p9conn->tagmap, r->ifcall.tflush.oldtag))) {
                         respond(r, Enotag);
                         return;
                 }
@@ -199,7 +200,7 @@
                 srv->flush(r);
                 break;
         case TCreate:
- if(!(r->fid = lookupkey(&pc->fidmap, r->ifcall.hdr.fid))) {
+ if(!(r->fid = ixp_mapget(&p9conn->fidmap, r->ifcall.hdr.fid))) {
                         respond(r, Enofid);
                         return;
                 }
@@ -211,14 +212,14 @@
                         respond(r, Enotdir);
                         return;
                 }
- if(!pc->srv->create) {
+ if(!p9conn->srv->create) {
                         respond(r, Enofunc);
                         return;
                 }
- pc->srv->create(r);
+ p9conn->srv->create(r);
                 break;
         case TOpen:
- if(!(r->fid = lookupkey(&pc->fidmap, r->ifcall.hdr.fid))) {
+ if(!(r->fid = ixp_mapget(&p9conn->fidmap, r->ifcall.hdr.fid))) {
                         respond(r, Enofid);
                         return;
                 }
@@ -227,14 +228,14 @@
                         return;
                 }
                 r->ofcall.ropen.qid = r->fid->qid;
- if(!pc->srv->open) {
+ if(!p9conn->srv->open) {
                         respond(r, Enofunc);
                         return;
                 }
- pc->srv->open(r);
+ p9conn->srv->open(r);
                 break;
         case TRead:
- if(!(r->fid = lookupkey(&pc->fidmap, r->ifcall.hdr.fid))) {
+ if(!(r->fid = ixp_mapget(&p9conn->fidmap, r->ifcall.hdr.fid))) {
                         respond(r, Enofid);
                         return;
                 }
@@ -242,36 +243,36 @@
                         respond(r, Enoread);
                         return;
                 }
- if(!pc->srv->read) {
+ if(!p9conn->srv->read) {
                         respond(r, Enofunc);
                         return;
                 }
- pc->srv->read(r);
+ p9conn->srv->read(r);
                 break;
         case TRemove:
- if(!(r->fid = lookupkey(&pc->fidmap, r->ifcall.hdr.fid))) {
+ if(!(r->fid = ixp_mapget(&p9conn->fidmap, r->ifcall.hdr.fid))) {
                         respond(r, Enofid);
                         return;
                 }
- if(!pc->srv->remove) {
+ if(!p9conn->srv->remove) {
                         respond(r, Enofunc);
                         return;
                 }
- pc->srv->remove(r);
+ p9conn->srv->remove(r);
                 break;
         case TStat:
- if(!(r->fid = lookupkey(&pc->fidmap, r->ifcall.hdr.fid))) {
+ if(!(r->fid = ixp_mapget(&p9conn->fidmap, r->ifcall.hdr.fid))) {
                         respond(r, Enofid);
                         return;
                 }
- if(!pc->srv->stat) {
+ if(!p9conn->srv->stat) {
                         respond(r, Enofunc);
                         return;
                 }
- pc->srv->stat(r);
+ p9conn->srv->stat(r);
                 break;
         case TWalk:
- if(!(r->fid = lookupkey(&pc->fidmap, r->ifcall.hdr.fid))) {
+ if(!(r->fid = ixp_mapget(&p9conn->fidmap, r->ifcall.hdr.fid))) {
                         respond(r, Enofid);
                         return;
                 }
@@ -284,20 +285,20 @@
                         return;
                 }
                 if((r->ifcall.hdr.fid != r->ifcall.twalk.newfid)) {
- if(!(r->newfid = createfid(&pc->fidmap, r->ifcall.twalk.newfid, pc))) {
+ if(!(r->newfid = createfid(&p9conn->fidmap, r->ifcall.twalk.newfid, p9conn))) {
                                 respond(r, Edupfid);
                                 return;
                         }
                 }else
                         r->newfid = r->fid;
- if(!pc->srv->walk) {
+ if(!p9conn->srv->walk) {
                         respond(r, Enofunc);
                         return;
                 }
- pc->srv->walk(r);
+ p9conn->srv->walk(r);
                 break;
         case TWrite:
- if(!(r->fid = lookupkey(&pc->fidmap, r->ifcall.hdr.fid))) {
+ if(!(r->fid = ixp_mapget(&p9conn->fidmap, r->ifcall.hdr.fid))) {
                         respond(r, Enofid);
                         return;
                 }
@@ -305,14 +306,14 @@
                         respond(r, "write on fid not opened for writing");
                         return;
                 }
- if(!pc->srv->write) {
+ if(!p9conn->srv->write) {
                         respond(r, Enofunc);
                         return;
                 }
- pc->srv->write(r);
+ p9conn->srv->write(r);
                 break;
         case TWStat:
- if(!(r->fid = lookupkey(&pc->fidmap, r->ifcall.hdr.fid))) {
+ if(!(r->fid = ixp_mapget(&p9conn->fidmap, r->ifcall.hdr.fid))) {
                         respond(r, Enofid);
                         return;
                 }
@@ -336,7 +337,7 @@
                         respond(r, "wstat on DMDIR bit");
                         return;
                 }
- pc->srv->wstat(r);
+ p9conn->srv->wstat(r);
                 break;
         /* Still to be implemented: auth */
         }
@@ -344,10 +345,10 @@
 
 void
 respond(Ixp9Req *r, const char *error) {
- Ixp9Conn *pc;
+ Ixp9Conn *p9conn;
         int msize;
 
- pc = r->conn;
+ p9conn = r->conn;
 
         switch(r->ifcall.hdr.type) {
         default:
@@ -358,27 +359,27 @@
                 assert(error == nil);
                 free(r->ifcall.version.version);
 
- thread->lock(&pc->rlock);
- thread->lock(&pc->wlock);
+ thread->lock(&p9conn->rlock);
+ thread->lock(&p9conn->wlock);
                 msize = min(r->ofcall.version.msize, IXP_MAX_MSG);
- pc->rmsg.data = erealloc(pc->rmsg.data, msize);
- pc->wmsg.data = erealloc(pc->wmsg.data, msize);
- pc->rmsg.size = msize;
- pc->wmsg.size = msize;
- thread->unlock(&pc->wlock);
- thread->unlock(&pc->rlock);
+ p9conn->rmsg.data = erealloc(p9conn->rmsg.data, msize);
+ p9conn->wmsg.data = erealloc(p9conn->wmsg.data, msize);
+ p9conn->rmsg.size = msize;
+ p9conn->wmsg.size = msize;
+ thread->unlock(&p9conn->wlock);
+ thread->unlock(&p9conn->rlock);
                 r->ofcall.version.msize = msize;
                 break;
         case TAttach:
                 if(error)
- destroyfid(pc, r->fid->fid);
+ destroyfid(p9conn, r->fid->fid);
                 free(r->ifcall.tattach.uname);
                 free(r->ifcall.tattach.aname);
                 break;
         case TOpen:
         case TCreate:
                 if(!error) {
- r->ofcall.ropen.iounit = pc->rmsg.size - 24;
+ r->ofcall.ropen.iounit = p9conn->rmsg.size - 24;
                         r->fid->iounit = r->ofcall.ropen.iounit;
                         r->fid->omode = r->ifcall.topen.mode;
                         r->fid->qid = r->ofcall.ropen.qid;
@@ -388,7 +389,7 @@
         case TWalk:
                 if(error || r->ofcall.rwalk.nwqid < r->ifcall.twalk.nwname) {
                         if(r->ifcall.hdr.fid != r->ifcall.twalk.newfid && r->newfid)
- destroyfid(pc, r->newfid->fid);
+ destroyfid(p9conn, r->newfid->fid);
                         if(!error && r->ofcall.rwalk.nwqid == 0)
                                 error = Enofile;
                 }else{
@@ -404,14 +405,14 @@
                 break;
         case TRemove:
                 if(r->fid)
- destroyfid(pc, r->fid->fid);
+ destroyfid(p9conn, r->fid->fid);
                 break;
         case TClunk:
                 if(r->fid)
- destroyfid(pc, r->fid->fid);
+ destroyfid(p9conn, r->fid->fid);
                 break;
         case TFlush:
- if((r->oldreq = lookupkey(&pc->tagmap, r->ifcall.tflush.oldtag)))
+ if((r->oldreq = ixp_mapget(&p9conn->tagmap, r->ifcall.tflush.oldtag)))
                         respond(r->oldreq, Eintr);
                 break;
         case TWStat:
@@ -432,14 +433,14 @@
                 r->ofcall.error.ename = (char*)error;
         }
 
- deletekey(&pc->tagmap, r->ifcall.hdr.tag);;
+ ixp_maprm(&p9conn->tagmap, r->ifcall.hdr.tag);;
 
- if(pc->conn) {
- thread->lock(&pc->wlock);
- msize = ixp_fcall2msg(&pc->wmsg, &r->ofcall);
- if(ixp_sendmsg(pc->conn->fd, &pc->wmsg) != msize)
- ixp_hangup(pc->conn);
- thread->unlock(&pc->wlock);
+ if(p9conn->conn) {
+ thread->lock(&p9conn->wlock);
+ msize = ixp_fcall2msg(&p9conn->wmsg, &r->ofcall);
+ if(ixp_sendmsg(p9conn->conn->fd, &p9conn->wmsg) != msize)
+ ixp_hangup(p9conn->conn);
+ thread->unlock(&p9conn->wlock);
         }
 
         switch(r->ofcall.hdr.type) {
@@ -451,82 +452,93 @@
                 break;
         }
         free(r);
- decref_p9conn(pc);
+ decref_p9conn(p9conn);
 }
 
 /* Flush a pending request */
 static void
-voidrequest(void *t) {
- Ixp9Req *r, *tr;
- Ixp9Conn *pc;
+voidrequest(void *context, void *arg) {
+ Ixp9Req *orig_req, *flush_req;
+ Ixp9Conn *conn;
 
- r = t;
- pc = r->conn;
- pc->ref++;
+ orig_req = arg;
+ conn = orig_req->conn;
+ conn->ref++;
 
- tr = emallocz(sizeof *tr);
- tr->ifcall.hdr.type = TFlush;
- tr->ifcall.hdr.tag = IXP_NOTAG;
- tr->ifcall.tflush.oldtag = r->ifcall.hdr.tag;
- tr->conn = pc;
- handlereq(tr);
+ flush_req = emallocz(sizeof *orig_req);
+ flush_req->ifcall.hdr.type = TFlush;
+ flush_req->ifcall.hdr.tag = IXP_NOTAG;
+ flush_req->ifcall.tflush.oldtag = orig_req->ifcall.hdr.tag;
+ flush_req->conn = conn;
+
+ flush_req->aux = *(void**)context;
+ *(void**)context = flush_req;
 }
 
 /* Clunk an open Fid */
 static void
-voidfid(void *t) {
- Ixp9Conn *pc;
- Ixp9Req *tr;
- Fid *f;
+voidfid(void *context, void *arg) {
+ Ixp9Conn *p9conn;
+ Ixp9Req *clunk_req;
+ Fid *fid;
 
- f = t;
- pc = f->conn;
- pc->ref++;
+ fid = arg;
+ p9conn = fid->conn;
+ p9conn->ref++;
 
- tr = emallocz(sizeof *tr);
- tr->ifcall.hdr.type = TClunk;
- tr->ifcall.hdr.tag = IXP_NOTAG;
- tr->ifcall.hdr.fid = f->fid;
- tr->fid = f;
- tr->conn = pc;
- handlereq(tr);
+ clunk_req = emallocz(sizeof *clunk_req);
+ clunk_req->ifcall.hdr.type = TClunk;
+ clunk_req->ifcall.hdr.tag = IXP_NOTAG;
+ clunk_req->ifcall.hdr.fid = fid->fid;
+ clunk_req->fid = fid;
+ clunk_req->conn = p9conn;
+
+ clunk_req->aux = *(void**)context;
+ *(void**)context = clunk_req;
 }
 
 static void
 cleanupconn(IxpConn *c) {
- Ixp9Conn *pc;
+ Ixp9Conn *p9conn;
+ Ixp9Req *req, *r;
 
- pc = c->aux;
- pc->conn = nil;
- if(pc->ref > 1) {
- execmap(&pc->tagmap, voidrequest);
- execmap(&pc->fidmap, voidfid);
+ p9conn = c->aux;
+ p9conn->conn = nil;
+ req = nil;
+ if(p9conn->ref > 1) {
+ ixp_mapexec(&p9conn->fidmap, voidfid, &req);
+ ixp_mapexec(&p9conn->tagmap, voidrequest, &req);
         }
- decref_p9conn(pc);
+ while((r = req)) {
+ req = r->aux;
+ r->aux = nil;
+ handlereq(r);
+ }
+ decref_p9conn(p9conn);
 }
 
 /* Handle incoming 9P connections */
 void
 serve_9pcon(IxpConn *c) {
- Ixp9Conn *pc;
+ Ixp9Conn *p9conn;
         int fd;
 
         fd = accept(c->fd, nil, nil);
         if(fd < 0)
                 return;
 
- pc = emallocz(sizeof *pc);
- pc->ref++;
- pc->srv = c->aux;
- pc->rmsg.size = 1024;
- pc->wmsg.size = 1024;
- pc->rmsg.data = emalloc(pc->rmsg.size);
- pc->wmsg.data = emalloc(pc->wmsg.size);
+ p9conn = emallocz(sizeof *p9conn);
+ p9conn->ref++;
+ p9conn->srv = c->aux;
+ p9conn->rmsg.size = 1024;
+ p9conn->wmsg.size = 1024;
+ p9conn->rmsg.data = emalloc(p9conn->rmsg.size);
+ p9conn->wmsg.data = emalloc(p9conn->wmsg.size);
 
- initmap(&pc->tagmap, TAG_BUCKETS, &pc->taghash);
- initmap(&pc->fidmap, FID_BUCKETS, &pc->fidhash);
- thread->initmutex(&pc->rlock);
- thread->initmutex(&pc->wlock);
+ ixp_mapinit(&p9conn->tagmap, p9conn->taghash, nelem(p9conn->taghash));
+ ixp_mapinit(&p9conn->fidmap, p9conn->fidhash, nelem(p9conn->fidhash));
+ thread->initmutex(&p9conn->rlock);
+ thread->initmutex(&p9conn->wlock);
 
- ixp_listen(c->srv, fd, pc, handlefcall, cleanupconn);
+ ixp_listen(c->srv, fd, p9conn, handlefcall, cleanupconn);
 }
diff -r 6c7079a5cc46 -r 64309bb2db2a mk/hdr.mk
--- a/mk/hdr.mk Thu Sep 03 14:28:50 2009 -0400
+++ b/mk/hdr.mk Sat Oct 10 14:59:02 2009 -0400
@@ -1,11 +1,21 @@
 FILTER = cat
-EXCFLAGS = -I$$(echo $(INCPATH)|sed 's/:/ -I/g') -D_XOPEN_SOURCE=600
-COMPILE= CC="$(CC)" CFLAGS="$(EXCFLAGS) $(CFLAGS)" $(ROOT)/util/compile
-COMPILEPIC= CC="$(CC)" CFLAGS="$(EXCFLAGS) $(CFLAGS) $(SOCFLAGS)" $(ROOT)/util/compile
-LINK= LD="$(LD)" LDFLAGS="$(LDFLAGS)" $(ROOT)/util/link
-LINKSO= LD="$(LD)" LDFLAGS="$(SOLDFLAGS) $(SHARED)" $(ROOT)/util/link
+
+EXCFLAGS = $(INCLUDES) -D_XOPEN_SOURCE=600
+
+COMPILE = $(ROOT)/util/compile "$(CC)" "$(EXCFLAGS) $(CFLAGS) $$(pkg-config --cflags $(PACKAGES))"
+COMPILEPIC = $(ROOT)/util/compile "$(CC)" "$(EXCFLAGS) $(CFLAGS) $$(pkg-config --cflags $(PACKAGES)) $(SOCFLAGS)"
+
+LINK = $(ROOT)/util/link "$(LD)" "$$(pkg-config --libs $(PACKAGES)) $(LDFLAGS)"
+LINKSO = $(ROOT)/util/link "$(LD)" "$$(pkg-config --libs $(PACKAGES)) $(SOLDFLAGS) $(SHARED)"
+
 CLEANNAME=$(ROOT)/util/cleanname
+
 SOEXT=so
+TAGFILES=
+
+CTAGS=ctags
+
+PACKAGES = 2>/dev/null
 
 include $(ROOT)/config.mk
 
@@ -14,9 +24,10 @@
 MKCFG:=${shell $(MKCFGSH)}
 MKCFG!=${MKCFGSH}
 include $(MKCFG)
+
 # and this:
 # Try to find a sane shell. /bin/sh is a last resort, because it's
-# usually bash on Linux, which means, it's painfully slow.
+# usually bash on Linux, which means it's painfully slow.
 BINSH := $(shell \
            if [ -x /bin/dash ]; then echo /bin/dash; \
            elif [ -x /bin/ksh ]; then echo /bin/ksh; \
@@ -24,7 +35,7 @@
 BINSH != echo /bin/sh
 
 .SILENT:
-.SUFFIXES: .out .o .o_pic .c .sh .rc .$(SOEXT) .awk .1 .man1 .depend .install .uninstall .clean
+.SUFFIXES: .out .o .o_pic .c .pdf .sh .rc .$(SOEXT) .awk .1 .man1 .depend .install .uninstall .clean
 all:
 
 .c.depend:
@@ -56,7 +67,7 @@
         chmod 0755 $@
 .man1.1:
         echo TXT2TAGS $(BASE)$<
- txt2tags -o- $< | $(FILTER) >$@
+ txt2tags -o- $< >$@
 
 .out.install:
         echo INSTALL $$($(CLEANNAME) $(BASE)$*)
@@ -82,12 +93,20 @@
         echo UNINSTALL $$($(CLEANNAME) $(BASE)$<)
         rm -f $(DESTDIR)$(INCLUDE)/$<
 
+.pdf.install:
+ echo INSTALL $$($(CLEANNAME) $(BASE)$<)
+ cp -f $< $(DESTDIR)$(DOC)/$<
+ chmod 0644 $(DESTDIR)$(DOC)/$<
+.pdf.uninstall:
+ echo UNINSTALL $$($(CLEANNAME) $(BASE)$<)
+ rm -f $(DESTDIR)$(DOC)/$<
+
 .1.install:
         set -e; \
         man=1; \
         path="$(MAN)/man$$man/$*.$$man"; \
         echo INSTALL man $$($(CLEANNAME) "$(BASE)/$*($$man)"); \
- cp "$<" $(DESTDIR)"$$path"; \
+ $(FILTER) <"$<" >$(DESTDIR)"$$path"; \
         chmod 0644 $(DESTDIR)"$$path"
 .1.uninstall:
         echo UNINSTALL man $$($(CLEANNAME) $*'(1)')
diff -r 6c7079a5cc46 -r 64309bb2db2a mk/ixp.mk
--- a/mk/ixp.mk Thu Sep 03 14:28:50 2009 -0400
+++ b/mk/ixp.mk Sat Oct 10 14:59:02 2009 -0400
@@ -1,5 +1,5 @@
 VERSION = 0.5
 
 $(ROOT)/include/ixp.h: $(ROOT)/config.mk
-CFLAGS += -DVERSION=\"$(VERSION)\" -D_XOPEN_SOURCE=600
+CFLAGS += '-DVERSION=\"$(VERSION)\"' -D_XOPEN_SOURCE=600
 
diff -r 6c7079a5cc46 -r 64309bb2db2a util/compile
--- a/util/compile Thu Sep 03 14:28:50 2009 -0400
+++ b/util/compile Sat Oct 10 14:59:02 2009 -0400
@@ -1,5 +1,8 @@
 #!/bin/sh -f
 
+CC=$1
+CFLAGS=$2; shift 2
+
 outfile="$1"; shift
 bin="$(echo $0 | sed 's,/[^/]*$,,')"
 
@@ -9,7 +12,7 @@
 
 echo CC $($bin/cleanname ${BASE}$outfile)
 [ -n "$noisycc" ] && echo $CC -o $outfile $CFLAGS $@
-$CC -o $outfile $CFLAGS $@ >$xtmp 2>&1
+eval '$CC -o $outfile '"$CFLAGS"' $@ >$xtmp 2>&1'
 status=$?
 [ $? -eq 0 ] || echo $CC -o $outfile $CFLAGS $@ >&2
 
diff -r 6c7079a5cc46 -r 64309bb2db2a util/link
--- a/util/link Thu Sep 03 14:28:50 2009 -0400
+++ b/util/link Sat Oct 10 14:59:02 2009 -0400
@@ -1,5 +1,8 @@
 #!/bin/sh -f
 
+LD=$1
+LDFLAGS=$2; shift 2
+
 outfile="$1"; shift
 bin="$(echo $0 | sed 's,/[^/]*$,,')"
 
Received on Sat Oct 10 2009 - 19:00:13 UTC

This archive was generated by hypermail 2.2.0 : Sat Oct 10 2009 - 19:12:06 UTC