mirror of
https://github.com/reactos/reactos.git
synced 2025-06-07 02:10:36 +00:00
Added more missing functions
svn path=/trunk/; revision=2044
This commit is contained in:
parent
131f7804ab
commit
10cde64c1f
10 changed files with 458 additions and 31 deletions
|
@ -18,9 +18,9 @@
|
||||||
* DISCLAMED. This includes but is not limited to warranties of
|
* DISCLAMED. This includes but is not limited to warranties of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* $Revision: 1.2 $
|
* $Revision: 1.3 $
|
||||||
* $Author: ekohl $
|
* $Author: ekohl $
|
||||||
* $Date: 2001/07/03 22:15:02 $
|
* $Date: 2001/07/06 12:50:47 $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -124,6 +124,7 @@ int _wfindnexti64(int handle, struct _wfinddatai64_t *result);
|
||||||
int _wchdir(const wchar_t *szPath);
|
int _wchdir(const wchar_t *szPath);
|
||||||
wchar_t* _wgetcwd(wchar_t *buffer, int maxlen);
|
wchar_t* _wgetcwd(wchar_t *buffer, int maxlen);
|
||||||
int _wmkdir(const wchar_t *_path);
|
int _wmkdir(const wchar_t *_path);
|
||||||
|
wchar_t* _wmktemp (wchar_t *_template);
|
||||||
int _wrmdir(const wchar_t *_path);
|
int _wrmdir(const wchar_t *_path);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,9 @@
|
||||||
* DISCLAMED. This includes but is not limited to warranties of
|
* DISCLAMED. This includes but is not limited to warranties of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* $Revision: 1.1 $
|
* $Revision: 1.2 $
|
||||||
* $Author: ekohl $
|
* $Author: ekohl $
|
||||||
* $Date: 2001/07/03 12:55:00 $
|
* $Date: 2001/07/06 12:50:47 $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
/* Appropriated for Reactos Crtdll by Ariadne */
|
/* Appropriated for Reactos Crtdll by Ariadne */
|
||||||
|
@ -130,16 +130,26 @@ extern FILE _iob[]; /* an array of FILE */
|
||||||
/*
|
/*
|
||||||
* File Operations
|
* File Operations
|
||||||
*/
|
*/
|
||||||
|
FILE* _fdopen(int handle, char *mode);
|
||||||
|
FILE* _wfdopen(int handle, wchar_t *mode);
|
||||||
|
|
||||||
FILE* fopen (const char* szFileName, const char* szMode);
|
FILE* fopen (const char* szFileName, const char* szMode);
|
||||||
|
FILE* _wfopen(const wchar_t *file, const wchar_t *mode);
|
||||||
|
|
||||||
FILE* freopen(const char* szNewFileName, const char* szNewMode,
|
FILE* freopen(const char* szNewFileName, const char* szNewMode,
|
||||||
FILE* fileChangeAssociation);
|
FILE* fileChangeAssociation);
|
||||||
|
FILE* _wfreopen(const wchar_t *file, const wchar_t *mode, FILE *f);
|
||||||
|
|
||||||
|
FILE* _fsopen(const char *file, const char *mode, int shflag);
|
||||||
|
FILE* _wfsopen(const wchar_t *file, const wchar_t *mode, int shflag);
|
||||||
|
|
||||||
int fflush(FILE* fileFlush);
|
int fflush(FILE* fileFlush);
|
||||||
int fclose(FILE* fileClose);
|
int fclose(FILE* fileClose);
|
||||||
#define fcloseall _fcloseall
|
#define fcloseall _fcloseall
|
||||||
int remove(const char* szFileName);
|
int remove(const char* szFileName);
|
||||||
int _wremove(const wchar_t* szFileName);
|
int _wremove(const wchar_t* szFileName);
|
||||||
int rename(const char* szOldFileName, const char* szNewFileName);
|
int rename(const char* szOldFileName, const char* szNewFileName);
|
||||||
|
int _wrename(const wchar_t *oldName, const wchar_t *newName);
|
||||||
FILE* tmpfile(void);
|
FILE* tmpfile(void);
|
||||||
|
|
||||||
int _filbuf(FILE *f);
|
int _filbuf(FILE *f);
|
||||||
|
@ -158,7 +168,10 @@ int _fcloseall( void );
|
||||||
#define L_tmpnam (260)
|
#define L_tmpnam (260)
|
||||||
|
|
||||||
char* tmpnam (char caName[]);
|
char* tmpnam (char caName[]);
|
||||||
|
wchar_t* _wtmpnam(wchar_t *s);
|
||||||
|
|
||||||
char* _tempnam (const char *szDir, const char *szPfx);
|
char* _tempnam (const char *szDir, const char *szPfx);
|
||||||
|
wchar_t *_wtempnam(const wchar_t *dir,const wchar_t *prefix);
|
||||||
|
|
||||||
#ifndef _NO_OLDNAMES
|
#ifndef _NO_OLDNAMES
|
||||||
#define tempnam _tempnam
|
#define tempnam _tempnam
|
||||||
|
@ -191,6 +204,7 @@ void setbuf (FILE* fileSetBuffer, char* caBuffer);
|
||||||
|
|
||||||
int _pclose (FILE* pipeClose);
|
int _pclose (FILE* pipeClose);
|
||||||
FILE* _popen (const char* szPipeName, const char* szMode);
|
FILE* _popen (const char* szPipeName, const char* szMode);
|
||||||
|
FILE* _wpopen (const wchar_t *cm, const wchar_t *md);
|
||||||
|
|
||||||
#define popen _popen
|
#define popen _popen
|
||||||
#define pclose _pclose
|
#define pclose _pclose
|
||||||
|
@ -330,6 +344,8 @@ int ferror (FILE* fileIsError);
|
||||||
void perror (const char* szErrorMessage);
|
void perror (const char* szErrorMessage);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
void _wperror(const wchar_t *s);
|
||||||
|
|
||||||
|
|
||||||
#define clearerr(f) (((f)->_flag) &= ~(_IOERR|_IOEOF))
|
#define clearerr(f) (((f)->_flag) &= ~(_IOERR|_IOEOF))
|
||||||
#define feof(f) (((f)->_flag&_IOEOF)!=0)
|
#define feof(f) (((f)->_flag&_IOEOF)!=0)
|
||||||
|
|
|
@ -18,9 +18,9 @@
|
||||||
* DISCLAMED. This includes but is not limited to warranties of
|
* DISCLAMED. This includes but is not limited to warranties of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* $Revision: 1.1 $
|
* $Revision: 1.2 $
|
||||||
* $Author: ekohl $
|
* $Author: ekohl $
|
||||||
* $Date: 2001/07/03 12:55:00 $
|
* $Date: 2001/07/06 12:50:47 $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
/* Appropriated for Reactos Crtdll by Ariadne */
|
/* Appropriated for Reactos Crtdll by Ariadne */
|
||||||
|
@ -105,6 +105,8 @@ char* ctime (const time_t* tp);
|
||||||
struct tm* gmtime (const time_t* tm);
|
struct tm* gmtime (const time_t* tm);
|
||||||
struct tm* localtime (const time_t* tm);
|
struct tm* localtime (const time_t* tm);
|
||||||
|
|
||||||
|
char* _strdate(const char *datestr);
|
||||||
|
wchar_t* _wstrdate(const wchar_t *datestr);
|
||||||
|
|
||||||
size_t strftime (char* caBuffer, size_t sizeMax, const char* szFormat,
|
size_t strftime (char* caBuffer, size_t sizeMax, const char* szFormat,
|
||||||
const struct tm* tpPrint);
|
const struct tm* tpPrint);
|
||||||
|
@ -112,6 +114,9 @@ size_t strftime (char* caBuffer, size_t sizeMax, const char* szFormat,
|
||||||
size_t wcsftime (wchar_t* wcaBuffer, size_t sizeMax,
|
size_t wcsftime (wchar_t* wcaBuffer, size_t sizeMax,
|
||||||
const wchar_t* wsFormat, const struct tm* tpPrint);
|
const wchar_t* wsFormat, const struct tm* tpPrint);
|
||||||
|
|
||||||
|
char* _strtime(char* buf);
|
||||||
|
wchar_t* _wstrtime(wchar_t* buf);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# $Id: Makefile,v 1.15 2001/07/06 00:58:15 ekohl Exp $
|
# $Id: Makefile,v 1.16 2001/07/06 12:53:03 ekohl Exp $
|
||||||
#
|
#
|
||||||
# ReactOS Operating System
|
# ReactOS Operating System
|
||||||
#
|
#
|
||||||
|
@ -227,8 +227,13 @@ OBJECTS_STDLIB = \
|
||||||
stdlib/atol.o \
|
stdlib/atol.o \
|
||||||
stdlib/bsearch.o \
|
stdlib/bsearch.o \
|
||||||
stdlib/div.o \
|
stdlib/div.o \
|
||||||
|
stdlib/ecvt.o \
|
||||||
|
stdlib/ecvtbuf.o \
|
||||||
stdlib/errno.o \
|
stdlib/errno.o \
|
||||||
|
stdlib/fcvt.o \
|
||||||
|
stdlib/fcvtbuf.o \
|
||||||
stdlib/fullpath.o \
|
stdlib/fullpath.o \
|
||||||
|
stdlib/gcvt.o \
|
||||||
stdlib/getenv.o \
|
stdlib/getenv.o \
|
||||||
stdlib/itoa.o \
|
stdlib/itoa.o \
|
||||||
stdlib/itow.o \
|
stdlib/itow.o \
|
||||||
|
@ -293,8 +298,13 @@ OBJECTS_SYS_STAT = \
|
||||||
sys_stat/stat.o
|
sys_stat/stat.o
|
||||||
|
|
||||||
OBJECTS_TIME = \
|
OBJECTS_TIME = \
|
||||||
time/time.o \
|
time/clock.o \
|
||||||
time/ctime.o
|
time/ctime.o \
|
||||||
|
time/difftime.o \
|
||||||
|
time/strdate.o \
|
||||||
|
time/strftime.o \
|
||||||
|
time/strtime.o \
|
||||||
|
time/time.o
|
||||||
|
|
||||||
OBJECTS_WSTRING = \
|
OBJECTS_WSTRING = \
|
||||||
wstring/wcscat.o \
|
wstring/wcscat.o \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
; $Id: msvcrt.def,v 1.10 2001/07/06 00:58:15 ekohl Exp $
|
; $Id: msvcrt.def,v 1.11 2001/07/06 12:53:03 ekohl Exp $
|
||||||
;
|
;
|
||||||
; ReactOS MSVCRT Compatibility Library
|
; ReactOS MSVCRT Compatibility Library
|
||||||
;
|
;
|
||||||
|
@ -205,7 +205,7 @@ _ctype DATA
|
||||||
; _dstbias
|
; _dstbias
|
||||||
_dup
|
_dup
|
||||||
_dup2
|
_dup2
|
||||||
; _ecvt
|
_ecvt
|
||||||
_endthread
|
_endthread
|
||||||
_endthreadex
|
_endthreadex
|
||||||
_environ_dll DATA
|
_environ_dll DATA
|
||||||
|
@ -224,7 +224,7 @@ _except_handler3
|
||||||
_exit
|
_exit
|
||||||
; _expand
|
; _expand
|
||||||
_fcloseall
|
_fcloseall
|
||||||
; _fcvt
|
_fcvt
|
||||||
_fdopen
|
_fdopen
|
||||||
_fgetchar
|
_fgetchar
|
||||||
_fgetwchar
|
_fgetwchar
|
||||||
|
@ -254,7 +254,7 @@ _fstati64
|
||||||
_ftol
|
_ftol
|
||||||
_fullpath
|
_fullpath
|
||||||
_futime
|
_futime
|
||||||
; _gcvt
|
_gcvt
|
||||||
_get_osfhandle
|
_get_osfhandle
|
||||||
; _get_sbh_threshold
|
; _get_sbh_threshold
|
||||||
_getch
|
_getch
|
||||||
|
@ -456,7 +456,7 @@ _stat
|
||||||
_stati64
|
_stati64
|
||||||
_statusfp
|
_statusfp
|
||||||
_strcmpi
|
_strcmpi
|
||||||
; _strdate
|
_strdate
|
||||||
_strdup
|
_strdup
|
||||||
_strerror
|
_strerror
|
||||||
_stricmp
|
_stricmp
|
||||||
|
@ -537,7 +537,7 @@ _winminor DATA
|
||||||
_winver DATA
|
_winver DATA
|
||||||
_wmakepath
|
_wmakepath
|
||||||
_wmkdir
|
_wmkdir
|
||||||
; _wmktemp
|
_wmktemp
|
||||||
_wopen
|
_wopen
|
||||||
_wperror
|
_wperror
|
||||||
; _wpgmptr DATA
|
; _wpgmptr DATA
|
||||||
|
@ -561,8 +561,8 @@ _wsopen
|
||||||
_wsplitpath
|
_wsplitpath
|
||||||
_wstat
|
_wstat
|
||||||
_wstati64
|
_wstati64
|
||||||
; _wstrdate
|
_wstrdate
|
||||||
; _wstrtime
|
_wstrtime
|
||||||
; _wsystem
|
; _wsystem
|
||||||
_wtempnam
|
_wtempnam
|
||||||
_wtmpnam
|
_wtmpnam
|
||||||
|
@ -589,11 +589,11 @@ bsearch
|
||||||
calloc
|
calloc
|
||||||
ceil
|
ceil
|
||||||
clearerr
|
clearerr
|
||||||
; clock
|
clock
|
||||||
cos
|
cos
|
||||||
cosh
|
cosh
|
||||||
ctime
|
ctime
|
||||||
; difftime
|
difftime
|
||||||
div
|
div
|
||||||
exit
|
exit
|
||||||
exp
|
exp
|
||||||
|
@ -711,7 +711,7 @@ strcoll
|
||||||
strcpy
|
strcpy
|
||||||
strcspn
|
strcspn
|
||||||
strerror
|
strerror
|
||||||
; strftime
|
strftime
|
||||||
strlen
|
strlen
|
||||||
strncat
|
strncat
|
||||||
strncmp
|
strncmp
|
||||||
|
@ -751,7 +751,7 @@ wcscmp
|
||||||
wcscoll
|
wcscoll
|
||||||
wcscpy
|
wcscpy
|
||||||
wcscspn
|
wcscspn
|
||||||
; wcsftime
|
wcsftime
|
||||||
wcslen
|
wcslen
|
||||||
wcsncat
|
wcsncat
|
||||||
wcsncmp
|
wcsncmp
|
||||||
|
|
29
reactos/lib/msvcrt/time/clock.c
Normal file
29
reactos/lib/msvcrt/time/clock.c
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/*
|
||||||
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
|
* PROJECT: ReactOS system libraries
|
||||||
|
* FILE: lib/msvcrt/time/clock.c
|
||||||
|
* PURPOSE: Get elapsed time
|
||||||
|
* PROGRAMER: Boudewijn Dekker
|
||||||
|
* UPDATE HISTORY:
|
||||||
|
* 28/12/98: Created
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include <msvcrt/time.h>
|
||||||
|
#include <msvcrt/internal/file.h>
|
||||||
|
|
||||||
|
VOID STDCALL GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime );
|
||||||
|
|
||||||
|
clock_t clock ( void )
|
||||||
|
{
|
||||||
|
FILETIME CreationTime;
|
||||||
|
FILETIME ExitTime;
|
||||||
|
FILETIME KernelTime;
|
||||||
|
FILETIME UserTime;
|
||||||
|
DWORD Remainder;
|
||||||
|
|
||||||
|
if (!GetProcessTimes(GetCurrentProcess(),&CreationTime,&ExitTime,&KernelTime,&UserTime))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return FileTimeToUnixTime(&KernelTime,&Remainder) + FileTimeToUnixTime(&UserTime,&Remainder);
|
||||||
|
}
|
8
reactos/lib/msvcrt/time/difftime.c
Normal file
8
reactos/lib/msvcrt/time/difftime.c
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
|
||||||
|
#include <msvcrt/time.h>
|
||||||
|
|
||||||
|
double
|
||||||
|
difftime(time_t time1, time_t time0)
|
||||||
|
{
|
||||||
|
return time1-time0;
|
||||||
|
}
|
47
reactos/lib/msvcrt/time/strdate.c
Normal file
47
reactos/lib/msvcrt/time/strdate.c
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
|
* PROJECT: ReactOS system libraries
|
||||||
|
* FILE: lib/msvcrt/time/strtime.c
|
||||||
|
* PURPOSE: Fills a buffer with a formatted date representation
|
||||||
|
* PROGRAMER: Boudewijn Dekker
|
||||||
|
* UPDATE HISTORY:
|
||||||
|
* 28/12/98: Created
|
||||||
|
*/
|
||||||
|
#include <msvcrt/time.h>
|
||||||
|
#include <msvcrt/stdio.h>
|
||||||
|
#include <msvcrt/errno.h>
|
||||||
|
#include <msvcrt/internal/file.h>
|
||||||
|
|
||||||
|
char *_strdate( const char *datestr )
|
||||||
|
{
|
||||||
|
time_t t;
|
||||||
|
struct tm *d;
|
||||||
|
char *dt = (char *)datestr;
|
||||||
|
|
||||||
|
if ( datestr == NULL )
|
||||||
|
{
|
||||||
|
__set_errno(EINVAL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
t = time(NULL);
|
||||||
|
d = localtime(&t);
|
||||||
|
sprintf(dt,"%d/%d/%d",d->tm_mday,d->tm_mon+1,d->tm_year);
|
||||||
|
return dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
wchar_t *_wstrdate( const wchar_t *datestr )
|
||||||
|
{
|
||||||
|
time_t t;
|
||||||
|
struct tm *d;
|
||||||
|
wchar_t *dt = (wchar_t *)datestr;
|
||||||
|
|
||||||
|
if ( datestr == NULL )
|
||||||
|
{
|
||||||
|
__set_errno(EINVAL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
t = time(NULL);
|
||||||
|
d = localtime(&t);
|
||||||
|
swprintf(dt,L"%d/%d/%d",d->tm_mday,d->tm_mon+1,d->tm_year);
|
||||||
|
return dt;
|
||||||
|
}
|
264
reactos/lib/msvcrt/time/strftime.c
Normal file
264
reactos/lib/msvcrt/time/strftime.c
Normal file
|
@ -0,0 +1,264 @@
|
||||||
|
/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
|
||||||
|
#include <msvcrt/string.h>
|
||||||
|
#include <msvcrt/time.h>
|
||||||
|
#include <msvcrt/stdlib.h>
|
||||||
|
#include <msvcrt/wchar.h>
|
||||||
|
|
||||||
|
#define TM_YEAR_BASE 1900
|
||||||
|
|
||||||
|
static const char *afmt[] = {
|
||||||
|
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
|
||||||
|
};
|
||||||
|
static const char *Afmt[] = {
|
||||||
|
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
|
||||||
|
"Saturday",
|
||||||
|
};
|
||||||
|
static const char *bfmt[] = {
|
||||||
|
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
|
||||||
|
"Oct", "Nov", "Dec",
|
||||||
|
};
|
||||||
|
static const char *Bfmt[] = {
|
||||||
|
"January", "February", "March", "April", "May", "June", "July",
|
||||||
|
"August", "September", "October", "November", "December",
|
||||||
|
};
|
||||||
|
|
||||||
|
static size_t gsize;
|
||||||
|
static char *pt;
|
||||||
|
|
||||||
|
static int
|
||||||
|
_add(const char *str)
|
||||||
|
{
|
||||||
|
for (;; ++pt, --gsize)
|
||||||
|
{
|
||||||
|
if (!gsize)
|
||||||
|
return 0;
|
||||||
|
if (!(*pt = *str++))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_conv(int n, int digits, char pad)
|
||||||
|
{
|
||||||
|
static char buf[10];
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
for (p = buf + sizeof(buf) - 2; n > 0 && p > buf; n /= 10, --digits)
|
||||||
|
*p-- = n % 10 + '0';
|
||||||
|
while (p > buf && digits-- > 0)
|
||||||
|
*p-- = pad;
|
||||||
|
return _add(++p);
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t
|
||||||
|
_fmt(const char *format, const struct tm *t)
|
||||||
|
{
|
||||||
|
for (; *format; ++format)
|
||||||
|
{
|
||||||
|
if (*format == '%') {
|
||||||
|
if (*(format+1) == '#' ) {format++;}
|
||||||
|
|
||||||
|
switch(*++format)
|
||||||
|
{
|
||||||
|
case '\0':
|
||||||
|
--format;
|
||||||
|
break;
|
||||||
|
case 'A':
|
||||||
|
if (t->tm_wday < 0 || t->tm_wday > 6)
|
||||||
|
return 0;
|
||||||
|
if (!_add(Afmt[t->tm_wday]))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'a':
|
||||||
|
if (t->tm_wday < 0 || t->tm_wday > 6)
|
||||||
|
return 0;
|
||||||
|
if (!_add(afmt[t->tm_wday]))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'B':
|
||||||
|
if (t->tm_mon < 0 || t->tm_mon > 11)
|
||||||
|
return 0;
|
||||||
|
if (!_add(Bfmt[t->tm_mon]))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'b':
|
||||||
|
case 'h':
|
||||||
|
if (t->tm_mon < 0 || t->tm_mon > 11)
|
||||||
|
return 0;
|
||||||
|
if (!_add(bfmt[t->tm_mon]))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'C':
|
||||||
|
if (!_fmt("%a %b %e %H:%M:%S %Y", t))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'c':
|
||||||
|
if (!_fmt("%m/%d/%y %H:%M:%S", t))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'e':
|
||||||
|
if (!_conv(t->tm_mday, 2, ' '))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'D':
|
||||||
|
if (!_fmt("%m/%d/%y", t))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'd':
|
||||||
|
if (!_conv(t->tm_mday, 2, '0'))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'H':
|
||||||
|
if (!_conv(t->tm_hour, 2, '0'))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'I':
|
||||||
|
if (!_conv(t->tm_hour % 12 ?
|
||||||
|
t->tm_hour % 12 : 12, 2, '0'))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'j':
|
||||||
|
if (!_conv(t->tm_yday + 1, 3, '0'))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'k':
|
||||||
|
if (!_conv(t->tm_hour, 2, ' '))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'l':
|
||||||
|
if (!_conv(t->tm_hour % 12 ?
|
||||||
|
t->tm_hour % 12 : 12, 2, ' '))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'M':
|
||||||
|
if (!_conv(t->tm_min, 2, '0'))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'm':
|
||||||
|
if (!_conv(t->tm_mon + 1, 2, '0'))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'n':
|
||||||
|
if (!_add("\n"))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'p':
|
||||||
|
if (!_add(t->tm_hour >= 12 ? "PM" : "AM"))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'R':
|
||||||
|
if (!_fmt("%H:%M", t))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'r':
|
||||||
|
if (!_fmt("%I:%M:%S %p", t))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'S':
|
||||||
|
if (!_conv(t->tm_sec, 2, '0'))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'T':
|
||||||
|
case 'X':
|
||||||
|
if (!_fmt("%H:%M:%S", t))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 't':
|
||||||
|
if (!_add("\t"))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'U':
|
||||||
|
if (!_conv((t->tm_yday + 7 - t->tm_wday) / 7,
|
||||||
|
2, '0'))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'W':
|
||||||
|
if (!_conv((t->tm_yday + 7 -
|
||||||
|
(t->tm_wday ? (t->tm_wday - 1) : 6))
|
||||||
|
/ 7, 2, '0'))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'w':
|
||||||
|
if (!_conv(t->tm_wday, 1, '0'))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'x':
|
||||||
|
if (!_fmt("%m/%d/%y", t))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'y':
|
||||||
|
if (!_conv((t->tm_year + TM_YEAR_BASE)
|
||||||
|
% 100, 2, '0'))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'Y':
|
||||||
|
if (!_conv(t->tm_year + TM_YEAR_BASE, 4, '0'))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case 'Z':
|
||||||
|
if (!t->tm_zone || !_add(t->tm_zone))
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
case '%':
|
||||||
|
/*
|
||||||
|
* X311J/88-090 (4.12.3.5): if conversion char is
|
||||||
|
* undefined, behavior is undefined. Print out the
|
||||||
|
* character itself as printf(3) does.
|
||||||
|
*/
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!gsize--)
|
||||||
|
return 0;
|
||||||
|
*pt++ = *format;
|
||||||
|
}
|
||||||
|
return gsize;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
strftime(char *s, size_t maxsize, const char *format, const struct tm *t)
|
||||||
|
{
|
||||||
|
pt = s;
|
||||||
|
if ((gsize = maxsize) < 1)
|
||||||
|
return 0;
|
||||||
|
if (_fmt(format, t))
|
||||||
|
{
|
||||||
|
*pt = '\0';
|
||||||
|
return maxsize - gsize;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
wcsftime(wchar_t *s, size_t maxsize, const wchar_t *format, const struct tm *t)
|
||||||
|
{
|
||||||
|
char *x;
|
||||||
|
char *f;
|
||||||
|
int i,j;
|
||||||
|
x = malloc(maxsize);
|
||||||
|
j = wcslen(format);
|
||||||
|
f = malloc(j+1);
|
||||||
|
for(i=0;i<j;i++)
|
||||||
|
f[i] = (char)*format;
|
||||||
|
f[i] = 0;
|
||||||
|
pt = x;
|
||||||
|
if ((gsize = maxsize) < 1)
|
||||||
|
return 0;
|
||||||
|
if (_fmt(f, t))
|
||||||
|
{
|
||||||
|
*pt = '\0';
|
||||||
|
free(f);
|
||||||
|
for(i=0;i<maxsize;i++)
|
||||||
|
s[i] = (wchar_t)x[i];
|
||||||
|
s[i] = 0;
|
||||||
|
free(x);
|
||||||
|
return maxsize - gsize;
|
||||||
|
}
|
||||||
|
for(i=0;i<maxsize;i++)
|
||||||
|
s[i] = (wchar_t)x[i];
|
||||||
|
s[i] = 0;
|
||||||
|
free(f);
|
||||||
|
free(x);
|
||||||
|
return 0;
|
||||||
|
}
|
47
reactos/lib/msvcrt/time/strtime.c
Normal file
47
reactos/lib/msvcrt/time/strtime.c
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
|
* PROJECT: ReactOS system libraries
|
||||||
|
* FILE: lib/msvcrt/time/strtime.c
|
||||||
|
* PURPOSE: Fills a buffer with a formatted time representation
|
||||||
|
* PROGRAMER: Boudewijn Dekker
|
||||||
|
* UPDATE HISTORY:
|
||||||
|
* 28/12/98: Created
|
||||||
|
*/
|
||||||
|
#include <msvcrt/time.h>
|
||||||
|
#include <msvcrt/stdio.h>
|
||||||
|
#include <msvcrt/errno.h>
|
||||||
|
#include <msvcrt/internal/file.h>
|
||||||
|
|
||||||
|
char *_strtime(char* buf)
|
||||||
|
{
|
||||||
|
time_t t;
|
||||||
|
struct tm *d;
|
||||||
|
char *dt = (char *)buf;
|
||||||
|
|
||||||
|
if ( buf == NULL )
|
||||||
|
{
|
||||||
|
__set_errno(EINVAL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
t = time(NULL);
|
||||||
|
d = localtime(&t);
|
||||||
|
sprintf(dt,"%d:%d:%d",d->tm_hour,d->tm_min,d->tm_sec);
|
||||||
|
return dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
wchar_t *_wstrtime(wchar_t* buf)
|
||||||
|
{
|
||||||
|
time_t t;
|
||||||
|
struct tm *d;
|
||||||
|
wchar_t *dt = (wchar_t *)buf;
|
||||||
|
|
||||||
|
if ( buf == NULL )
|
||||||
|
{
|
||||||
|
__set_errno(EINVAL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
t = time(NULL);
|
||||||
|
d = localtime(&t);
|
||||||
|
swprintf(dt,L"%d:%d:%d",d->tm_hour,d->tm_min,d->tm_sec);
|
||||||
|
return dt;
|
||||||
|
}
|
Loading…
Reference in a new issue