GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* David MacKenzie <djm@gnu.ai.mit.edu>.
Some algorithms adapted from GNU Emacs. */
#endif
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
-# define ISASCII(c) 1
+# define IN_CTYPE_DOMAIN(c) 1
#else
-# define ISASCII(c) isascii(c)
+# define IN_CTYPE_DOMAIN(c) isascii(c)
#endif
-#define ISDIGIT(c) (ISASCII ((unsigned char) (c)) \
- && isdigit ((unsigned char) (c)))
+#define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
+
+/* ISDIGIT differs from ISDIGIT_LOCALE, as follows:
+ - Its arg may be any int or unsigned int; it need not be an unsigned char.
+ - It's guaranteed to evaluate its argument exactly once.
+ - It's typically faster.
+ Posix 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that
+ only '0' through '9' are digits. Prefer ISDIGIT to ISDIGIT_LOCALE unless
+ it's important to use the locale's definition of `digit' even when the
+ host does not conform to Posix. */
+#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
#if defined (HAVE_UNISTD_H)
#include <unistd.h>
char *
find_backup_file_name (file)
- char *file;
+ const char *file;
{
char *dir;
char *base_versions;
static int
max_backup_version (file, dir)
- char *file, *dir;
+ const char *file;
+ const char *dir;
{
DIR *dirp;
struct dirent *dp;
int highest_version;
int this_version;
- int file_name_length;
+ size_t file_name_length;
dirp = opendir (dir);
if (!dirp)
static char *
make_version_name (file, version)
- char *file;
+ const char *file;
int version;
{
char *backup_name;
static int
version_number (base, backup, base_length)
- char *base;
- char *backup;
+ const char *base;
+ const char *backup;
int base_length;
{
int version;
- char *p;
+ const char *p;
version = 0;
if (!strncmp (base, backup, base_length) && ISDIGIT (backup[base_length]))
static char *
concat (str1, str2)
- char *str1, *str2;
+ const char *str1;
+ const char *str2;
{
char *newstr;
int str1_length = strlen (str1);