]> git.saurik.com Git - hfs.git/commitdiff
Use crazy __lambda{,_} macros to implement blocks.
authorJay Freeman (saurik) <saurik@saurik.com>
Mon, 16 Dec 2013 12:43:33 +0000 (04:43 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Mon, 16 Dec 2013 12:43:33 +0000 (04:43 -0800)
fsck_hfs/dfalib/SControl.c
fsck_hfs/dfalib/fsck_journal.c
fsck_hfs/dfalib/fsck_journal.h
fsck_hfs/fsck_messages.h

index 5c654b93315b1258d5a305f99c3ada850a65e7ab..d75fd6c1cd98c5296e218306c9dfca7a7906c86e 100644 (file)
@@ -288,7 +288,7 @@ CheckHFS( const char *rdevnode, int fsReadRef, int fsWriteRef, int checkLevel,
                         * the message in question corresponds to a major or a minor error.  If it's
                         * major, we longjmp just above, which causes us to exit out early.
                         */
-                       fsckSetBlock(fsckContext, fsckPhaseAfterMessage, (fsckBlock_t) ^(fsck_ctx_t c, int msgNum, va_list args) {
+                       fsckSetBlock(fsckContext, fsckPhaseAfterMessage, __lambda(fsck_block_status_t, (fsck_ctx_t c, int msgNum, va_list args), {
                                if (abs(msgNum) > E_FirstError && abs(msgNum) < E_LastError) {
                                        if (isMinorError(abs(msgNum), msgCounts) == 1)
                                                return fsckBlockContinue;
@@ -297,7 +297,7 @@ CheckHFS( const char *rdevnode, int fsReadRef, int fsWriteRef, int checkLevel,
                                } else {
                                        return fsckBlockContinue;
                                }
-                       });
+                       }));
                }
        }
 DoAgain:
@@ -667,7 +667,7 @@ void ScavCtrl( SGlobPtr GPtr, UInt32 ScavOp, short *ScavRes )
                                                                 blockSize,
                                                                 0,
                                                                 jnlInfo.name,
-                                                                ^(off_t start, void *data, size_t len) {
+                                                                __lambda(int, (off_t start, void *data, size_t len), {
                                                                         Buf_t *buf;
                                                                         int rv;
                                                                         rv = CacheRead(&fscache, start, (int)len, &buf);
@@ -677,7 +677,7 @@ void ScavCtrl( SGlobPtr GPtr, UInt32 ScavOp, short *ScavRes )
                                                                         rv = CacheWrite(&fscache, buf, 0, kLockWrite);
                                                                         if (rv != 0)
                                                                                 abort();
-                                                                        return 0;}
+                                                                        return 0;})
                                                            ) == -1) {
                                                        fsckPrint(GPtr->context, E_DirtyJournal);
                                                        GPtr->JStat |= S_DirtyJournal;
index 8f9f8a2367f9d3c0df44a3fdb91ce7e87c160eb8..08369342b7bdb1a2d1f37e3a30b8f2b59ff44a8d 100644 (file)
@@ -72,7 +72,7 @@ static swapper_t swappedEndian = {
        ^(uint64_t x) { return OSSwapInt64(x); }
 };
 
-typedef int (^journal_write_block_t)(off_t, void *, size_t);
+typedef int (__lambda_ journal_write_block_t)(off_t, void *, size_t);
 
 //
 // this isn't a great checksum routine but it will do for now.
@@ -367,7 +367,7 @@ journal_open(int jfd,
             size_t     min_fs_blksize, // Blocksize of the data filesystem, journal blocksize must be at least this size
             uint32_t   flags __unused, // Not used in this implementation
             const char *jdev_name,     // The name of the journal device, for logging
-            int (^do_write_b)(off_t, void*, size_t))
+            int (__lambda_ do_write_b)(off_t, void*, size_t))
 {
        journal_header jhdr = { 0 };
        swapper_t       *jnlSwap;       // Used to swap fields of the journal
index 8b3ecbf8284f48a94f649188204555697f047f1c..c930c6950df030301e5998095af85108da12aae8 100644 (file)
@@ -103,6 +103,6 @@ int journal_open(int jdev,
                     size_t        min_fs_block_size,
                     uint32_t       flags,
                     const char *jdev_name,
-                    int (^do_write_b)(off_t, void *, size_t));
+                    int (__lambda_ do_write_b)(off_t, void *, size_t));
 
 #endif /* !_FSCK_JOURNAL_H */
index ee2ba3e3c9e03936cdf3d4848dce6a0ec2724612..db6e3c03cb8f9dd1738f06021b4025f0d5d689ba 100644 (file)
@@ -141,7 +141,7 @@ typedef enum fsck_block_phase_type fsck_block_phase_t;
  * the third is a va_list of the arguments for the message.
  */
 
-typedef fsck_block_status_t (^fsckBlock_t)(fsck_ctx_t, int, va_list);
+typedef fsck_block_status_t (__lambda_ fsckBlock_t)(fsck_ctx_t, int, va_list);
 
 extern fsckBlock_t fsckGetBlock(fsck_ctx_t, fsck_block_phase_t);
 extern void fsckSetBlock(fsck_ctx_t, fsck_block_phase_t, fsckBlock_t);