annotate lib/addext.c @ 1586:63729b525d73

(addext): Protoize. Indent cpp directives to match nesting.
author Jim Meyering <jim@meyering.net>
date Thu, 31 Dec 1998 14:56:20 +0000
parents 8f0105914436
children e261f505e459
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
923
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
1 /* addext.c -- add an extension to a file name
1586
63729b525d73 (addext): Protoize.
Jim Meyering <jim@meyering.net>
parents: 923
diff changeset
2 Copyright (C) 1990, 1997, 1998 Free Software Foundation, Inc.
923
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
3
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
6 the Free Software Foundation; either version 2, or (at your option)
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
7 any later version.
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
8
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
12 GNU General Public License for more details.
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
13
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
15 along with this program; see the file COPYING.
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
16 If not, write to the Free Software Foundation,
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
17 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
18
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
19 /* Written by David MacKenzie <djm@gnu.ai.mit.edu> and Paul Eggert */
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
20
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
21 #if HAVE_CONFIG_H
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
22 # include <config.h>
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
23 #endif
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
24
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
25 #ifndef HAVE_DOS_FILE_NAMES
1586
63729b525d73 (addext): Protoize.
Jim Meyering <jim@meyering.net>
parents: 923
diff changeset
26 # define HAVE_DOS_FILE_NAMES 0
923
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
27 #endif
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
28 #ifndef HAVE_LONG_FILE_NAMES
1586
63729b525d73 (addext): Protoize.
Jim Meyering <jim@meyering.net>
parents: 923
diff changeset
29 # define HAVE_LONG_FILE_NAMES 0
923
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
30 #endif
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
31
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
32 #include <backupfile.h>
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
33
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
34 #if HAVE_LIMITS_H
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
35 # include <limits.h>
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
36 #endif
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
37 #ifndef _POSIX_NAME_MAX
1586
63729b525d73 (addext): Protoize.
Jim Meyering <jim@meyering.net>
parents: 923
diff changeset
38 # define _POSIX_NAME_MAX 14
923
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
39 #endif
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
40
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
41 #include <sys/types.h>
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
42 #if HAVE_STRING_H
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
43 # include <string.h>
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
44 #else
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
45 # include <strings.h>
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
46 #endif
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
47
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
48 #if HAVE_UNISTD_H
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
49 # include <unistd.h>
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
50 #endif
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
51
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
52 /* Append to FILENAME the extension EXT, unless the result would be too long,
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
53 in which case just append the character E. */
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
54
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
55 void
1586
63729b525d73 (addext): Protoize.
Jim Meyering <jim@meyering.net>
parents: 923
diff changeset
56 addext (char *filename, char const *ext, int e)
923
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
57 {
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
58 char *s = base_name (filename);
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
59 size_t slen = strlen (s), extlen = strlen (ext);
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
60 long slen_max = -1;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
61
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
62 #if HAVE_PATHCONF && defined _PC_NAME_MAX
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
63 if (slen + extlen <= _POSIX_NAME_MAX && ! HAVE_DOS_FILE_NAMES)
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
64 /* The file name is so short there's no need to call pathconf. */
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
65 slen_max = _POSIX_NAME_MAX;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
66 else if (s == filename)
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
67 slen_max = pathconf (".", _PC_NAME_MAX);
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
68 else
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
69 {
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
70 char c = *s;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
71 *s = 0;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
72 slen_max = pathconf (filename, _PC_NAME_MAX);
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
73 *s = c;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
74 }
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
75 #endif
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
76 if (slen_max < 0)
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
77 slen_max = HAVE_LONG_FILE_NAMES ? 255 : 14;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
78
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
79 if (HAVE_DOS_FILE_NAMES && slen_max <= 12)
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
80 {
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
81 /* Live within DOS's 8.3 limit. */
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
82 char *dot = strchr (s, '.');
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
83 if (dot)
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
84 {
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
85 slen -= dot + 1 - s;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
86 s = dot + 1;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
87 slen_max = 3;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
88 }
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
89 else
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
90 slen_max = 8;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
91 extlen = 9; /* Don't use EXT. */
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
92 }
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
93
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
94 if (slen + extlen <= slen_max)
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
95 strcpy (s + slen, ext);
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
96 else
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
97 {
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
98 if (slen_max <= slen)
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
99 slen = slen_max - 1;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
100 s[slen] = e;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
101 s[slen + 1] = 0;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
102 }
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
103 }