فهرست منبع

Fixed a bunch of warnings that would come up with certain compiler options.

August Mueller 13 سال پیش
والد
کامیت
8fba9b8c86
5فایلهای تغییر یافته به همراه82 افزوده شده و 70 حذف شده
  1. 6 0
      fmdb.xcodeproj/project.pbxproj
  2. 20 13
      src/FMDatabase.m
  3. 3 3
      src/FMDatabasePool.m
  4. 4 4
      src/FMResultSet.m
  5. 49 50
      src/fmdb.m

+ 6 - 0
fmdb.xcodeproj/project.pbxproj

@@ -274,12 +274,15 @@
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES;
 				CLANG_WARN_OBJCPP_ARC_ABI = YES;
+				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
 				COPY_PHASE_STRIP = NO;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = fmdb_Prefix.pch;
+				GCC_WARN_SHADOW = YES;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = "$(LIBRARY_SEARCH_PATHS)";
 				MACOSX_DEPLOYMENT_TARGET = 10.7;
@@ -293,11 +296,14 @@
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
 				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES;
 				CLANG_WARN_OBJCPP_ARC_ABI = YES;
+				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
 				GCC_MODEL_TUNING = G5;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = fmdb_Prefix.pch;
+				GCC_WARN_SHADOW = YES;
 				INSTALL_PATH = "$(HOME)/bin";
 				LIBRARY_SEARCH_PATHS = "$(LIBRARY_SEARCH_PATHS)";
 				MACOSX_DEPLOYMENT_TARGET = 10.7;

+ 20 - 13
src/FMDatabase.m

