Π‘ ΠΏΠΎΠΌΠΎΡΡΡ
lseek
ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΊΠ°ΠΊ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½ΠΈΠΌ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π΅Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΈΡΠ°Π΅Ρ Π»ΡΠ±ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π±Π°ΠΉΡΠΎΠ² ΠΈΠ· Π»ΡΠ±ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Π² ΡΠ°ΠΉΠ»Π΅:
get(fd, pos, buf, n) /* read n bytes from position pos */
Β int fd, n;
Β long pos;
Β char *buf;
{
Β if (lseek(fd, pos, 0) == -1) /* get to pos */
Β return -1;
Β return read(fd, buf, n);
}
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.3
ΠΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠΉΡΠ΅
readslow
ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ. ΠΠΎΠ±Π°Π²ΡΡΠ΅
-Π΅
:
$ readslow -Π΅
Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ
readslow
ΠΈΡΠΊΠ°ΡΡ ΠΊΠΎΠ½Π΅Ρ Π²Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π½Π°ΡΠ°ΡΡ ΡΡΠ΅Π½ΠΈΠ΅. ΠΠ°ΠΊΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΈ
lseek
ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΌ ΠΊΠ°Π½Π°Π»ΠΎΠΌ?
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.4
ΠΠ΅ΡΠ΅ΠΏΠΈΡΠΈΡΠ΅
efopen
ΠΈΠ· Π³Π». 6, ΡΡΠΎΠ±Ρ Π²ΡΠ·Π²Π°ΡΡ error.
7.2 Π€Π°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°: ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ
ΠΠ°ΡΠ° ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΠ΅ΠΌΠ° β ΠΊΠ°ΠΊ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ². ΠΡΠΈ ΡΡΠΎΠΌ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ Π½ΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ, Π° Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΡΡΡ
Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ
spname
, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ Π½Π΅Π²Π΅ΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ². Π€ΡΠ½ΠΊΡΠΈΡ
n = spname(name, newname);
ΠΈΡΠ΅Ρ ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ, "Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±Π»ΠΈΠ·ΠΊΠΈΠΌ" ΠΊ name. ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ΅ ΠΈΠΌΡ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, ΠΎΠ½ΠΎ ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π²
newname
. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ n, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅
spname
, ΡΠ°Π²Π½ΠΎ -1, Π΅ΡΠ»ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±Π»ΠΈΠ·ΠΊΠΎΠ³ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, 0 β ΠΏΡΠΈ ΡΠΎΡΠ½ΠΎΠΌ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΠΈ 1, Π΅ΡΠ»ΠΈ Π±ΡΠ»Π° ΡΠ΄Π΅Π»Π°Π½Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡ.
Spname
ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠΌ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ p: Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΡΠ°ΠΉΠ», Π½ΠΎ Π½Π΅Π²Π΅ΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΠΈΠΌΡ,
p
ΡΠΏΡΠΎΡΠΈΡ Π²Π°Ρ, Π½Π΅ ΠΈΠΌΠ΅Π»ΠΈ Π»ΠΈ Π²Ρ Π² Π²ΠΈΠ΄Ρ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠ΅:
$ p /urs/srx/ccmd/p/spnam.ΡΒ
ΠΡΠ΅Π½Ρ ΠΏΠ»ΠΎΡ
ΠΎΠ΅ ΠΈΠΌΡ
"/usr/src/cmd/p/spname.Ρ"? y
ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΡΡΠ°
/* spname: Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²Π΅ΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° */
...
ΠΠΎΠΊΠ° ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°,
spname
ΠΏΡΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ Π΅Π³ΠΎ ΡΠΎΡΡΠ°Π²Π½ΡΡ ΡΠ°ΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π²ΡΠ°Ρ Π±ΡΠΊΠ²Π° Π±ΡΠ»Π° ΠΎΠΏΡΡΠ΅Π½Π°, ΠΎΠΊΠ°Π·Π°Π»Π°ΡΡ Π»ΠΈΡΠ½Π΅ΠΉ, ΠΏΡΠΎΡΡΠΎ Π½Π΅Π²Π΅ΡΠ½Π° ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΠ»Π°ΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Ρ Π΄ΡΡΠ³ΠΎΠΉ Π±ΡΠΊΠ²ΠΎΠΉ. ΠΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΡΠ°ΡΡΡΠΈΡΠ°Π½ΠΎ Π½Π° ΡΠΎΠ³ΠΎ, ΠΊΡΠΎ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ ΠΎΡΠ΅Π½Ρ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΌΠ΅ΡΡΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ°ΠΉΠ», ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Ρ. ΠΠ΅ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ Π² ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ². Π Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ°ΠΉΠ»Π΅, ΠΊΡΠΎΠΌΠ΅ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ. Π‘ΡΡΠΎΠΊΠ° ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² β ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΠ°ΠΉΠ»Π° ΠΈ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ. Π’ΠΎΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅
<sys/dir.h>
:
$ cat /usr/include/sys/dir.h
#define DIRSIZ 14 /* ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° */
struct direct /* ΡΡΡΡΠΊΡΡΡΠ° ΡΡΡΠΎΠΊΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° */
{
Β ino_t d_ino; /* Π½ΠΎΠΌΠ΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° */
Β char d_name[DIRSIZ]; /* ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° */
};
$
"Π’ΠΈΠΏ"
ino_t
ΡΡΠΎ
typedef
, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅. ΠΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΡΠΎΡΠΊΠΈΠΌ ΡΠ΅Π»ΡΠΌ Π±Π΅Π· Π·Π½Π°ΠΊΠ° (
unsigned short
) Π² Π²Π΅ΡΡΠΈΡΡ
ΡΠΈΡΡΠ΅ΠΌΡ Π΄Π»Ρ PDP-11 ΠΈ VAX ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ½ΡΠΌ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ°
typedef
. ΠΠΎΠ»Π½ΡΠΉ Π½Π°Π±ΠΎΡ "ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
" ΡΠΈΠΏΠΎΠ² Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π²
<sys/types.h>
, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½ Π΄ΠΎ
<sys/dir.h>
.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ
spname
Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΡΠΌΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½Ρ, Ρ
ΠΎΡΡ ΠΈ ΡΡΠ΅Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π³ΡΠ°Π½ΠΈΡΠ½ΡΡ
ΡΡΠ»ΠΎΠ²ΠΈΠΉ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°
/d1/d2/f
. ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ΄Π΅Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ: ΠΎΡΠ΄Π΅Π»ΠΈΡΡ ΠΏΠ΅ΡΠ²ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ (
/
), Π½Π°ΠΉΡΠΈ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΠΈΠΌΡ, Π±Π»ΠΈΠ·ΠΊΠΎΠ΅ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ (
d1
), Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΉΡΠΈ ΠΈΠΌΡ, Π±Π»ΠΈΠ·ΠΊΠΎΠ΅ ΠΊ
d2
, ΠΈ Ρ.Π΄. Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ. ΠΡΠ»ΠΈ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΡΠ°Π΄ΠΈΠΈ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Π½Π΅ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠ°, ΠΏΠΎΠΈΡΠΊ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡΡ.
ΠΡ ΡΠ°Π·Π±ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π° ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. Π‘Π°ΠΌΠ°
spname
Π²ΡΠ΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΡΡΠΈ ΠΈ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· Π½ΠΈΡ
ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠ΅Π΅ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ. Π€ΡΠ½ΠΊΡΠΈΡ
mindist
ΠΈΡΠ΅Ρ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠΌ ΠΊ ΡΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΌΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ
spname
. Π€ΡΠ½ΠΊΡΠΈΡ
spdist
Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ "ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅" ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ.
/* spname: return correctly spelled filename */
/*
Β * spname(oldname, newname) char *oldname, *newname;
Β * returns -1 if no reasonable match to oldname,
Β * 0 if exact match,
Β *1 if corrected.
Β * stores corrected name in newname.
Β */
#include <sys/types.h>
#include <sys/dir.h>
spname(oldname, newname)
Β char *oldname, *newname;
{
Β char *p, guess[DIRSIZ+1], best[DIRSIZ+1];
Β char *new = newname, *old = oldname;
Β for (;;) {
Β while (*old == '/') /* skip slashes */
Β Β *new++ = *old++;
Β *new = '\0';
Β if (*old == '\0') /* exact or corrected */
Β Β return strcmp(oldname, newname) != 0;