rn vs. Sys V questions
Greg A. Woods
woods at eci386.uucp
Tue Feb 27 06:24:05 AEST 1990
In article <665 at smcnet.UUCP> neal at smcnet.UUCP (Neal S. Pollack) writes:
> I am trying to install rn on an AT&T 3B2/600 with SYS V rel 3.2
> software. Thanks to help from the net, I was able to get it to
> compile. However, it does not work.
I guess the help you got from the net was wrong. SysVr3+ has standard
directory routines (i.e. IEEE 1003.1 versions). DON'T use the
ndir.[ch] that comes with rn. It may break on RFS or NFS, and
probably on other strange filesystems (i.e. BSD :-) that some vendors
ship with their SysV's (remember SysV doesn't necessarily always have
UFS type filesystems).
Here's what's necessary for rn patchlevel 40 and up. I imagine this
will work on your P39 version too. (Yes, you should use <dirent.h>,
and let Configure use the opendir it finds in libc.a. This will work
for any SysVr3+, or if you use Gwyn's libdirent.a. You should always
use <dirent.h> where available, and make the necessary adaptations to
the code to conform to the IEEE1003.1 interface!)
Index: ngdata.c
*** Standard Input Wed Dec 31 19:00:00 1969
--- ngdata.c Wed Jun 14 19:16:31 1989
***************
*** 8,14 ****
#include "EXTERN.h"
#include "common.h"
! #include "ndir.h"
#include "rcstuff.h"
#include "rn.h"
#include "intrp.h"
--- 8,14 ----
#include "EXTERN.h"
#include "common.h"
! #include <dirent.h>
#include "rcstuff.h"
#include "rn.h"
#include "intrp.h"
***************
*** 185,191 ****
ART_NUM floor;
{
register DIR *dirp;
! register struct direct *dp;
register ART_NUM min = 1000000;
register ART_NUM maybe;
register char *p;
--- 185,191 ----
ART_NUM floor;
{
register DIR *dirp;
! register struct dirent *dp;
register ART_NUM min = 1000000;
register ART_NUM maybe;
register char *p;
***************
*** 194,200 ****
dirp = opendir(dirname);
if (!dirp)
return 0;
! while ((dp = readdir(dirp)) != Null(struct direct *)) {
if ((maybe = atol(dp->d_name)) < min && maybe > floor) {
for (p = dp->d_name; *p; p++)
if (!isdigit(*p))
--- 194,200 ----
dirp = opendir(dirname);
if (!dirp)
return 0;
! while ((dp = readdir(dirp)) != Null(struct dirent *)) {
if ((maybe = atol(dp->d_name)) < min && maybe > floor) {
for (p = dp->d_name; *p; p++)
if (!isdigit(*p))
There's also a problem with sprintf(), even in P44. I didn't bother
to #ifdef it, so don't give the patched source back to a BSD site!
Index: common.h
*** Standard Input Wed Dec 31 19:00:00 1969
--- common.h Mon Nov 14 21:31:20 1988
***************
*** 670,676 ****
char *getenv();
char *strcat();
char *strcpy();
! char *sprintf();
EXT char buf[LBUFLEN+1]; /* general purpose line buffer */
EXT char cmd_buf[CBUFLEN]; /* buffer for formatting system commands */
--- 670,676 ----
char *getenv();
char *strcat();
char *strcpy();
! int sprintf();
EXT char buf[LBUFLEN+1]; /* general purpose line buffer */
EXT char cmd_buf[CBUFLEN]; /* buffer for formatting system commands */
--
Greg A. Woods
woods@{eci386,gate,robohack,ontmoh,tmsoft,gpu.utcs.UToronto.CA,utorgpu.BITNET}
+1-416-443-1734 [h] +1-416-595-5425 [w] VE3-TCP Toronto, Ontario CANADA
More information about the Comp.sys.att
mailing list