Thread
-
Re: [HACKERS] acl problem in NetBSD/m68k
Tom Lane <tgl@sss.pgh.pa.us> — 1999-06-29T04:46:03Z
Tatsuo Ishii <t-ishii@sra.co.jp> writes: >> I do not like this patch at *all*. Why is sizeof(AclItem) not the >> correct thing to use? > In NetBSD/m68k sizeof(AclItem) = 6, not 8. Oh, I see: the struct contains int32, uint8, uint8, and so it will be padded to a multiple of int32's alignment requirement --- which is 4 most places but only 2 on m68k. >> Perhaps the real problem is that the AclItem struct definition needs >> modification? Or maybe we need a way to put a machine-dependent size >> into the pg_type entry for type aclitem? The latter seems like a >> good thing to be able to do on general principles. > > Glad to hear you have better idea. Anyway, NetBSD/m68k users need some > way to fix the problem now, since the problem seems very serious. There are two ways we could attack this: (1) put a "pad" field into struct AclItem (prolly two uint8s) to try to ensure that compilers would think it is 8 bytes long, or (2) make the size field for aclitem in pg_type.h read "sizeof(AclItem)". I think the latter is a better long-term solution, because it eliminates having to try to guess what a compiler will do with a struct declaration. But there are several possible counterarguments: * It might require patching the scripts that read pg_type.h --- I am not sure if they'd work unmodified. * We'd either need to #include acl.h into pg_type.h or push the declarations for AclItem into some more-widely-used header. * In theory this would represent an initdb change and couldn't be applied before 6.6. In practice, Postgres isn't working right now on any platform where sizeof(AclItem) != 8, so initdb would *not* be needed for any working installation. I don't think any of these counterarguments is a big deal, but maybe someone else will have a different opinion. regards, tom lane
-
Re: [HACKERS] acl problem in NetBSD/m68k
Bruce Momjian <maillist@candle.pha.pa.us> — 1999-06-29T05:07:33Z
> There are two ways we could attack this: (1) put a "pad" field into > struct AclItem (prolly two uint8s) to try to ensure that compilers > would think it is 8 bytes long, or (2) make the size field for aclitem > in pg_type.h read "sizeof(AclItem)". I think the latter is a better > long-term solution, because it eliminates having to try to guess > what a compiler will do with a struct declaration. But there are > several possible counterarguments: > > * It might require patching the scripts that read pg_type.h --- I > am not sure if they'd work unmodified. > > * We'd either need to #include acl.h into pg_type.h or push the > declarations for AclItem into some more-widely-used header. > > * In theory this would represent an initdb change and couldn't > be applied before 6.6. In practice, Postgres isn't working right > now on any platform where sizeof(AclItem) != 8, so initdb would > *not* be needed for any working installation. > > I don't think any of these counterarguments is a big deal, but > maybe someone else will have a different opinion. My guess is that we are looking at different solutions for 6.5.1 and 6.6. A good argument for a source tree split. Currently, initdb runs through pg_type.h using sed/awk, so it can't see any of the sizeof() defines. One hokey solution would be to have the compile process run a small C program that dumps out the acl size into a file, and have initdb pick up that. That is a terrible solution, though. I guess we don't have any other 'struct' data types that need to know the size of the struct on a give OS. Maybe padding with an Assert() to make sure it stays at the fixed size we specify is a good solution. -- Bruce Momjian | http://www.op.net/~candle maillist@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
-
Re: [HACKERS] acl problem in NetBSD/m68k
Brian E Gallew <geek+@cmu.edu> — 1999-06-29T14:52:34Z
Then <maillist@candle.pha.pa.us> spoke up and said: > > There are two ways we could attack this: (1) put a "pad" field into > > struct AclItem (prolly two uint8s) to try to ensure that compilers > > would think it is 8 bytes long, or (2) make the size field for aclitem > > in pg_type.h read "sizeof(AclItem)". I think the latter is a better > > long-term solution, because it eliminates having to try to guess > > what a compiler will do with a struct declaration. But there are > > several possible counterarguments: > > Currently, initdb runs through pg_type.h using sed/awk, so it can't > see any of the sizeof() defines. One hokey solution would be to have > the compile process run a small C program that dumps out the acl size > into a file, and have initdb pick up that. That is a terrible solution, > though. I guess we don't have any other 'struct' data types that need > to know the size of the struct on a give OS. Maybe padding with an > Assert() to make sure it stays at the fixed size we specify is a good > solution. Perhaps it would be easier to pipe the output of cpp on pg_type.h thru the awk/sed script? This would have the added advantage of making other system-dependent changes to pg_type.h easier. -- ===================================================================== | JAVA must have been developed in the wilds of West Virginia. | | After all, why else would it support only single inheritance?? | ===================================================================== | Finger geek@cmu.edu for my public key. | =====================================================================