@@ -26,7 +26,7 @@ + (NSString*)sqliteLibVersion {
 
 + (BOOL)isSQLiteThreadSafe {
     // make sure to read the sqlite headers on this guy!
-    return sqlite3_threadsafe();
+    return sqlite3_threadsafe() != 0;
 }
 
 - (id)initWithPath:(NSString*)aPath {
@@ -358,7 +358,7 @@ - (void)bindObject:(id)obj toColumn:(int)idx inStatement:(sqlite3_stmt*)pStmt {
             sqlite3_bind_int64(pStmt, idx, [obj longLongValue]);
         }
         else if (strcmp([obj objCType], @encode(unsigned long long)) == 0) {
-            sqlite3_bind_int64(pStmt, idx, [obj unsignedLongLongValue]);
+            sqlite3_bind_int64(pStmt, idx, (long long)[obj unsignedLongLongValue]);
         }
         else if (strcmp([obj objCType], @encode(float)) == 0) {
             sqlite3_bind_double(pStmt, idx, [obj floatValue]);
@@ -386,28 +386,33 @@ - (void)extractSQL:(NSString *)sql argumentsList:(va_list)args intoString:(NSMut
         if (last == '%') {
             switch (current) {
                 case '@':
-                    arg = va_arg(args, id); break;
+                    arg = va_arg(args, id);
+                    break;
                 case 'c':
                     // warning: second argument to 'va_arg' is of promotable type 'char'; this va_arg has undefined behavior because arguments will be promoted to 'int'
-                    arg = [NSString stringWithFormat:@"%c", va_arg(args, int)]; break;
+                    arg = [NSString stringWithFormat:@"%c", va_arg(args, int)];
+                    break;
                 case 's':
-                    arg = [NSString stringWithUTF8String:va_arg(args, char*)]; break;
+                    arg = [NSString stringWithUTF8String:va_arg(args, char*)];
+                    break;
                 case 'd':
                 case 'D':
                 case 'i':
-                    arg = [NSNumber numberWithInt:va_arg(args, int)]; break;
+                    arg = [NSNumber numberWithInt:va_arg(args, int)];
+                    break;
                 case 'u':
                 case 'U':
-                    arg = [NSNumber numberWithUnsignedInt:va_arg(args, unsigned int)]; break;
+                    arg = [NSNumber numberWithUnsignedInt:va_arg(args, unsigned int)];
+                    break;
                 case 'h':
                     i++;
                     if (i < length && [sql characterAtIndex:i] == 'i') {
                         //  warning: second argument to 'va_arg' is of promotable type 'short'; this va_arg has undefined behavior because arguments will be promoted to 'int'
-                        arg = [NSNumber numberWithShort:va_arg(args, int)];
+                        arg = [NSNumber numberWithShort:(short)(va_arg(args, int))];
                     }
                     else if (i < length && [sql characterAtIndex:i] == 'u') {
                         // warning: second argument to 'va_arg' is of promotable type 'unsigned short'; this va_arg has undefined behavior because arguments will be promoted to 'int'
-                        arg = [NSNumber numberWithUnsignedShort:va_arg(args, uint)];
+                        arg = [NSNumber numberWithUnsignedShort:(unsigned short)(va_arg(args, uint))];
                     }
                     else {
                         i--;
@@ -426,10 +431,12 @@ - (void)extractSQL:(NSString *)sql argumentsList:(va_list)args intoString:(NSMut
                     }
                     break;
                 case 'f':
-                    arg = [NSNumber numberWithDouble:va_arg(args, double)]; break;
+                    arg = [NSNumber numberWithDouble:va_arg(args, double)];
+                    break;
                 case 'g':
                     // warning: second argument to 'va_arg' is of promotable type 'float'; this va_arg has undefined behavior because arguments will be promoted to 'double'
-                    arg = [NSNumber numberWithFloat:va_arg(args, double)]; break;
+                    arg = [NSNumber numberWithFloat:(float)(va_arg(args, double))];
+                    break;
                 case 'l':
                     i++;
                     if (i < length) {
@@ -592,7 +599,7 @@ - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray*)arr
         while (idx < queryCount) {
             
             if (arrayArgs) {
-                obj = [arrayArgs objectAtIndex:idx];
+                obj = [arrayArgs objectAtIndex:(NSUInteger)idx];
             }
             else {
                 obj = va_arg(args, id);
@@ -776,7 +783,7 @@ - (BOOL)executeUpdate:(NSString*)sql error:(NSError**)outErr withArgumentsInArra
         while (idx < queryCount) {
             
             if (arrayArgs) {
-                obj = [arrayArgs objectAtIndex:idx];
+                obj = [arrayArgs objectAtIndex:(NSUInteger)idx];
             }
             else {
                 obj = va_arg(args, id);

+ 3 - 3
src/FMDatabasePool.m

@@ -129,7 +129,7 @@ - (FMDatabase*)db {
 
 - (NSUInteger)countOfCheckedInDatabases {
     
-    __block NSInteger count;
+    __block NSUInteger count;
     
     [self executeLocked:^() {
         count = [_databaseInPool count];
@@ -140,7 +140,7 @@ - (NSUInteger)countOfCheckedInDatabases {
 
 - (NSUInteger)countOfCheckedOutDatabases {
     
-    __block NSInteger count;
+    __block NSUInteger count;
     
     [self executeLocked:^() {
         count = [_databaseOutPool count];
@@ -150,7 +150,7 @@ - (NSUInteger)countOfCheckedOutDatabases {
 }
 
 - (NSUInteger)countOfOpenDatabases {
-    __block NSInteger count;
+    __block NSUInteger count;
     
     [self executeLocked:^() {
         count = [_databaseOutPool count] + [_databaseInPool count];

+ 4 - 4
src/FMResultSet.m

@@ -100,7 +100,7 @@ - (void)kvcMagic:(id)object {
 
 - (NSDictionary*)resultDict {
     
-    int num_cols = sqlite3_data_count([_statement statement]);
+    NSUInteger num_cols = (NSUInteger)sqlite3_data_count([_statement statement]);
     
     if (num_cols > 0) {
         NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:num_cols];
@@ -129,7 +129,7 @@ - (NSDictionary*)resultDict {
 
 - (NSDictionary*)resultDictionary {
     
-    int num_cols = sqlite3_data_count([_statement statement]);
+    NSUInteger num_cols = (NSUInteger)sqlite3_data_count([_statement statement]);
     
     if (num_cols > 0) {
         NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:num_cols];
@@ -333,7 +333,7 @@ - (NSData*)dataForColumnIndex:(int)columnIdx {
     
     int dataSize = sqlite3_column_bytes([_statement statement], columnIdx);
     
-    NSMutableData *data = [NSMutableData dataWithLength:dataSize];
+    NSMutableData *data = [NSMutableData dataWithLength:(NSUInteger)dataSize];
     
     memcpy([data mutableBytes], sqlite3_column_blob([_statement statement], columnIdx), dataSize);
     
@@ -353,7 +353,7 @@ - (NSData*)dataNoCopyForColumnIndex:(int)columnIdx {
     
     int dataSize = sqlite3_column_bytes([_statement statement], columnIdx);
     
-    NSData *data = [NSData dataWithBytesNoCopy:(void *)sqlite3_column_blob([_statement statement], columnIdx) length:dataSize freeWhenDone:NO];
+    NSData *data = [NSData dataWithBytesNoCopy:(void *)sqlite3_column_blob([_statement statement], columnIdx) length:(NSUInteger)dataSize freeWhenDone:NO];
     
     return data;
 }

+ 49 - 50
src/fmdb.m

@@ -202,8 +202,8 @@ int main (int argc, const char * argv[]) {
     NSLog(@"Count of changes (should be 1): %d", [db changes]);
     FMDBQuickCheck([db changes] == 1);
     
-    int a = [db intForQuery:@"select a from t1 where a = ?", [NSNumber numberWithInt:5]];
-    if (a != 5) {
+    int ia = [db intForQuery:@"select a from t1 where a = ?", [NSNumber numberWithInt:5]];
+    if (ia != 5) {
         NSLog(@"intForQuery didn't work (a != 5)");
     }
     
@@ -255,10 +255,10 @@ int main (int argc, const char * argv[]) {
     
     rs = [db executeQuery:@"select * from t2"];
     while ([rs next]) {
-        NSString *a = [rs stringForColumnIndex:0];
+        NSString *aa = [rs stringForColumnIndex:0];
         NSString *b = [rs stringForColumnIndex:1];
         
-        if (a != nil) {
+        if (aa != nil) {
             NSLog(@"%s:%d", __FUNCTION__, __LINE__);
             NSLog(@"OH OH, PROBLEMO!");
             return 10;
@@ -409,7 +409,7 @@ int main (int argc, const char * argv[]) {
     
     while ([rs next]) {
         
-        int i = [rs intForColumnIndex:2];
+        i = [rs intForColumnIndex:2];
         
         if (i == 12) {
             // it's the first row we inserted.
@@ -596,7 +596,6 @@ int main (int argc, const char * argv[]) {
     
     
     {
-        NSError *err;
         FMDBQuickCheck(([db update:@"insert into t5 values (?, ?, ?, ?, ?)" withErrorAndBindings:&err, @"text", [NSNumber numberWithInt:42], @"BLOB", @"d", [NSNumber numberWithInt:0]]));
         
     }
@@ -697,19 +696,19 @@ int main (int argc, const char * argv[]) {
     FMDBQuickCheck(queue);
     
     {
-        [queue inDatabase:^(FMDatabase *db) {
+        [queue inDatabase:^(FMDatabase *adb) {
             
             
             
-            [db executeUpdate:@"create table qfoo (foo text)"];
-            [db executeUpdate:@"insert into qfoo values ('hi')"];
-            [db executeUpdate:@"insert into qfoo values ('hello')"];
-            [db executeUpdate:@"insert into qfoo values ('not')"];
+            [adb executeUpdate:@"create table qfoo (foo text)"];
+            [adb executeUpdate:@"insert into qfoo values ('hi')"];
+            [adb executeUpdate:@"insert into qfoo values ('hello')"];
+            [adb executeUpdate:@"insert into qfoo values ('not')"];
             
             
             
             int count = 0;
-            FMResultSet *rsl = [db executeQuery:@"select * from qfoo where foo like 'h%'"];
+            FMResultSet *rsl = [adb executeQuery:@"select * from qfoo where foo like 'h%'"];
             while ([rsl next]) {
                 count++;
             }
@@ -717,7 +716,7 @@ int main (int argc, const char * argv[]) {
             FMDBQuickCheck(count == 2);
             
             count = 0;
-            rsl = [db executeQuery:@"select * from qfoo where foo like ?", @"h%"];
+            rsl = [adb executeQuery:@"select * from qfoo where foo like ?", @"h%"];
             while ([rsl next]) {
                 count++;
             }
@@ -730,7 +729,7 @@ int main (int argc, const char * argv[]) {
     
     {
         // You should see pairs of numbers show up in stdout for this stuff:
-        int ops = 16;
+        size_t ops = 16;
         
         dispatch_queue_t dqueue = dispatch_get_global_queue(0, DISPATCH_QUEUE_PRIORITY_HIGH);
         
@@ -740,10 +739,10 @@ int main (int argc, const char * argv[]) {
             if (nby % 2 == 1) {
                 [NSThread sleepForTimeInterval:.1];
                 
-                [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
+                [queue inTransaction:^(FMDatabase *adb, BOOL *rollback) {
                     NSLog(@"Starting query  %ld", nby);
                     
-                    FMResultSet *rsl = [db executeQuery:@"select * from qfoo where foo like 'h%'"];
+                    FMResultSet *rsl = [adb executeQuery:@"select * from qfoo where foo like 'h%'"];
                     while ([rsl next]) {
                         ;// whatever.
                     }
@@ -757,33 +756,33 @@ int main (int argc, const char * argv[]) {
                 [NSThread sleepForTimeInterval:.1];
             }
             
-            [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
+            [queue inTransaction:^(FMDatabase *adb, BOOL *rollback) {
                 NSLog(@"Starting update %ld", nby);
-                [db executeUpdate:@"insert into qfoo values ('1')"];
-                [db executeUpdate:@"insert into qfoo values ('2')"];
-                [db executeUpdate:@"insert into qfoo values ('3')"];
+                [adb executeUpdate:@"insert into qfoo values ('1')"];
+                [adb executeUpdate:@"insert into qfoo values ('2')"];
+                [adb executeUpdate:@"insert into qfoo values ('3')"];
                 NSLog(@"Ending update   %ld", nby);
             }];
         });
         
         [queue close];
         
-        [queue inDatabase:^(FMDatabase *db) {
-            FMDBQuickCheck([db executeUpdate:@"insert into qfoo values ('1')"]);
+        [queue inDatabase:^(FMDatabase *adb) {
+            FMDBQuickCheck([adb executeUpdate:@"insert into qfoo values ('1')"]);
         }];
     }
     
     
     
     {
-        [queue inDatabase:^(FMDatabase *db) {
-            [db executeUpdate:@"create table transtest (a integer)"];
-            FMDBQuickCheck([db executeUpdate:@"insert into transtest values (1)"]);
-            FMDBQuickCheck([db executeUpdate:@"insert into transtest values (2)"]);
+        [queue inDatabase:^(FMDatabase *adb) {
+            [adb executeUpdate:@"create table transtest (a integer)"];
+            FMDBQuickCheck([adb executeUpdate:@"insert into transtest values (1)"]);
+            FMDBQuickCheck([adb executeUpdate:@"insert into transtest values (2)"]);
             
             int rowCount = 0;
-            FMResultSet *rs = [db executeQuery:@"select * from transtest"];
-            while ([rs next]) {
+            FMResultSet *ars = [adb executeQuery:@"select * from transtest"];
+            while ([ars next]) {
                 rowCount++;
             }
             
@@ -792,8 +791,8 @@ int main (int argc, const char * argv[]) {
         
         
         
-        [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
-            FMDBQuickCheck([db executeUpdate:@"insert into transtest values (3)"]);
+        [queue inTransaction:^(FMDatabase *adb, BOOL *rollback) {
+            FMDBQuickCheck([adb executeUpdate:@"insert into transtest values (3)"]);
             
             if (YES) {
                 // uh oh!, something went wrong (not really, this is just a test
@@ -801,18 +800,18 @@ int main (int argc, const char * argv[]) {
                 return;
             }
             
-            FMDBQuickCheck([db executeUpdate:@"insert into transtest values (4)"]);
+            FMDBQuickCheck([adb executeUpdate:@"insert into transtest values (4)"]);
         }];
         
-        [queue inDatabase:^(FMDatabase *db) {
+        [queue inDatabase:^(FMDatabase *adb) {
         
             int rowCount = 0;
-            FMResultSet *rs = [db executeQuery:@"select * from transtest"];
-            while ([rs next]) {
+            FMResultSet *ars = [adb executeQuery:@"select * from transtest"];
+            while ([ars next]) {
                 rowCount++;
             }
             
-            FMDBQuickCheck(![db hasOpenResultSets]);
+            FMDBQuickCheck(![adb hasOpenResultSets]);
             
             NSLog(@"after rollback, rowCount is %d (should be 2)", rowCount);
             
@@ -822,20 +821,20 @@ int main (int argc, const char * argv[]) {
     
     // hey, let's make a custom function!
     
-    [queue inDatabase:^(FMDatabase *db) {
+    [queue inDatabase:^(FMDatabase *adb) {
         
-        [db executeUpdate:@"create table ftest (foo text)"];
-        [db executeUpdate:@"insert into ftest values ('hello')"];
-        [db executeUpdate:@"insert into ftest values ('hi')"];
-        [db executeUpdate:@"insert into ftest values ('not h!')"];
-        [db executeUpdate:@"insert into ftest values ('definitely not h!')"];
+        [adb executeUpdate:@"create table ftest (foo text)"];
+        [adb executeUpdate:@"insert into ftest values ('hello')"];
+        [adb executeUpdate:@"insert into ftest values ('hi')"];
+        [adb executeUpdate:@"insert into ftest values ('not h!')"];
+        [adb executeUpdate:@"insert into ftest values ('definitely not h!')"];
         
-        [db makeFunctionNamed:@"StringStartsWithH" maximumArguments:1 withBlock:^(sqlite3_context *context, int argc, sqlite3_value **argv) {
-            if (sqlite3_value_type(argv[0]) == SQLITE_TEXT) {
+        [adb makeFunctionNamed:@"StringStartsWithH" maximumArguments:1 withBlock:^(sqlite3_context *context, int aargc, sqlite3_value **aargv) {
+            if (sqlite3_value_type(aargv[0]) == SQLITE_TEXT) {
                 
                 @autoreleasepool {
                     
-                    const char *c = (const char *)sqlite3_value_text(argv[0]);
+                    const char *c = (const char *)sqlite3_value_text(aargv[0]);
                     
                     NSString *s = [NSString stringWithUTF8String:c];
                     
@@ -843,14 +842,14 @@ int main (int argc, const char * argv[]) {
                 }
             }
             else {
-                NSLog(@"Unknown formart for StringStartsWithH (%d) %s:%d", sqlite3_value_type(argv[0]), __FUNCTION__, __LINE__);
+                NSLog(@"Unknown formart for StringStartsWithH (%d) %s:%d", sqlite3_value_type(aargv[0]), __FUNCTION__, __LINE__);
                 sqlite3_result_null(context);
             }
         }];
         
         int rowCount = 0;
-        FMResultSet *rs = [db executeQuery:@"select * from ftest where StringStartsWithH(foo)"];
-        while ([rs next]) {
+        FMResultSet *ars = [adb executeQuery:@"select * from ftest where StringStartsWithH(foo)"];
+        while ([ars next]) {
             rowCount++;
             
             NSLog(@"Does %@ start with 'h'?", [rs stringForColumnIndex:0]);
@@ -1042,9 +1041,9 @@ void testPool(NSString *dbPath) {
             FMDBQuickCheck(![adb hadError]);
             [adb executeUpdate:@"insert into easy values (?)", [NSNumber numberWithInt:1009]];
             
-            [adb inSavePoint:^(BOOL *rollback) {
+            [adb inSavePoint:^(BOOL *arollback) {
                 FMDBQuickCheck(([adb executeUpdate:@"insert into easy values (?)", [NSNumber numberWithInt:1010]]));
-                *rollback = YES;
+                *arollback = YES;
             }];
         }];
         
@@ -1095,7 +1094,7 @@ void testPool(NSString *dbPath) {
     
     {
         
-        int ops = 128;
+        size_t ops = 128;
         
         dispatch_queue_t dqueue = dispatch_get_global_queue(0, DISPATCH_QUEUE_PRIORITY_HIGH);