annotate lib/addext.c @ 2427:28f8722c956c

*** empty log message ***
author Jim Meyering <jim@meyering.net>
date Sat, 15 Apr 2000 21:58:37 +0000 (2000-04-15)
parents e261f505e459
children 5994c6f939c5
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
1651
e261f505e459 (base_name): Declare.
Jim Meyering <jim@meyering.net>
parents: 1586
diff changeset
2 Copyright (C) 1990, 1997, 1998, 1999 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
1651
e261f505e459 (base_name): Declare.
Jim Meyering <jim@meyering.net>
parents: 1586
diff changeset
52 char *base_name PARAMS ((char const *));
e261f505e459 (base_name): Declare.
Jim Meyering <jim@meyering.net>
parents: 1586
diff changeset
53
923
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
54 /* 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
55 in which case just append the character E. */
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
56
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
57 void
1586
63729b525d73 (addext): Protoize.
Jim Meyering <jim@meyering.net>
parents: 923
diff changeset
58 addext (char *filename, char const *ext, int e)
923
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
59 {
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
60 char *s = base_name (filename);
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
61 size_t slen = strlen (s), extlen = strlen (ext);
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
62 long slen_max = -1;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
63
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
64 #if HAVE_PATHCONF && defined _PC_NAME_MAX
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
65 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
66 /* 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
67 slen_max = _POSIX_NAME_MAX;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
68 else if (s == filename)
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
69 slen_max = pathconf (".", _PC_NAME_MAX);
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
70 else
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
71 {
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
72 char c = *s;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
73 *s = 0;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
74 slen_max = pathconf (filename, _PC_NAME_MAX);
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
75 *s = c;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
76 }
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
77 #endif
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
78 if (slen_max < 0)
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
79 slen_max = HAVE_LONG_FILE_NAMES ? 255 : 14;
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 if (HAVE_DOS_FILE_NAMES && slen_max <= 12)
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
82 {
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
83 /* Live within DOS's 8.3 limit. */
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
84 char *dot = strchr (s, '.');
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
85 if (dot)
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
86 {
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
87 slen -= dot + 1 - s;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
88 s = dot + 1;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
89 slen_max = 3;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
90 }
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
91 else
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
92 slen_max = 8;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
93 extlen = 9; /* Don't use EXT. */
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
94 }
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
95
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
96 if (slen + extlen <= slen_max)
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
97 strcpy (s + slen, ext);
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
98 else
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
99 {
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
100 if (slen_max <= slen)
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
101 slen = slen_max - 1;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
102 s[slen] = e;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
103 s[slen + 1] = 0;
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
104 }
8f0105914436 Update from patch-2.2.93.
Jim Meyering <jim@meyering.net>
parents:
diff changeset
105 }