+2.5 -> 2.5.1:
+ - fail if sources are not regular files
+
2.4.109 -> 2.5:
- fixed return code bug in build code
- do macro expansion before %if processing
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
+#include <sys/stat.h>
#include "header.h"
#include "rpmlib.h"
#include "read.h"
#include "misc.h"
+static int checkSources(Spec spec);
static void setStandardMacros(Spec spec, char *arch, char *os);
int parseSpec(Spec *specp, char *specFile, char *buildRoot,
closeSpec(spec);
*specp = spec;
+
+ if (checkSources(spec)) {
+ freeSpec(spec);
+ return 1;
+ }
+
return 0;
}
+static int checkSources(Spec spec)
+{
+ struct Source *p;
+ Package pkg;
+ char buf[BUFSIZ];
+ struct stat sb;
+ int res = 0;
+
+ p = spec->sources;
+ while (p) {
+ sprintf(buf, "%s/%s", rpmGetVar(RPMVAR_SOURCEDIR), p->source);
+ lstat(buf, &sb);
+ if (! S_ISREG(sb.st_mode)) {
+ rpmError(RPMERR_BADSPEC, "Source file not regular: %s", buf);
+ res = 1;
+ }
+ p = p->next;
+ }
+
+ pkg = spec->packages;
+ while (pkg) {
+ p = pkg->icon;
+ while (p) {
+ sprintf(buf, "%s/%s", rpmGetVar(RPMVAR_SOURCEDIR), p->source);
+ lstat(buf, &sb);
+ if (! S_ISREG(sb.st_mode)) {
+ rpmError(RPMERR_BADSPEC, "Source file not regular: %s", buf);
+ res = 1;
+ }
+ p = p->next;
+ }
+ pkg = pkg->next;
+ }
+
+ return res;
+}
+
static void setStandardMacros(Spec spec, char *arch, char *os)
{
char buf[BUFSIZ];