Fixed timestamp to correctly use localtime(), thanks to mphipps. :-)

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5633 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Tyler Dauwalder 2003-12-09 00:45:06 +00:00
parent 933a883015
commit 003d4e83df
2 changed files with 36 additions and 29 deletions

View File

@ -44,6 +44,7 @@ const entity_id Udf::kMetadataPartitionMapId(0, "*UDF Metadata Partition");
const entity_id Udf::kSparablePartitionMapId(0, "*UDF Sparable Partition");
const entity_id Udf::kVirtualPartitionMapId(0, "*UDF Virtual Partition");
const entity_id Udf::kImplementationId(0, "*OpenBeOS UDF", implementation_id_suffix(OS_BEOS, BEOS_OPENBEOS));
const entity_id Udf::kPartitionContentsId(0, "+NSR03");
//! crc 010041 table, as generated by crc_table.cpp
const uint16 Udf::kCrcTable[256] = {
@ -192,6 +193,7 @@ charspec::set_character_set_info(const char *info)
// timestamp
//----------------------------------------------------------------------
#if !USER
static
int
get_month_length(int month, int year)
@ -208,9 +210,29 @@ get_month_length(int month, int year)
return 0;
}
}
#endif
timestamp::timestamp(time_t time)
{
#if USER
// Is it me, or is localtime() broken?
tm *local = localtime(&time);
if (local) {
set_microsecond(0);
set_hundred_microsecond(0);
set_centisecond(0);
set_second(local->tm_sec);
set_minute(local->tm_min);
set_hour(local->tm_hour);
set_day(local->tm_mday);
set_month(local->tm_mon+1);
set_year(local->tm_year+1900);
set_type(1);
set_timezone(local->tm_gmtoff / 60);
} else {
_clear();
}
#else // no localtime() in the R5 kernel...
// real_time_clock() is returning the time offset by -16 hours.
// Considering I'm -8 hours from GMT, this doesn't really make
// sense. For the moment I'm offsetting it manually here, but
@ -250,26 +272,7 @@ timestamp::timestamp(time_t time)
set_year(year+1970);
set_type(1);
set_timezone(-2047); // -2047 == no timezone specified
/*
// Is it me, or is localtime() broken?
tm *local = localtime(&time);
if (local) {
set_microsecond(0);
set_hundred_microsecond(0);
set_centisecond(0);
set_second(local->tm_sec);
set_minute(local->tm_min);
set_hour(local->tm_hour);
set_day(local->tm_mday);
set_month(local->tm_mon);
set_year(local->tm_year);
set_type(1);
set_timezone(local->tm_gmtoff);
} else {
_clear();
}
*/
#endif
}
void

View File

@ -128,10 +128,10 @@ public:
t.bits.type = type;
set_type_and_timezone(t.type_and_timezone);
}
void set_timezone(int16 timezone) {
void set_timezone(int16 tz) {
type_and_timezone_accessor t;
t.type_and_timezone = type_and_timezone();
t.bits.timezone = timezone;
t.bits.timezone = tz;
set_type_and_timezone(t.type_and_timezone);
}
void set_year(uint16 year) { _year = B_HOST_TO_LENDIAN_INT16(year); }
@ -242,6 +242,7 @@ extern const entity_id kMetadataPartitionMapId;
extern const entity_id kSparablePartitionMapId;
extern const entity_id kVirtualPartitionMapId;
extern const entity_id kImplementationId;
extern const entity_id kPartitionContentsId;
//----------------------------------------------------------------------
// ECMA-167 Part 2
@ -855,6 +856,9 @@ public:
const array<uint8, 128>& implementation_use() const { return _implementation_use; }
array<uint8, 128>& implementation_use() { return _implementation_use; }
const array<uint8, 156>& reserved() const { return _reserved; }
array<uint8, 156>& reserved() { return _reserved; }
// Set functions
void set_vds_number(uint32 number) { _vds_number = B_HOST_TO_LENDIAN_INT32(number); }
void set_partition_flags(uint16 flags) { _partition_flags = B_HOST_TO_LENDIAN_INT16(flags); }
@ -864,7 +868,7 @@ public:
f.bits.allocated = allocated;
set_partition_flags(f.partition_flags);
}
void set_partition_number(uint16 number) { _partition_number = B_HOST_TO_LENDIAN_INT16(number); }
void set_access_type(uint32 type) { _access_type = B_HOST_TO_LENDIAN_INT32(type); }
void set_start(uint32 start) { _start = B_HOST_TO_LENDIAN_INT32(start); }
void set_length(uint32 length) { _length = B_HOST_TO_LENDIAN_INT32(length); }
@ -893,16 +897,16 @@ private:
uint32 _length;
entity_id _implementation_id;
array<uint8, 128> _implementation_use;
uint8 _reserved[156];
array<uint8, 156> _reserved;
} __attribute__((packed));
enum partition_access_type {
PAT_UNSPECIFIED,
PAT_READ_ONLY,
PAT_WRITE_ONCE,
PAT_REWRITABLE,
PAT_OVERWRITABLE,
ACCESS_UNSPECIFIED,
ACCESS_READ_ONLY,
ACCESS_WRITE_ONCE,
ACCESS_REWRITABLE,
ACCESS_OVERWRITABLE,
};