Subversion Repositories Kolibri OS

Rev

Rev 5141 | Rev 9952 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5141 serge 1
/* stat.c -- Get the status of a file.
2
 *
3
 * Copyright (c) 1995 Cygnus Support
4
 *
5
 * The authors hereby grant permission to use, copy, modify, distribute,
6
 * and license this software and its documentation for any purpose, provided
7
 * that existing copyright notices are retained in all copies and that this
8
 * notice is included verbatim in any distributions. No written agreement,
9
 * license, or royalty fee is required for any of the authorized uses.
10
 * Modifications to this software may be copyrighted by their authors
11
 * and need not follow the licensing terms described here, provided that
12
 * the new terms are clearly indicated on the first page of each file where
13
 * they apply.
14
 */
15
#include 
5215 serge 16
#include 
5141 serge 17
#include 
5215 serge 18
#include 
19
#include 
5141 serge 20
#include "glue.h"
21
 
22
/*
23
 * stat -- Since we have no file system, we just return an error.
24
 */
25
int
26
_DEFUN (stat, (path, buf),
27
       const char *path _AND
28
       struct stat *buf)
29
{
5215 serge 30
 
31
    fileinfo_t info;
32
    struct tm time;
33
 
34
    if( get_fileinfo(path, &info))
35
    {
36
        errno = ENOENT;
37
        return (-1);
38
    };
39
 
40
    memset (buf, 0, sizeof (* buf));
41
 
42
    buf->st_size = info.size;
43
 
44
    if (info.attr & 0x10)
45
        buf->st_mode = S_IFDIR;
46
    else
47
    {
48
        if (info.attr & 0x07)
49
            buf->st_mode = S_IFREG|S_IRUSR|S_IXUSR;
50
        else
51
            buf->st_mode = S_IFREG|S_IRUSR|S_IWUSR|S_IXUSR;
52
    }
53
 
54
    buf->st_blksize = 4096;
55
 
56
    time.tm_sec   = info.atime.sec;
57
    time.tm_min   = info.atime.min;
58
    time.tm_hour  = info.atime.hour;
59
    time.tm_mday  = info.adate.day;
60
    time.tm_mon   = info.adate.month;
61
    time.tm_year  = info.adate.year - 1900;
62
    time.tm_isdst = -1;
63
    buf->st_atime = mktime(&time);
64
 
65
    time.tm_sec   = info.ctime.sec;
66
    time.tm_min   = info.ctime.min;
67
    time.tm_hour  = info.ctime.hour;
68
    time.tm_mday  = info.cdate.day;
69
    time.tm_mon   = info.cdate.month;
70
    time.tm_year  = info.cdate.year - 1900;
71
    time.tm_isdst = -1;
72
    buf->st_ctime = mktime(&time);
73
 
74
    time.tm_sec   = info.mtime.sec;
75
    time.tm_min   = info.mtime.min;
76
    time.tm_hour  = info.mtime.hour;
77
    time.tm_mday  = info.mdate.day;
78
    time.tm_mon   = info.mdate.month;
79
    time.tm_year  = info.mdate.year - 1900;
80
    time.tm_isdst = -1;
81
    buf->st_mtime = mktime(&time);
82
 
83
    return (0);
5141 serge 84
}
85
 
5215 serge 86
 
87
int
88
_DEFUN (lstat, (path, buf),
89
       const char *path _AND
90
       struct stat *buf)
91
{
92
    return stat(path, buf);
93
}
94