]> err.no Git - sope/commitdiff
rewrote .wod parser to use 'unichar'
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Sun, 24 Apr 2005 14:26:34 +0000 (14:26 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Sun, 24 Apr 2005 14:26:34 +0000 (14:26 +0000)
fixed some gcc 4.0 warnings

git-svn-id: http://svn.opengroupware.org/SOPE/trunk@765 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

21 files changed:
sope-appserver/NGObjWeb/ChangeLog
sope-appserver/NGObjWeb/DynamicElements/GNUmakefile.preamble
sope-appserver/NGObjWeb/DynamicElements/WOActionURL.m
sope-appserver/NGObjWeb/DynamicElements/WOBody.m
sope-appserver/NGObjWeb/DynamicElements/WOCheckBox.m
sope-appserver/NGObjWeb/DynamicElements/WOCheckBoxList.m
sope-appserver/NGObjWeb/DynamicElements/WOConditional.m
sope-appserver/NGObjWeb/DynamicElements/WOForm.m
sope-appserver/NGObjWeb/DynamicElements/WOGenericContainer.m
sope-appserver/NGObjWeb/DynamicElements/WOGenericElement.m
sope-appserver/NGObjWeb/DynamicElements/WOHtml.m
sope-appserver/NGObjWeb/DynamicElements/WORadioButton.m
sope-appserver/NGObjWeb/DynamicElements/WORadioButtonList.m
sope-appserver/NGObjWeb/DynamicElements/WORepetition.m
sope-appserver/NGObjWeb/DynamicElements/WOSetCursor.m
sope-appserver/NGObjWeb/DynamicElements/WOString.m
sope-appserver/NGObjWeb/DynamicElements/_WOComplexHyperlink.m
sope-appserver/NGObjWeb/Templates/WODParser.m
sope-appserver/NGObjWeb/Version
sope-appserver/NGObjWeb/WOResponse+private.h
sope-appserver/NGObjWeb/fhs.make

index 95fd26168f4ff2f3953a97ba35a7047ca5af1788..3b361bc58f43d3112d15b5127f5d113af97501d4 100644 (file)
@@ -1,3 +1,11 @@
+2005-04-24  Helge Hess  <helge.hess@opengroupware.org>
+
+       * v4.5.152
+
+       * Templates/WODParser.m: rewrote parser to use unichar
+
+       * DynamicElements, WOResponse+private.h: fixed gcc 4.0 warnings
+
 2005-04-12  Helge Hess  <helge.hess@opengroupware.org>
 
        * v4.5.151
index b540adce8888ba0c35704e58599b0ba0c7735242..1721fee985953ed1812f8a386a850948ab65e4dc 100644 (file)
@@ -1,10 +1,10 @@
-# $Id$
+# compilation flags
 
 ADDITIONAL_CPPFLAGS += -pipe 
 # -DHTML_DEBUG=1
 # -DPROFILE_CLUSTERS=1
 
-ADDITIONAL_CPPFLAGS += -pipe -Wall
+ADDITIONAL_CPPFLAGS += -pipe -Wall -funsigned-char
 ADDITIONAL_CPPFLAGS += -DCOMPILING_NGOBJWEB=1
 
 DynamicElements_INCLUDE_DIRS += \
index 5d27367d0239464d8f20c7b2ff70138648451953..d95f69f10207b79cddc4735fd405c59317c0ba29 100644 (file)
 }
 
 - (void)dealloc {
-  RELEASE(self->template);
-  RELEASE(self->queryDictionary);
-  RELEASE(self->queryParameters);
-  RELEASE(self->fragmentIdentifier);
+  [self->template           release];
+  [self->queryDictionary    release];
+  [self->queryParameters    release];
+  [self->fragmentIdentifier release];
   [super dealloc];
 }
 
 /* accessors */
 
