// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
*/
#include <sys/mman.h>
#include <sys/stat.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include "lkc.h"
/* return true if 'path' exists, false otherwise */
static bool is_present(const char *path)
{
struct stat st;
return !stat(path, &st);
}
/* return true if 'path' exists and it is a directory, false otherwise */
static bool is_dir(const char *path)
{
struct stat st;
if (stat(path, &st))
return 0;
return S_ISDIR(st.st_mode);
}
/* return true if the given two files are the same, false otherwise */
static bool is_same(const char *file1, const char *file2)
{
int fd1, fd2;
struct stat st1, st2;
void *map1, *map2;
bool ret = false;
fd1 = open(file1, O_RDONLY);
if (fd1 < 0)
return ret;
fd2 = open(file2, O_RDONLY);
if (fd2 < 0)
goto close1;
ret = fstat(fd1, &st1);
if (ret)
goto close2;
ret = fstat(fd2, &st2);
if (ret)
goto close2;
if (st1.st_size != st2.st_size)
goto close2;
map1 = mmap(NULL, st1.st_size, PROT_READ, MAP_PRIVATE, fd1, 0);
if (map1<