diff --git a/public/build.c b/public/build.c index 237fd0ee..756fc71c 100644 --- a/public/build.c +++ b/public/build.c @@ -13,6 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ +#include #include "crtlib.h" #include "buildenums.h" @@ -38,9 +39,31 @@ int Q_buildnum_date( const char *date ) b = d + (int)((y - 1) * 365.25f ); if((( y % 4 ) == 0 ) && m > 1 ) - { b += 1; - } + b -= 41728; // Apr 1 2015 + + return b; +} + +int Q_buildnum_iso( const char *date ) +{ + int y, m, d, b, i; + + if( sscanf( date, "%d-%d-%d", &y, &m, &d ) != 3 || y <= 1900 || m <= 0 || d <= 0 ) + return -1; + + // fixup day and month + m--; + d--; + + for( i = 0; i < m; i++ ) + d += mond[i]; + + y -= 1900; + b = d + (int)((y - 1) * 365.25f ); + + if((( y % 4 ) == 0 ) && m > 1 ) + b += 1; b -= 41728; // Apr 1 2015 return b; diff --git a/public/crtlib.h b/public/crtlib.h index 3216d97e..b19152bd 100644 --- a/public/crtlib.h +++ b/public/crtlib.h @@ -57,6 +57,7 @@ enum // int Q_buildnum( void ); int Q_buildnum_date( const char *date ); +int Q_buildnum_iso( const char *date ); int Q_buildnum_compat( void ); const char *Q_PlatformStringByID( const int platform ); const char *Q_buildos( void ); diff --git a/public/tests/test_build.c b/public/tests/test_build.c index 016505dc..ee3b0f40 100644 --- a/public/tests/test_build.c +++ b/public/tests/test_build.c @@ -180,8 +180,14 @@ int main( void ) if( Q_buildnum_date( "Apr 02 2015" ) != 1 ) return 201; - if( Q_buildnum_date( "Apr 17 2023" ) != 2938 ) + if( Q_buildnum_date( "Apr 02 2015" ) != Q_buildnum_iso( "2015-04-02 21:19:10 +0300" )) return 202; + if( Q_buildnum_date( "Apr 17 2023" ) != 2938 ) + return 203; + + if( Q_buildnum_date( "Apr 17 2023" ) != Q_buildnum_iso( "2023-04-17 21:19:10 +0300" )) + return 204; + return EXIT_SUCCESS; }