X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=README;h=ea528bd9b54f0a5e834ce4d842e306bf21d1ed4a;hb=9bb48fb977629b0184a12b081ba716b8185136d2;hp=1cd8bc29e7392ea9d9a1e9ddd138e817a65ef918;hpb=1af4668473eb45ef1963d8c2d197994e693069ed;p=gnulib.git diff --git a/README b/README index 1cd8bc29e..ea528bd9b 100644 --- a/README +++ b/README @@ -63,15 +63,13 @@ Other things: systems that have the function. * Autoconf functions can use gl_* prefix. The AC_* prefix is for autoconf internal functions. -* Try to prevent that the files are built if they aren't needed on a - platform. Valid excuses to this rule include ELIDE constructs that - lead to an empty .o file (see getopt module). -* If you have a .c file that leads to an empty .o file on some platforms - (through some big #if around all the code), still make sure that after - preprocessing the compilation unit is not empty. This is usually fulfilled - if you #include or #include before the big #if; - otherwise you need to add a #else branch containing "typedef int dummy;" - or "extern int dummy;". +* Build files only if they are needed on a platform. Look at the + alloca and fnmatch modules for how to achieve this. If for some + reason you cannot do this, and you have a .c file that leads to an + empty .o file on some platforms (through some big #if around all the + code), then ensure that the compilation unit is not empty after + preprocessing. One way to do this is to #include or + before the big #if. Portability guidelines ---------------------- @@ -132,9 +130,17 @@ as well. GNULib code makes the following additional assumptions: for all practical hosts with flat address spaces, but it is not always true for hosts with segmented address spaces. + * If an existing object has size S, and if T is sufficiently small + (e.g., 8 KiB), then S + T cannot overflow. Overflow in this case + would mean that the rest of your program fits into T bytes, which + can't happen in realistic flat-address-space hosts. + * Objects with all bits zero are treated as 0 or NULL. For example, memset (A, 0, sizeof A) initializes an array A of pointers to NULL. + * Adding zero to a null pointer does not change the pointer. + For example, 0 + (char *) NULL == (char *) NULL. + The above assumptions are not required by the C or POSIX standards but hold on all practical porting targets that we're familiar with. If you have a porting target where these assumptions are not true, we'd