Use copy_file from utilty.c, remove some char defines

This commit is contained in:
Glenn L McGrath 2001-02-10 14:53:08 +00:00
parent 649968ceb1
commit 510f0ddafa
2 changed files with 20 additions and 82 deletions

View File

@ -33,12 +33,13 @@
#endif
#define BUFSIZE 4096
#define DEPENDSMAX 64 /* maximum number of depends we can handle */
#define ADMINDIR "/var/lib/dpkg"
#define STATUSFILE ADMINDIR ## "/status.udeb"
#define DPKGCIDIR ADMINDIR ## "/tmp.ci/"
#define INFODIR ADMINDIR ## "/info/"
#define UDPKG_QUIET "UDPKG_QUIET"
#define DEPENDSMAX 64 /* maximum number of depends we can handle */
static const char infodir[] = "/var/lib/dpkg/info/";
static const char udpkg_quiet[] = "UDPKG_QUIET";
//static const int status_wantstart = 0;
//static const int status_wantunknown = (1 << 0);
@ -379,7 +380,7 @@ static void *status_read(void)
perror(STATUSFILE);
return 0;
}
if (getenv(UDPKG_QUIET) == NULL)
if (getenv(udpkg_quiet) == NULL)
printf("(Reading database...)\n");
while (!feof(f))
{
@ -452,7 +453,7 @@ static int status_merge(void *status, package_t *pkgs)
perror(STATUSFILE ".new");
return 0;
}
if (getenv(UDPKG_QUIET) == NULL)
if (getenv(udpkg_quiet) == NULL)
printf("(Updating database...)\n");
while (fgets(buf, BUFSIZE, fin) && !feof(fin))
{
@ -535,38 +536,6 @@ static int is_file(const char *fn)
return S_ISREG(statbuf.st_mode);
}
static int dpkg_copyfile(const char *src, const char *dest)
{
/* copy a (regular) file if it exists, preserving the mode, mtime
* and atime */
char buf[8192];
int infd, outfd;
int r;
struct stat srcStat;
struct utimbuf times;
if (stat(src, &srcStat) < 0)
{
if (errno == 2) return 0; else return -1;
}
if ((infd = open(src, O_RDONLY)) < 0)
return -1;
if ((outfd = open(dest, O_WRONLY|O_CREAT|O_TRUNC, srcStat.st_mode)) < 0)
return -1;
while ((r = read(infd, buf, sizeof(buf))) > 0)
{
if (write(outfd, buf, r) < 0)
return -1;
}
close(outfd);
close(infd);
if (r < 0) return -1;
times.actime = srcStat.st_atime;
times.modtime = srcStat.st_mtime;
if (utime(dest, &times) < 0) return -1;
return 1;
}
static int dpkg_doconfigure(package_t *pkg)
{
int r;
@ -574,7 +543,7 @@ static int dpkg_doconfigure(package_t *pkg)
char buf[1024];
DPRINTF("Configuring %s\n", pkg->package);
pkg->status &= status_statusmask;
snprintf(postinst, sizeof(postinst), "%s%s.postinst", INFODIR, pkg->package);
snprintf(postinst, sizeof(postinst), "%s%s.postinst", infodir, pkg->package);
if (is_file(postinst))
{
snprintf(buf, sizeof(buf), "%s configure", postinst);
@ -616,8 +585,8 @@ static int dpkg_dounpack(package_t *pkg)
snprintf(buf, sizeof(buf), "%s%s/%s",
DPKGCIDIR, pkg->package, adminscripts[i]);
snprintf(buf2, sizeof(buf), "%s%s.%s",
INFODIR, pkg->package, adminscripts[i]);
if (dpkg_copyfile(buf, buf2) < 0)
infodir, pkg->package, adminscripts[i]);
if (copy_file(buf, buf2, TRUE, FALSE, FALSE) < 0)
{
fprintf(stderr, "Cannot copy %s to %s: %s\n",
buf, buf2, strerror(errno));
@ -636,7 +605,7 @@ static int dpkg_dounpack(package_t *pkg)
"ar -p %s data.tar.gz|zcat|tar -tf -",
pkg->file);
snprintf(buf2, sizeof(buf2),
"%s%s.list", INFODIR, pkg->package);
"%s%s.list", infodir, pkg->package);
if ((infp = popen(buf, "r")) == NULL ||
(outfp = fopen(buf2, "w")) == NULL)
{

51
dpkg.c
View File

@ -33,12 +33,13 @@
#endif
#define BUFSIZE 4096
#define DEPENDSMAX 64 /* maximum number of depends we can handle */
#define ADMINDIR "/var/lib/dpkg"
#define STATUSFILE ADMINDIR ## "/status.udeb"
#define DPKGCIDIR ADMINDIR ## "/tmp.ci/"
#define INFODIR ADMINDIR ## "/info/"
#define UDPKG_QUIET "UDPKG_QUIET"
#define DEPENDSMAX 64 /* maximum number of depends we can handle */
static const char infodir[] = "/var/lib/dpkg/info/";
static const char udpkg_quiet[] = "UDPKG_QUIET";
//static const int status_wantstart = 0;
//static const int status_wantunknown = (1 << 0);
@ -379,7 +380,7 @@ static void *status_read(void)
perror(STATUSFILE);
return 0;
}
if (getenv(UDPKG_QUIET) == NULL)
if (getenv(udpkg_quiet) == NULL)
printf("(Reading database...)\n");
while (!feof(f))
{
@ -452,7 +453,7 @@ static int status_merge(void *status, package_t *pkgs)
perror(STATUSFILE ".new");
return 0;
}
if (getenv(UDPKG_QUIET) == NULL)
if (getenv(udpkg_quiet) == NULL)
printf("(Updating database...)\n");
while (fgets(buf, BUFSIZE, fin) && !feof(fin))
{
@ -535,38 +536,6 @@ static int is_file(const char *fn)
return S_ISREG(statbuf.st_mode);
}
static int dpkg_copyfile(const char *src, const char *dest)
{
/* copy a (regular) file if it exists, preserving the mode, mtime
* and atime */
char buf[8192];
int infd, outfd;
int r;
struct stat srcStat;
struct utimbuf times;
if (stat(src, &srcStat) < 0)
{
if (errno == 2) return 0; else return -1;
}
if ((infd = open(src, O_RDONLY)) < 0)
return -1;
if ((outfd = open(dest, O_WRONLY|O_CREAT|O_TRUNC, srcStat.st_mode)) < 0)
return -1;
while ((r = read(infd, buf, sizeof(buf))) > 0)
{
if (write(outfd, buf, r) < 0)
return -1;
}
close(outfd);
close(infd);
if (r < 0) return -1;
times.actime = srcStat.st_atime;
times.modtime = srcStat.st_mtime;
if (utime(dest, &times) < 0) return -1;
return 1;
}
static int dpkg_doconfigure(package_t *pkg)
{
int r;
@ -574,7 +543,7 @@ static int dpkg_doconfigure(package_t *pkg)
char buf[1024];
DPRINTF("Configuring %s\n", pkg->package);
pkg->status &= status_statusmask;
snprintf(postinst, sizeof(postinst), "%s%s.postinst", INFODIR, pkg->package);
snprintf(postinst, sizeof(postinst), "%s%s.postinst", infodir, pkg->package);
if (is_file(postinst))
{
snprintf(buf, sizeof(buf), "%s configure", postinst);
@ -616,8 +585,8 @@ static int dpkg_dounpack(package_t *pkg)
snprintf(buf, sizeof(buf), "%s%s/%s",
DPKGCIDIR, pkg->package, adminscripts[i]);
snprintf(buf2, sizeof(buf), "%s%s.%s",
INFODIR, pkg->package, adminscripts[i]);
if (dpkg_copyfile(buf, buf2) < 0)
infodir, pkg->package, adminscripts[i]);
if (copy_file(buf, buf2, TRUE, FALSE, FALSE) < 0)
{
fprintf(stderr, "Cannot copy %s to %s: %s\n",
buf, buf2, strerror(errno));
@ -636,7 +605,7 @@ static int dpkg_dounpack(package_t *pkg)
"ar -p %s data.tar.gz|zcat|tar -tf -",
pkg->file);
snprintf(buf2, sizeof(buf2),
"%s%s.list", INFODIR, pkg->package);
"%s%s.list", infodir, pkg->package);
if ((infp = popen(buf, "r")) == NULL ||
(outfp = fopen(buf2, "w")) == NULL)
{