-- (WOElement *)template {
+- (id)template {
   return self->template;
 }
 
-// ******************** responder ********************
+/* handling requests */
 
 - (void)takeValuesFromRequest:(WORequest *)_req inContext:(WOContext *)_ctx {
   /* links can take form values !!!! (for query-parameters) */
   return NO;
 }
 
+/* generate response */
+
 - (void)appendToResponse:(WOResponse *)_response inContext:(WOContext *)_ctx {
-  if (![[_ctx request] isFromClientComponent]) {
-    WOComponent *sComponent = [_ctx component];
-    NSString *queryString = nil;
+  WOComponent *sComponent;
+  NSString *queryString = nil;
   
-    if ([self _appendHrefToResponse:_response inContext:_ctx]) {
-      queryString = [self queryStringForQueryDictionary:
-                            [self->queryDictionary valueInComponent:sComponent]
-                          andQueryParameters:self->queryParameters
-                          inContext:_ctx];
-    }
+  if ([[_ctx request] isFromClientComponent])
+    return;
+
+  sComponent = [_ctx component];
+  
+  if ([self _appendHrefToResponse:_response inContext:_ctx]) {
+    queryString = [self queryStringForQueryDictionary:
+                         [self->queryDictionary valueInComponent:sComponent]
+                       andQueryParameters:self->queryParameters
+                       inContext:_ctx];
+  }
   
-    if (self->fragmentIdentifier) {
-      [_response appendContentCharacter:'#'];
-      WOResponse_AddString(_response,
+  if (self->fragmentIdentifier != nil) {
+    [_response appendContentCharacter:'#'];
+    WOResponse_AddString(_response,
          [self->fragmentIdentifier stringValueInComponent:sComponent]);
-    }
-    if (queryString) {
-      [_response appendContentCharacter:'?'];
-      WOResponse_AddString(_response, queryString);
-    }
-    
-    /* content */
-    [self->template appendToResponse:_response inContext:_ctx];
   }
+  if (queryString != nil) {
+    [_response appendContentCharacter:'?'];
+    WOResponse_AddString(_response, queryString);
+  }
+    
+  /* content */
+  [self->template appendToResponse:_response inContext:_ctx];
 }
 
 /* description */
index 8bf43e3b0f79c9ae6522d7199c874124fd787131..4fe6a3be08e39fd396952e6de87288c7f7fa7360 100644 (file)
@@ -72,7 +72,7 @@
 
 /* accessors */
 
-- (WOElement *)template {
+- (id)template {
   return self->template;
 }
 
index fb265f2b16102d85641b2b0d0ebca4baaaa74083..72c6d131d5db70d18f56ae8f1d27daa34abd123b 100644 (file)
   WOResponse_AddCString(_response, "\"");
   
   if ([self->disabled boolValueInComponent:[_ctx component]]) {
-    WOResponse_AddCString(_response, _ctx->wcFlags.allowEmptyAttributes
-                         ? " disabled" : " disabled=\"disabled\"");
+    WOResponse_AddCString(_response,
+                         (_ctx->wcFlags.allowEmptyAttributes
+                          ? " disabled" : " disabled=\"disabled\""));
   }
   
   if (isChecked) {
-    WOResponse_AddCString(_response, _ctx->wcFlags.allowEmptyAttributes 
-                         ? " checked" : " checked=\"checked\"");
+    WOResponse_AddCString(_response,
+                         (_ctx->wcFlags.allowEmptyAttributes 
+                          ? " checked" : " checked=\"checked\""));
   }
   
   [self appendExtraAttributesToResponse:_response inContext:_ctx];
index a22794fa1a9b62e9c66cde3a228f1dff0cd50a77..4b924d5870f94745f2b856cb1e0ff519da746d86 100644 (file)
       WOResponse_AddCString(_response, "\"");
       
       if ([self->disabled boolValueInComponent:sComponent]) {
-       WOResponse_AddCString(_response, _ctx->wcFlags.allowEmptyAttributes
-                             ? " disabled" : " disabled=\"disabled\"");
+       WOResponse_AddCString(_response, 
+                             (_ctx->wcFlags.allowEmptyAttributes
+                              ? " disabled" : " disabled=\"disabled\""));
       }
       
       if ([selArray containsObject:object]) {
-       WOResponse_AddCString(_response, _ctx->wcFlags.allowEmptyAttributes 
-                             ? " checked" : " checked=\"checked\"");
+       WOResponse_AddCString(_response, 
+                             (_ctx->wcFlags.allowEmptyAttributes 
+                              ? " checked" : " checked=\"checked\""));
       }
       
       [self appendExtraAttributesToResponse:_response inContext:_ctx];
index 8264dfbf8b1209b790c7d6b6e63475de77981321..494ea9c0e8050ba130a164a3516aa65aeb1b7118 100644 (file)
@@ -155,7 +155,7 @@ static int descriptiveIDs = -1;
 
 /* accessors */
 
-- (WOElement *)template {
+- (id)template {
   return self->template;
 }
 
index 0665ee3bac8ae819717e2ca6982b9160b3abe7e4..bceb3e7e83bbbc2680260f5fce329502858af6ac 100644 (file)
@@ -90,15 +90,13 @@ static int debugTakeValues = -1;
 
 /* handle active form elements */
 
-- (WOElement *)template {
+- (id)template {
   return self->template;
 }
 
-// ******************** responder ********************
+/* handling requests */
 
-- (void)takeValuesFromRequest:(WORequest *)_request
-  inContext:(WOContext *)_ctx
-{
+- (void)takeValuesFromRequest:(WORequest *)_rq inContext:(WOContext *)_ctx {
   static int alwaysPassIn = -1;
 
   if (alwaysPassIn == -1) {
@@ -128,24 +126,24 @@ static int debugTakeValues = -1;
         id value;
         
         assoc = [self->queryParameters objectForKey:key];
-        value = [_request formValueForKey:key];
+        value = [_rq formValueForKey:key];
 
         [assoc setValue:value inComponent:sComponent];
       }
     }
     
     if ([[self->href stringValueInComponent:sComponent] 
-         isEqualToString:[_request uri]]) {
+         isEqualToString:[_rq uri]]) {
       if (debugTakeValues) {
-       NSArray *formValues = [_request formValueKeys];
+       NSArray *formValues = [_rq formValueKeys];
        NSLog(@"%s: we are uri active (uri=%@): %@ ..", __PRETTY_FUNCTION__,
-             [_request uri], formValues);
+             [_rq uri], formValues);
       }
       doTakeValues = YES;
     }
     else if ([[_ctx elementID] isEqualToString:[_ctx senderID]]) {
       if (debugTakeValues) {
-       NSArray *formValues = [_request formValueKeys];
+       NSArray *formValues = [_rq formValueKeys];
        NSLog(@"%s: we are elem active (eid=%@): %@ ..", __PRETTY_FUNCTION__,
              [_ctx elementID], formValues);
       }
@@ -158,7 +156,7 @@ static int debugTakeValues = -1;
     }
     else {
       /* finally, let the component decide */
-      doTakeValues = [sComponent shouldTakeValuesFromRequest:_request 
+      doTakeValues = [sComponent shouldTakeValuesFromRequest:_rq 
                                 inContext:_ctx];
       if (debugTakeValues) {
        NSLog(@"%s: component should take values: %s ", __PRETTY_FUNCTION__,
@@ -170,7 +168,7 @@ static int debugTakeValues = -1;
       if (debugTakeValues) 
        NSLog(@"%s: taking values ...", __PRETTY_FUNCTION__);
       
-      [self->template takeValuesFromRequest:_request inContext:_ctx];
+      [self->template takeValuesFromRequest:_rq inContext:_ctx];
 
       if (debugTakeValues) 
        NSLog(@"%s: did take values.", __PRETTY_FUNCTION__);
@@ -193,9 +191,7 @@ static int debugTakeValues = -1;
     [_ctx setInForm:NO];
 }
 
-- (id)invokeActionForRequest:(WORequest *)_request
-  inContext:(WOContext *)_ctx
-{
+- (id)invokeActionForRequest:(WORequest *)_rq inContext:(WOContext *)_ctx {
   id result = nil;
   
   [_ctx setInForm:YES];
@@ -205,11 +201,11 @@ static int debugTakeValues = -1;
     
     if ((element = [_ctx activeFormElement])) {
 #if 1
-      result = [self->template invokeActionForRequest:_request inContext:_ctx];
+      result = [self->template invokeActionForRequest:_rq inContext:_ctx];
       RETAIN(result);
 #else
       /* wrong - need to setup correct component stack */
-      result = [[element invokeActionForRequest:_request
+      result = [[element invokeActionForRequest:_rq
                          inContext:_ctx]
                          retain];
 #endif
@@ -234,13 +230,15 @@ static int debugTakeValues = -1;
     }
   }
   else
-    result = [self->template invokeActionForRequest:_request inContext:_ctx];
+    result = [self->template invokeActionForRequest:_rq inContext:_ctx];
 
   [_ctx setInForm:NO];
 
   return result;
 }
 
+/* generate response */
+
 - (NSString *)_addHrefToResponse:(WOResponse *)_r inContext:(WOContext *)_ctx {
   /* post to a fixed hyperlink */
   WOComponent *sComponent = [_ctx component];
index 39d99eef7beba99371a601a579c43af2c5692117..45c5c4be3351a004965bbdb55d65a0bba2628e8e 100644 (file)
 
 /* accessors */
 
-- (WOElement *)template {
+- (id)template {
   return self->template;
 }
 
-// ******************** responder ********************
+/* handling requests */
 
 - (void)takeValuesFromRequest:(WORequest *)_req inContext:(WOContext *)_ctx {
   [self->template takeValuesFromRequest:_req inContext:_ctx];
@@ -74,6 +74,8 @@
   return [self->template invokeActionForRequest:_req inContext:_ctx];
 }
 
+/* generate response */
+
 - (void)appendToResponse:(WOResponse *)_response inContext:(WOContext *)_ctx {
   WOComponent *sComponent;
   NSString    *tag;
index 290b025cc9760f5b8c5106ef69fe31a861fd8fac..e10d10b2a0947ad189f045f541d409964263a0ca 100644 (file)
@@ -116,7 +116,7 @@ typedef struct {
         
     len = [s cStringLength];
     cs = malloc(len + 2);
-    [s getCString:cs];
+    [s getCString:(char *)cs];
     cs[len] = '\0';
     self->tagName = cs;
     self->tagNameType = TagNameType_ASCII;
index 81a111315ca722237bf3a4286e3a4ca66facf7e8..27925b0b948169e0518c5f365fdbee63df703f55 100644 (file)
@@ -56,7 +56,7 @@
 
 /* accessors */
 
-- (WOElement *)template {
+- (id)template {
   return self->template;
 }
 
index 3b2f3a1651f717de91ab23071786668aee9370c5..508662bbe7c830f3b87c415a51f5f91639e67f1c 100644 (file)
   
   if (self->checked != nil) {
     if ([self->checked boolValueInComponent:sComponent]) {
-      WOResponse_AddCString(_response, _ctx->wcFlags.allowEmptyAttributes 
-                           ? " checked" : " checked=\"checked\"");
+      WOResponse_AddCString(_response, 
+                           (_ctx->wcFlags.allowEmptyAttributes 
+                            ? " checked" : " checked=\"checked\""));
     }
   }
   else {
     v   = [self->value     valueInComponent:sComponent];
     sel = [self->selection valueInComponent:sComponent];
     if ((v == sel) || [v isEqual:sel]) {
-      WOResponse_AddCString(_response, _ctx->wcFlags.allowEmptyAttributes 
-                           ? " checked" : " checked=\"checked\"");
+      WOResponse_AddCString(_response, 
+                           (_ctx->wcFlags.allowEmptyAttributes 
+                            ? " checked" : " checked=\"checked\""));
     }
   }
   
   if ([self->disabled boolValueInComponent:sComponent]) {
-    WOResponse_AddCString(_response, _ctx->wcFlags.allowEmptyAttributes
-                         ? " disabled" : " disabled=\"disabled\"");
+    WOResponse_AddCString(_response, 
+                         (_ctx->wcFlags.allowEmptyAttributes
+                          ? " disabled" : " disabled=\"disabled\""));
   }
   
   [self appendExtraAttributesToResponse:_response inContext:_ctx];
index 5ad8d25046f25c0fbc6890729b453b403adff52d..ffacf53982a43b9ff271d1bdfdbe873af8c73b74 100644 (file)
       WOResponse_AddCString(_response, "\"");
       
       if (sel == object || [sel isEqual:object]) {
-       WOResponse_AddCString(_response, _ctx->wcFlags.allowEmptyAttributes 
-                             ? " checked" : " checked=\"checked\"");
+       WOResponse_AddCString(_response, 
+                             (_ctx->wcFlags.allowEmptyAttributes 
+                              ? " checked" : " checked=\"checked\""));
       }
       
       if ([self->disabled boolValueInComponent:sComponent]) {
-       WOResponse_AddCString(_response, _ctx->wcFlags.allowEmptyAttributes
-                             ? " disabled" : " disabled=\"disabled\"");
+       WOResponse_AddCString(_response, 
+                             (_ctx->wcFlags.allowEmptyAttributes
+                              ? " disabled" : " disabled=\"disabled\""));
       }
       
       [self appendExtraAttributesToResponse:_response inContext:_ctx];
index 2a9a9e628231b314fe2e9b413a757adcd6582fcb..5e06bb73a2922e2182cf035ede603c2f47398825 100644 (file)
@@ -237,7 +237,7 @@ static inline Class _classForConfig(NSDictionary *_config) {
 
 /* accessors */
 
-- (WOElement *)template {
+- (id)template {
   return self->template;
 }
 
index 87dffee4f82b789c126fa6d299bedf91c0a04375..49867f6783e7150fa33e3b28848e6ae72b53d426 100644 (file)
   return self;
 }
 - (void)dealloc {
-  RELEASE(self->template);
-  RELEASE(self->object);
+  [self->template release];
+  [self->object   release];
   [super dealloc];
 }
 
 /* accessors */
 
-- (WOElement *)template {
+- (id)template {
   return self->template;
 }
 
-/* responder */
+/* handling requests */
 
-- (void)takeValuesFromRequest:(WORequest *)_request
-  inContext:(WOContext *)_ctx
-{
+- (void)takeValuesFromRequest:(WORequest *)_rq inContext:(WOContext *)_ctx {
   id obj;
   
   obj = [[self->object valueInContext:_ctx] retain];
   [_ctx pushCursor:obj];
   
-  [self->template takeValuesFromRequest:_request inContext:_ctx];
+  [self->template takeValuesFromRequest:_rq inContext:_ctx];
   
   [_ctx popCursor];
   [obj autorelease];
@@ -91,6 +89,8 @@
   return [result autorelease];
 }
 
+/* generate response */
+
 - (void)appendToResponse:(WOResponse *)_response inContext:(WOContext *)_ctx {
   id obj;
   
index f3ff62592a0e0ccbe1c371f04a4feda80ba61fee..fc9c9d033ca51ad89e9f7a74c3a7b1cf3fad015a 100644 (file)
       
       clen = [v cStringLength];
       cbuf = malloc(clen + 2);
-      [v getCString:cbuf]; cbuf[clen] = '\0';
+      [v getCString:(char *)cbuf]; cbuf[clen] = '\0';
       
       buffer = malloc(clen * 6 + 2); /* longest-encoding: '&quot;' */
       
         if (cbuf) free(cbuf);
         clen = (bufPtr - buffer);
         self->value = malloc(clen + 2);
-        strncpy((char *)self->value, buffer, clen);
+        strncpy((char *)self->value, (const char *)buffer, clen);
         ((unsigned char *)self->value)[clen] = '\0';
       }
       else {
index b159c3637692067d8c54fd4fe73280c0fdedf677..61c4ce765a7fc4742455ca7edc3d8075e6bf1842 100644 (file)
@@ -148,13 +148,13 @@ static Class NSURLClass = Nil;
 
 /* accessors */
 
-- (WOElement *)template {
+- (id)template {
   return self->template;
 }
 
-// ******************** responder ********************
+/* handle requests */
 
-- (void)takeValuesFromRequest:(WORequest *)_req inContext:(WOContext *)_ctx {
+- (void)takeValuesFromRequest:(WORequest *)_rq inContext:(WOContext *)_ctx {
   /* links can take form values !!!! (for query-parameters) */
   
   if (self->queryParameters) {
@@ -170,18 +170,16 @@ static Class NSURLClass = Nil;
       assoc = [self->queryParameters objectForKey:key];
       
       if ([assoc isValueSettable]) {
-        value = [_req formValueForKey:key];
+        value = [_rq formValueForKey:key];
         [assoc setValue:value inComponent:sComponent];
       }
     }
   }
   
-  [self->template takeValuesFromRequest:_req inContext:_ctx];
+  [self->template takeValuesFromRequest:_rq inContext:_ctx];
 }
 
-- (id)invokeActionForRequest:(WORequest *)_request
-  inContext:(WOContext *)_ctx
-{
+- (id)invokeActionForRequest:(WORequest *)_rq inContext:(WOContext *)_ctx {
   if (self->disabled != nil) {
     if ([self->disabled boolValueInComponent:[_ctx component]])
       return nil;
@@ -189,7 +187,7 @@ static Class NSURLClass = Nil;
   
   if (![[_ctx elementID] isEqualToString:[_ctx senderID]])
     /* link is not the active element */
-    return [self->template invokeActionForRequest:_request inContext:_ctx];
+    return [self->template invokeActionForRequest:_rq inContext:_ctx];
   
   /* link is active */
   [[_ctx session] logWithFormat:@"%@[0x%08X]: no action/page set !",
@@ -445,6 +443,7 @@ static BOOL debugStaticLinks = NO;
 
 @end /* _WOHrefHyperlink */
 
+
 @implementation _WOActionHyperlink
 
 - (id)initWithName:(NSString *)_name
@@ -464,7 +463,7 @@ static BOOL debugStaticLinks = NO;
 
 /* dynamic invocation */
 
-- (id)invokeActionForRequest:(WORequest *)_request
+- (id)invokeActionForRequest:(WORequest *)_rq
   inContext:(WOContext *)_ctx
 {
   if (self->disabled) {
@@ -474,7 +473,7 @@ static BOOL debugStaticLinks = NO;
 
   if (![[_ctx elementID] isEqualToString:[_ctx senderID]])
     /* link is not the active element */
-    return [self->template invokeActionForRequest:_request inContext:_ctx];
+    return [self->template invokeActionForRequest:_rq inContext:_ctx];
   
   /* link is active */
   return [self executeAction:self->action inContext:_ctx];
@@ -499,6 +498,7 @@ static BOOL debugStaticLinks = NO;
 
 @end /* _WOActionHyperlink */
 
+
 @implementation _WOPageHyperlink
 
 - (id)initWithName:(NSString *)_name
@@ -516,11 +516,9 @@ static BOOL debugStaticLinks = NO;
   [super dealloc];
 }
 
-/* actions */
+/* handle request */
 
-- (id)invokeActionForRequest:(WORequest *)_request
-  inContext:(WOContext *)_ctx
-{
+- (id)invokeActionForRequest:(WORequest *)_rq inContext:(WOContext *)_ctx {
   WOComponent *page;
   NSString    *name;
 
@@ -531,7 +529,7 @@ static BOOL debugStaticLinks = NO;
   
   if (![[_ctx elementID] isEqualToString:[_ctx senderID]])
     /* link is not the active element */
-    return [self->template invokeActionForRequest:_request inContext:_ctx];
+    return [self->template invokeActionForRequest:_rq inContext:_ctx];
   
   /* link is the active element */
   
@@ -546,16 +544,16 @@ static BOOL debugStaticLinks = NO;
   return page;
 }
 
-- (BOOL)_appendHrefToResponse:(WOResponse *)_response
-  inContext:(WOContext *)_ctx
-{
+/* generate response */
+
+- (BOOL)_appendHrefToResponse:(WOResponse *)_r inContext:(WOContext *)_ctx {
   /*
     Profiling:
       87% -componentActionURL
       13% NSString dataUsingEncoding(appendContentString!)
     TODO(prof): use addcstring
   */
-  WOResponse_AddString(_response, [_ctx componentActionURL]);
+  WOResponse_AddString(_r, [_ctx componentActionURL]);
   return YES;
 }
 
@@ -571,6 +569,7 @@ static BOOL debugStaticLinks = NO;
 
 @end /* _WOPageHyperlink */
 
+
 @implementation _WODirectActionHyperlink
 
 - (id)initWithName:(NSString *)_name
@@ -593,21 +592,21 @@ static BOOL debugStaticLinks = NO;
   [super dealloc];
 }
 
-/* href */
+/* handle requests */
 
 - (void)takeValuesFromRequest:(WORequest *)_req inContext:(WOContext *)_ctx {
   /* DA links can *never* take form values !!!! */
   [self->template takeValuesFromRequest:_req inContext:_ctx];
 }
 
-- (id)invokeActionForRequest:(WORequest *)_request
-  inContext:(WOContext *)_ctx
-{
+- (id)invokeActionForRequest:(WORequest *)_rq inContext:(WOContext *)_ctx {
   /* DA links can *never* invoke an action !!!! */
-  return [self->template invokeActionForRequest:_request inContext:_ctx];
+  return [self->template invokeActionForRequest:_rq inContext:_ctx];
 }
 
-- (BOOL)_appendHrefToResponse:(WOResponse *)_response
+/* generate response */
+
+- (BOOL)_appendHrefToResponse:(WOResponse *)_r
   inContext:(WOContext *)_ctx
 {
   WOComponent         *sComponent;
@@ -671,7 +670,7 @@ static BOOL debugStaticLinks = NO;
     }
   }
 
-  WOResponse_AddString(_response,
+  WOResponse_AddString(_r,
                        [_ctx directActionURLForActionNamed:daName
                              queryDictionary:qd]);
   return NO;
index 242e62d057cb4293e773137d40ca425966756197..153300d1a83b7a1246333e8fc2375f2e8f1d19c3 100644 (file)
@@ -74,37 +74,22 @@ static BOOL     useUTF8     = NO;
 
 /* parser */
 
-static id _parseProperty(NSZone *_zone, const char *_buffer, unsigned *_idx,
+static id _parseProperty(NSZone *_zone, const unichar *_buffer, unsigned *_idx,
                          unsigned _len, NSException **_exception,
                          BOOL _allowAssoc, id self);
-static id _parseWodEntry(NSZone *_zone, const char *_buffer, unsigned *_idx,
+static id _parseWodEntry(NSZone *_zone, const unichar *_buffer, unsigned *_idx,
                          unsigned _len, NSException **_exception,
                          NSString **_name, NSString **_class,
                          id self);
 
-static NSString *_makeStringForBuffer(const unsigned char *_buf, unsigned _l) {
-  // TODO: duplicate code with WOHTMLParser, but probably isn't worth a
-  //       separate file
-  NSString *r;
-  NSData   *data;
-
+static NSString *_makeStringForBuffer(const unichar *_buf, unsigned _l) {
   if (_l == 0)
     return @"";
-  
-  if (!useUTF8)
-    return [[StrClass alloc] initWithCString:_buf length:_l];
-  
-  // Note: we cast the pointer because we are not going to modify _buf for the
-  //       duration and we are never going to write the data - should work
-  //       with any Foundation, but isn't strictly API compatible
-  data = [[NSData alloc] initWithBytesNoCopy:(void *)_buf length:_l 
-                         freeWhenDone:NO];
-  r = [[StrClass alloc] initWithData:data encoding:NSUTF8StringEncoding];
-  [data release];
-  return r;
+
+  return [[StrClass alloc] initWithCharacters:_buf length:_l];
 }
 
-- (NSException *)parseDefinitionsFromBuffer:(const char *)_buffer
+- (NSException *)parseDefinitionsFromBuffer:(const unichar *)_buffer
   length:(unsigned)_len
   mappings:(NSMutableDictionary *)_mappings
 {
@@ -118,13 +103,13 @@ static NSString *_makeStringForBuffer(const unsigned char *_buf, unsigned _l) {
   
   while ((entry = _parseWodEntry(NULL, _buffer, &idx, _len, &exception,
                                  &elementName, &componentName,
-                                 self))) {
+                                 self)) != NULL) {
     id def;
     
     if (exception) {
-      RELEASE(entry);         entry         = nil;
-      RELEASE(elementName);   elementName   = nil;
-      RELEASE(componentName); componentName = nil;
+      [entry         release]; entry         = nil;
+      [elementName   release]; elementName   = nil;
+      [componentName release]; componentName = nil;
       break;
     }
 
@@ -136,15 +121,15 @@ static NSString *_makeStringForBuffer(const unsigned char *_buf, unsigned _l) {
                 associations:entry
                 elementName:elementName];
     
-    RELEASE(componentName); componentName = nil;
-    RELEASE(entry);         entry         = nil;
+    [componentName release]; componentName = nil;
+    [entry         release]; entry         = nil;
 
     if ((def != nil) && (elementName != nil))
       [_mappings setObject:def forKey:elementName];
 #if 0
     NSLog(@"defined element %@ definition=%@", elementName, def);
 #endif
-    RELEASE(elementName); elementName = nil;
+    [elementName release]; elementName = nil;
   }
 
   return exception;
@@ -152,21 +137,45 @@ static NSString *_makeStringForBuffer(const unsigned char *_buf, unsigned _l) {
 
 /* parsing */
 
+- (NSStringEncoding)stringEncodingForData:(NSData *)_data  {
+  // TODO: we could check for UTF-16 marker in front of data
+  return useUTF8 ? NSUTF8StringEncoding : [NSString defaultCStringEncoding];
+}
+
 - (NSDictionary *)parseDeclarationData:(NSData *)_decl {
   NSMutableDictionary *defs;
-  NSException *ex;
+  NSException  *ex;
+  NSString     *s;
+  unichar      *buf;
+  unsigned int bufLen;
   
   if (![self->callback parser:self willParseDeclarationData:_decl])
     return nil;
-
+  
+  /* recode buffer using NSString */
+  
+  s = [[NSString alloc] initWithData:_decl 
+                       encoding:[self stringEncodingForData:_decl]];
+  bufLen = [s length];
+  buf = calloc(bufLen + 2, sizeof(unichar));
+  [s getCharacters:buf];
+  [s release]; s = nil;
+  buf[bufLen] = 0; /* null-terminate buffer, parser might need that */
+  
+  /* start parsing */
+  
   defs = [NSMutableDictionary dictionaryWithCapacity:100];
   
-  ex = [self parseDefinitionsFromBuffer:[_decl bytes]
-             length:[_decl length]
-             mappings:defs];
+  ex = [self parseDefinitionsFromBuffer:buf length:bufLen mappings:defs];
   
-  if (ex)
-    [self->callback parser:self failedParsingDeclarationData:_decl exception:ex];
+  if (buf != NULL) free(buf); buf = NULL;
+
+  /* report results */
+  
+  if (ex != nil) {
+    [self->callback parser:self failedParsingDeclarationData:_decl 
+                   exception:ex];
+  }
   else {
     [self->callback parser:self finishedParsingDeclarationData:_decl
                     declarations:defs];
@@ -176,9 +185,9 @@ static NSString *_makeStringForBuffer(const unsigned char *_buf, unsigned _l) {
 }
 
 
-static int _numberOfLines(const char *_buffer, unsigned _lastIdx) {
+static int _numberOfLines(const unichar *_buffer, unsigned _lastIdx) {
   register unsigned pos, lineCount = 1;
-
+  
   for (pos = 0; (pos < _lastIdx) && (_buffer[pos] != '\0'); pos++) {
     if (_buffer[pos] == '\n')
       lineCount++;
@@ -186,7 +195,7 @@ static int _numberOfLines(const char *_buffer, unsigned _lastIdx) {
   return lineCount;
 }
 
-static inline BOOL _isBreakChar(unsigned char _c) {
+static inline BOOL _isBreakChar(const unichar _c) {
   switch (_c) {
     case ' ': case '\t': case '\n': case '\r':
     case '=':  case ';':  case ',':
@@ -199,11 +208,11 @@ static inline BOOL _isBreakChar(unsigned char _c) {
       return NO;
   }
 }
-static inline BOOL _isIdChar(unsigned char _c) {
+static inline BOOL _isIdChar(const unichar _c) {
   return (_isBreakChar(_c) && (_c != '.')) ? NO : YES;
 }
 
-static inline int _valueOfHexChar(unsigned char _c) {
+static inline int _valueOfHexChar(const unichar _c) {
   switch (_c) {
     case '0': case '1': case '2': case '3': case '4':
     case '5': case '6': case '7': case '8': case '9':
@@ -221,7 +230,7 @@ static inline int _valueOfHexChar(unsigned char _c) {
       return -1;
   }
 }
-static inline BOOL _isHexDigit(unsigned char _c) {
+static inline BOOL _isHexDigit(const unichar _c) {
   switch (_c) {
     case '0': case '1': case '2': case '3': case '4':
     case '5': case '6': case '7': case '8': case '9':
@@ -237,7 +246,7 @@ static inline BOOL _isHexDigit(unsigned char _c) {
 }
 
 static NSException *_makeException(NSException *_exception,
-                                   const char *_buffer, unsigned _idx,
+                                   const unichar *_buffer, unsigned _idx,
                                    unsigned _len, NSString *_text)
 {
   NSMutableDictionary *ui = nil;
@@ -270,7 +279,7 @@ static NSException *_makeException(NSException *_exception,
 
   if (!atEof && (_idx > 0)) {
     register unsigned pos;
-    const char *startPos, *endPos;
+    const unichar *startPos, *endPos;
 
     for (pos = _idx; (pos >= 0) && (_buffer[pos] != '\n'); pos--)
       ;
@@ -301,7 +310,8 @@ static NSException *_makeException(NSException *_exception,
   return exception;
 }
 
-static BOOL _skipComments(const char *_buffer, unsigned *_idx, unsigned _len,
+static BOOL _skipComments(const unichar *_buffer, 
+                         unsigned *_idx, unsigned _len,
                           NSException **_exception)
 {
   register unsigned pos = *_idx;
@@ -374,7 +384,7 @@ static BOOL _skipComments(const char *_buffer, unsigned *_idx, unsigned _len,
 }
 
 static NSString *_parseIdentifier(NSZone *_zone,
-                                  const char *_buffer, unsigned *_idx,
+                                  const unichar *_buffer, unsigned *_idx,
                                   unsigned _len, NSException **_exception)
 {
   register unsigned pos = *_idx;
@@ -407,7 +417,7 @@ static NSString *_parseIdentifier(NSZone *_zone,
   }
 }
 static NSString *_parseKeyPath(NSZone *_zone,
-                               const char *_buffer, unsigned *_idx,
+                               const unichar *_buffer, unsigned *_idx,
                                unsigned _len, NSException **_exception,
                                id self)
 {
@@ -437,11 +447,11 @@ static NSString *_parseKeyPath(NSZone *_zone,
     *_idx += 1; // skip '.'
     [keypath appendString:@"."];
 
-    RELEASE(component); component = nil;
+    [component release]; component = nil;
     component = _parseIdentifier(_zone, _buffer, _idx, _len, _exception);
 
     if (component == nil) {
-      RELEASE(keypath); keypath = nil;
+      [keypath release]; keypath = nil;
       *_exception =
         _makeException(*_exception, _buffer, *_idx, _len,
                        @"expected component after '.' in keypath !");
@@ -450,13 +460,13 @@ static NSString *_parseKeyPath(NSZone *_zone,
 
     [keypath appendString:component];
   }
-  RELEASE(component); component = nil;
+  [component release]; component = nil;
 
   return keypath;
 }
 
 static NSString *_parseQString(NSZone *_zone,
-                               const char *_buffer, unsigned *_idx,
+                               const unichar *_buffer, unsigned *_idx,
                                unsigned _len, NSException **_exception,
                                id self)
 {
@@ -469,8 +479,9 @@ static NSString *_parseQString(NSZone *_zone,
   }
 
   if (_buffer[*_idx] != '"') { // it's not a quoted string that's follows
-    *_exception = _makeException(*_exception, _buffer, *_idx, _len,
-                                 @"did not find quoted string (expected '\"')");
+    *_exception = 
+      _makeException(*_exception, _buffer, *_idx, _len,
+                    @"did not find quoted string (expected '\"')");
     return nil;
   }
   else { // a quoted string
@@ -499,8 +510,9 @@ static NSString *_parseQString(NSZone *_zone,
 
     if (pos == _len) { // syntax error, quote not closed
       *_idx = pos;
-      *_exception = _makeException(*_exception, _buffer, *_idx, _len,
-                                   @"quoted string not closed (expected '\"')");
+      *_exception =
+       _makeException(*_exception, _buffer, *_idx, _len,
+                      @"quoted string not closed (expected '\"')");
       return nil;
     }
 
@@ -508,16 +520,16 @@ static NSString *_parseQString(NSZone *_zone,
     *_idx = pos; // store pointer
     pos = 0;
     
-    if (len == 0) { // empty string
+    if (len == 0) /* empty string */
       return @"";
-    }
-    else if (containsEscaped) {
+    
+    if (containsEscaped) {
       register unsigned pos2;
       id   ostr = nil;
-      unsigned char *str;
+      unichar *str;
       
       NSCAssert(len > 0, @"invalid length ..");
-      str = malloc(len + 3);
+      str = calloc(len + 3, sizeof(unichar));
       
       for (pos = startPos, pos2 = 0; _buffer[pos] != '"'; pos++, pos2++) {
         //NSLog(@"char=%c pos=%i pos2=%i", _buffer[pos], pos2);
@@ -541,11 +553,11 @@ static NSString *_parseQString(NSZone *_zone,
           str[pos2] = _buffer[pos];
         }
       }
-      str[pos2] = '\0';
+      str[pos2] = 0;
       NSCAssert(pos2 == len, @"invalid unescape ..");
       
       ostr = _makeStringForBuffer(str, pos2);
-      if (str) free(str); str = NULL;
+      if (str != NULL) free(str); str = NULL;
 
       return ostr;
     }
@@ -556,7 +568,7 @@ static NSString *_parseQString(NSZone *_zone,
   }
 }
 
-static NSData *_parseData(NSZone *_zone, const char *_buffer,
+static NSData *_parseData(NSZone *_zone, const unichar *_buffer,
                           unsigned *_idx, unsigned _len,
                           NSException **_exception,
                           id self)
@@ -653,7 +665,7 @@ static NSData *_parseData(NSZone *_zone, const char *_buffer,
 }
 
 static NSDictionary *_parseDict(NSZone *_zone,
-                                const char *_buffer, unsigned *_idx,
+                                const unichar *_buffer, unsigned *_idx,
                                 unsigned _len, NSException **_exception,
                                 id self)
 {
@@ -807,7 +819,7 @@ static NSDictionary *_parseDict(NSZone *_zone,
   }
 }
 
-static NSArray *_parseArray(NSZone *_zone, const char *_buffer, unsigned *_idx,
+static NSArray *_parseArray(NSZone *_zone, const unichar *_buffer, unsigned *_idx,
                             unsigned _len, NSException **_exception,
                             id self)
 {
@@ -905,7 +917,32 @@ static NSNumber *_parseDigitPath(NSString *digitPath) {
     : [NumberClass numberWithInt:[digitPath intValue]];
 }
 
-static id _parseProperty(NSZone *_zone, const char *_buffer, unsigned *_idx,
+static BOOL _ucIsEqual(const unichar *s, char *tok, unsigned len) {
+  switch (len) {
+  case 0: return NO;
+  case 1: return (s[0] == tok[0]) ? YES : NO;
+  case 2:
+    if (s[0] != tok[0] || s[0] == 0) return NO;
+    if (s[1] != tok[1]) return NO;
+    return YES;
+  case 3:
+    if (s[0] != tok[0] || s[0] == 0) return NO;
+    if (s[1] != tok[1] || s[1] == 0) return NO;
+    if (s[2] != tok[2]) return NO;
+    return YES;
+  default: {
+    register unsigned int i;
+    
+    for (i = 0; i < len; i++) {
+      if (s[i] != tok[i] || s[i] == 0) return NO;
+    }
+    return YES;
+  }
+  }
+  return NO;
+}
+
+static id _parseProperty(NSZone *_zone, const unichar *_buffer, unsigned *_idx,
                          unsigned _len,
                          NSException **_exception, BOOL _allowAssoc,
                          id self)
@@ -955,7 +992,7 @@ static id _parseProperty(NSZone *_zone, const char *_buffer, unsigned *_idx,
         if ((_buffer[*_idx] == 'Y') || (_buffer[*_idx] == 'N')) {
           // parse YES and NO
           if ((*_idx + 4) < _len) {
-            if (strncmp(&(_buffer[*_idx]), "YES", 3) == 0 &&
+            if (_ucIsEqual(&(_buffer[*_idx]), "YES", 3) == 0 &&
                _isBreakChar(_buffer[*_idx + 3])) {
               result = [yesNum retain];
               valueProperty = YES;
@@ -963,7 +1000,7 @@ static id _parseProperty(NSZone *_zone, const char *_buffer, unsigned *_idx,
             }
           }
           if (((*_idx + 3) < _len) && !valueProperty) {
-            if (strncmp(&(_buffer[*_idx]), "NO", 2) == 0 &&
+            if (_ucIsEqual(&(_buffer[*_idx]), "NO", 2) == 0 &&
                _isBreakChar(_buffer[*_idx + 2])) {
               result = [noNum retain];
               valueProperty = YES;
@@ -974,7 +1011,7 @@ static id _parseProperty(NSZone *_zone, const char *_buffer, unsigned *_idx,
         else if ((_buffer[*_idx] == 't') || (_buffer[*_idx] == 'f')) {
           // parse true and false
           if ((*_idx + 5) < _len) {
-            if (strncmp(&(_buffer[*_idx]), "true", 4) == 0 &&
+            if (_ucIsEqual(&(_buffer[*_idx]), "true", 4) == 0 &&
                _isBreakChar(_buffer[*_idx + 4])) {
               result = [yesNum retain];
               valueProperty = YES;
@@ -982,7 +1019,7 @@ static id _parseProperty(NSZone *_zone, const char *_buffer, unsigned *_idx,
             }
           }
           if (((*_idx + 6) < _len) && !valueProperty) {
-            if (strncmp(&(_buffer[*_idx]), "false", 5) == 0 &&
+            if (_ucIsEqual(&(_buffer[*_idx]), "false", 5) == 0 &&
                _isBreakChar(_buffer[*_idx + 5])) {
               result = [noNum retain];
               valueProperty = YES;
@@ -1034,7 +1071,7 @@ static id _parseProperty(NSZone *_zone, const char *_buffer, unsigned *_idx,
   return result;
 }
 
-static NSDictionary *_parseWodConfig(NSZone *_zone, const char *_buffer,
+static NSDictionary *_parseWodConfig(NSZone *_zone, const unichar *_buffer,
                                      unsigned *_idx, unsigned _len,
                                      NSException **_exception,
                                      id self)
@@ -1194,7 +1231,7 @@ static NSDictionary *_parseWodConfig(NSZone *_zone, const char *_buffer,
   }
 }
 
-static id _parseWodEntry(NSZone *_zone, const char *_buffer, unsigned *_idx,
+static id _parseWodEntry(NSZone *_zone, const unichar *_buffer, unsigned *_idx,
                          unsigned _len, NSException **_exception,
                          NSString **_name, NSString **_class, id self)
 {
index 74e87125d5a62f157403bddafe75882d446a95c5..8cf51b052df68fb93b2a5ace837e1f8cd4473dff 100644 (file)
@@ -1,6 +1,6 @@
 # version file
 
-SUBMINOR_VERSION:=151
+SUBMINOR_VERSION:=152
 
 # v4.5.122 requires libNGExtensions v4.5.153
 # v4.5.91  requires libNGExtensions v4.5.134
index 540df8b9831007e9abee43f1dc19db75f54784dc..789e3bf95ce28457dd668880ddae218d981ef768 100644 (file)
 // fast inline functions (non-WO)
 
 #define WOResponse_AddChar(__R__,__C__) \
-  if (__R__) {__R__->addChar(__R__, @selector(appendContentCharacter:), __C__);}
+  if (__R__) {__R__->addChar(__R__, @selector(appendContentCharacter:), \
+                            __C__);}
 
 #define WOResponse_AddString(__R__,__C__) \
   if (__R__) {__R__->addStr(__R__, @selector(appendContentString:), __C__);}
 #define WOResponse_AddCString(__R__,__C__) \
-  if (__R__) {__R__->addCStr(__R__, @selector(appendContentCString:), __C__);}
+  if (__R__) {__R__->addCStr(__R__, @selector(appendContentCString:), \
+                            (const unsigned char *)__C__);}
 
 #define WOResponse_AddHtmlString(__R__,__C__) \
-  if (__R__) {__R__->addHStr(__R__, @selector(appendContentHTMLString:), __C__);}
+  if (__R__) {__R__->addHStr(__R__, @selector(appendContentHTMLString:), \
+                            __C__);}
 
 // TODO: performance ! - use static buffer and appendContentCString !
 
 #define WOResponse_AddUInt(__R__,__C__) \
   if (__R__) {\
     switch(__C__) {\
-      case 0: __R__->addCStr(__R__, @selector(appendContentCString:),"0");break;\
-      case 1: __R__->addCStr(__R__, @selector(appendContentCString:),"1");break;\
-      case 2: __R__->addCStr(__R__, @selector(appendContentCString:),"2");break;\
-      case 3: __R__->addCStr(__R__, @selector(appendContentCString:),"3");break;\
-      case 4: __R__->addCStr(__R__, @selector(appendContentCString:),"4");break;\
+      case 0: __R__->addCStr(__R__, @selector(appendContentCString:),\
+                            (const unsigned char *)"0");break; \
+      case 1: __R__->addCStr(__R__, @selector(appendContentCString:),\
+                            (const unsigned char *)"1");break; \
+      case 2: __R__->addCStr(__R__, @selector(appendContentCString:),\
+                            (const unsigned char *)"2");break; \
+      case 3: __R__->addCStr(__R__, @selector(appendContentCString:),\
+                            (const unsigned char *)"3");break; \
+      case 4: __R__->addCStr(__R__, @selector(appendContentCString:),\
+                            (const unsigned char *)"4");break; \
       default: {\
-        char buf[12]; sprintf(buf,"%d", __C__); \
+        unsigned char buf[12]; \
+       sprintf((char *)buf,"%d", __C__);                       \
         __R__->addCStr(__R__, @selector(appendContentCString:), buf);}\
     }\
   }
 #define WOResponse_AddInt(__R__,__C__) \
   if (__R__) {\
     switch(__C__) {\
-      case 0: __R__->addCStr(__R__, @selector(appendContentCString:),"0");break;\
-      case 1: __R__->addCStr(__R__, @selector(appendContentCString:),"1");break;\
-      case 2: __R__->addCStr(__R__, @selector(appendContentCString:),"2");break;\
-      case 3: __R__->addCStr(__R__, @selector(appendContentCString:),"3");break;\
-      case 4: __R__->addCStr(__R__, @selector(appendContentCString:),"4");break;\
+      case 0: __R__->addCStr(__R__, @selector(appendContentCString:),\
+                            (const unsigned char *)"0");break; \
+      case 1: __R__->addCStr(__R__, @selector(appendContentCString:),\
+                            (const unsigned char *)"1");break; \
+      case 2: __R__->addCStr(__R__, @selector(appendContentCString:),\
+                            (const unsigned char *)"2");break; \
+      case 3: __R__->addCStr(__R__, @selector(appendContentCString:),\
+                            (const unsigned char *)"3");break; \
+      case 4: __R__->addCStr(__R__, @selector(appendContentCString:),\
+                            (const unsigned char *)"4");break; \
       default: {\
-        char buf[12]; sprintf(buf,"%i", __C__); \
+        unsigned char buf[12]; \
+       sprintf((char *)buf,"%d", __C__);                       \
         __R__->addCStr(__R__, @selector(appendContentCString:), buf);}\
     }\
   }
index de580e5d673fc5ede8e05e2384084ab5e77742bd..caff5ea0d5394fd42a8e5185282b5ef1f8a49d63 100644 (file)
@@ -31,18 +31,18 @@ fhs-products-dirs ::
 
 move-headers-to-fhs :: fhs-header-dirs
        @echo "moving headers to $(FHS_INCLUDE_DIR) .."
-       mv $(GNUSTEP_HEADERS)$(libNGObjWeb_HEADER_FILES_INSTALL_DIR)/*.h \
+       mv -f $(GNUSTEP_HEADERS)$(libNGObjWeb_HEADER_FILES_INSTALL_DIR)/*.h \
          $(FHS_INCLUDE_DIR)$(libNGObjWeb_HEADER_FILES_INSTALL_DIR)/
-       mv $(GNUSTEP_HEADERS)/NGHttp/*.h $(FHS_INCLUDE_DIR)/NGHttp/
+       mv -f $(GNUSTEP_HEADERS)/NGHttp/*.h $(FHS_INCLUDE_DIR)/NGHttp/
 
 move-libs-to-fhs :: 
        @echo "moving libs to $(FHS_LIB_DIR) .."
-       mv $(NONFHS_LIBDIR)/$(NONFHS_LIBNAME)* $(FHS_LIB_DIR)/
+       mv -f $(NONFHS_LIBDIR)/$(NONFHS_LIBNAME)* $(FHS_LIB_DIR)/
 
 move-tools-to-fhs :: fhs-bin-dirs
        @echo "moving tools from $(NONFHS_BINDIR) to $(FHS_BIN_DIR) .."
        for i in $(TOOL_NAME); do \
-         mv "$(NONFHS_BINDIR)/$${i}" $(FHS_BIN_DIR); \
+         mv -f "$(NONFHS_BINDIR)/$${i}" $(FHS_BIN_DIR); \
        done
 
 move-bundles-to-fhs :: fhs-products-dirs
@@ -50,7 +50,7 @@ move-bundles-to-fhs :: fhs-products-dirs
        for i in $(BUNDLE_NAME); do \
           j="$(FHS_SO_DIR)/$${i}$(BUNDLE_EXTENSION)"; \
          if test -d $$j; then rm -r $$j; fi; \
-         mv "$(BUNDLE_INSTALL_DIR)/$${i}$(BUNDLE_EXTENSION)" $$j; \
+         mv -f "$(BUNDLE_INSTALL_DIR)/$${i}$(BUNDLE_EXTENSION)" $$j; \
        done
 
 move-to-fhs :: move-headers-to-fhs move-libs-to-fhs move-tools-to-fhs \