1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

use do/while(0) around GetDBM macros

* README.EXT: wrap GetDBM with do/while(0)
* README.EXT.ja: ditto
* ext/dbm/dbm.c: ditto, likewise for GetDBM2
* ext/gdbm/gdbm.c: ditto
* ext/sdbm/init.c: ditto
  [ruby-core:61217]

ref: http://c-faq.com/cpp/multistmt.html

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45260 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2014-03-02 22:50:31 +00:00
parent 60bfa43238
commit fd61a78303
6 changed files with 23 additions and 14 deletions

View file

@ -1,3 +1,12 @@
Mon Mar 3 07:47:17 2014 Eric Wong <e@80x24.org>
* README.EXT: wrap GetDBM with do/while(0)
* README.EXT.ja: ditto
* ext/dbm/dbm.c: ditto, likewise for GetDBM2
* ext/gdbm/gdbm.c: ditto
* ext/sdbm/init.c: ditto
[ruby-core:61217]
Mon Mar 3 07:17:31 2014 Zachary Scott <e@zzak.io> Mon Mar 3 07:17:31 2014 Zachary Scott <e@zzak.io>
* NEWS: [DOC] Update doc regarding filesystem load when flushing IO * NEWS: [DOC] Update doc regarding filesystem load when flushing IO

View file

@ -683,10 +683,10 @@ wrapping DBM* directly, because we want to cache size information.
To retrieve the dbmdata structure from a Ruby object, we define the To retrieve the dbmdata structure from a Ruby object, we define the
following macro: following macro:
#define GetDBM(obj, dbmp) {\ #define GetDBM(obj, dbmp) do {\
Data_Get_Struct(obj, struct dbmdata, dbmp);\ Data_Get_Struct(obj, struct dbmdata, dbmp);\
if (dbmp->di_dbm == 0) closed_dbm();\ if (dbmp->di_dbm == 0) closed_dbm();\
} } while (0)
This sort of complicated macro does the retrieving and close checking for This sort of complicated macro does the retrieving and close checking for
the DBM. the DBM.

View file

@ -763,10 +763,10 @@ dbm.cではData_Make_Structを以下のように使っています
Dataオブジェクトからdbmstruct構造体のポインタを取り出すため Dataオブジェクトからdbmstruct構造体のポインタを取り出すため
に以下のマクロを使っています. に以下のマクロを使っています.
#define GetDBM(obj, dbmp) {\ #define GetDBM(obj, dbmp) do {\
Data_Get_Struct(obj, struct dbmdata, dbmp);\ Data_Get_Struct(obj, struct dbmdata, dbmp);\
if (dbmp->di_dbm == 0) closed_dbm();\ if (dbmp->di_dbm == 0) closed_dbm();\
} } while (0)
ちょっと複雑なマクロですが要するにdbmdata構造体のポインタ ちょっと複雑なマクロですが要するにdbmdata構造体のポインタ
の取り出しとcloseされているかどうかのチェックをまとめてい の取り出しとcloseされているかどうかのチェックをまとめてい

View file

@ -45,16 +45,16 @@ closed_dbm(void)
rb_raise(rb_eDBMError, "closed DBM file"); rb_raise(rb_eDBMError, "closed DBM file");
} }
#define GetDBM(obj, dbmp) {\ #define GetDBM(obj, dbmp) do {\
Data_Get_Struct((obj), struct dbmdata, (dbmp));\ Data_Get_Struct((obj), struct dbmdata, (dbmp));\
if ((dbmp) == 0) closed_dbm();\ if ((dbmp) == 0) closed_dbm();\
if ((dbmp)->di_dbm == 0) closed_dbm();\ if ((dbmp)->di_dbm == 0) closed_dbm();\
} } while (0)
#define GetDBM2(obj, data, dbm) {\ #define GetDBM2(obj, data, dbm) do {\
GetDBM((obj), (data));\ GetDBM((obj), (data));\
(dbm) = dbmp->di_dbm;\ (dbm) = dbmp->di_dbm;\
} } while (0)
static void static void
free_dbm(struct dbmdata *dbmp) free_dbm(struct dbmdata *dbmp)

View file

@ -106,10 +106,10 @@ closed_dbm(void)
if ((dbmp)->di_dbm == 0) closed_dbm();\ if ((dbmp)->di_dbm == 0) closed_dbm();\
} while (0) } while (0)
#define GetDBM2(obj, data, dbm) {\ #define GetDBM2(obj, data, dbm) do {\
GetDBM((obj), (data));\ GetDBM((obj), (data));\
(dbm) = dbmp->di_dbm;\ (dbm) = dbmp->di_dbm;\
} } while (0)
static void static void
free_dbm(struct dbmdata *dbmp) free_dbm(struct dbmdata *dbmp)

View file

@ -77,16 +77,16 @@ closed_sdbm()
rb_raise(rb_eDBMError, "closed SDBM file"); rb_raise(rb_eDBMError, "closed SDBM file");
} }
#define GetDBM(obj, dbmp) {\ #define GetDBM(obj, dbmp) do {\
Data_Get_Struct((obj), struct dbmdata, (dbmp));\ Data_Get_Struct((obj), struct dbmdata, (dbmp));\
if ((dbmp) == 0) closed_sdbm();\ if ((dbmp) == 0) closed_sdbm();\
if ((dbmp)->di_dbm == 0) closed_sdbm();\ if ((dbmp)->di_dbm == 0) closed_sdbm();\
} } while (0)
#define GetDBM2(obj, data, dbm) {\ #define GetDBM2(obj, data, dbm) do {\
GetDBM((obj), (data));\ GetDBM((obj), (data));\
(dbm) = dbmp->di_dbm;\ (dbm) = dbmp->di_dbm;\
} } while (0)
static void static void
free_sdbm(struct dbmdata *dbmp) free_sdbm(struct dbmdata *dbmp)