Author: apo Date: 2017-10-21 15:07:22 +0000 (Sat, 21 Oct 2017) New Revision: 16031
Added: packages/tags/biniax2/1.30-4/ packages/tags/biniax2/1.30-4/debian/changelog packages/tags/biniax2/1.30-4/debian/patches/compiler-warnings.patch packages/tags/biniax2/1.30-4/debian/patches/series packages/tags/biniax2/1.30-4/debian/patches/userdir.patch Removed: packages/tags/biniax2/1.30-4/debian/changelog packages/tags/biniax2/1.30-4/debian/patches/series packages/tags/biniax2/1.30-4/debian/patches/userdir.patch Log: [svn-buildpackage] Tagging biniax2 1.30-4 Deleted: packages/tags/biniax2/1.30-4/debian/changelog =================================================================== --- packages/trunk/biniax2/debian/changelog 2017-10-18 15:43:29 UTC (rev 16029) +++ packages/tags/biniax2/1.30-4/debian/changelog 2017-10-21 15:07:22 UTC (rev 16031) @@ -1,85 +0,0 @@ -biniax2 (1.30-3) unstable; urgency=medium - - * Team upload. - * Switch to compat level 10. - * Improve the find command and use the -delete option. - * Drop deprecated menu file and xpm icon. - * Use https for Format field, update copyright years. - * Use https for Vcs-Browser field. - * Change priority from extra to optional. - * Add keywords to desktop file. - * Declare compliance with Debian Policy 4.1.1. - - -- Markus Koschany <[email protected]> Wed, 18 Oct 2017 17:30:11 +0200 - -biniax2 (1.30-2) unstable; urgency=low - - * Team upload. - [ Miriam Ruiz ] - * Fix biniax2.6 man page and specify the correct config file location. - (Closes: #616047) - [ Markus Koschany ] - * Switch to package format 3.0 (quilt). - * Bump compat level to 9 and require debhelper >=9 for automatic hardening - build flags. - * debian/control: - - Remove quilt dependency because package format 3.0 uses quilt by default. - - Bump Standards-Version to 3.9.4, no changes required. - - Use canonical Vcs-URI. - - Fix spelling in biniax2 package description. (Closes: #659609). Thanks - Maarten Bezemer for the report and patch. - - binax2-data: - + Lower recommendation for biniax2 to Suggests. Most people who install - biniax2-data directly are only interested in the data files. - + Update package description and be more verbose. - * biniax2.desktop: remove unnecessary equals sign from short description. - (Closes: #611029) Thanks Robert Roth for the report and patch. - * biniax2.menu: Add longtitle. - * Remove empty docs file. - * Fix spelling in README.Debian. - * Delete README.source. Quilt is the default patch system used by package - format 3.0. - * Update debian/copyright to copyright format 1.0. Remove CC-BY-3.0 license - because all the game data files are licensed under the ZLib license, too. - See License.txt for more information. - * Add hardening-support.patch which provides Debian's hardening build flags - via dpkg-buildflags. - * Simplify debian/rules by using dh sequencer. - * Build with hardening=+all. - * Use high resolution icon logo.png for biniax2.desktop file instead of - biniax2.xpm. - * Improve userdir.patch. Create an initial config file if necessary. Remove - all PATH_MAX declarations and replace them with a fixed value of 1024 - bytes. This ensures that biniax2 can be built on GNU/Hurd too. - * Drop fixes.patch. It was not applied anyway. - * Install biniax2.6 with manpages file. - - -- Markus Koschany <[email protected]> Fri, 12 Apr 2013 20:33:40 +0200 - -biniax2 (1.30-1) unstable; urgency=low - - [ Miriam Ruiz ] - * Fixed patch fixes.patch to save hall of fame in biniax2/hof instead of - biniax2/config - - [ Paul Wise ] - * New upstream release - * Add a watch file - - PLEASE NOTE UPSTREAM 1.20 == 0.0.20080409 - - [ Barry deFreese ] - * Add myself to uploaders. - * Add README.source for quilt patch system. - * Fix spelling error in README.Debian. - * Fix syntax in debian/copyright to make lintian happy. - * Bump Standards Version to 3.8.3. (No changes needed). - - -- Barry deFreese <[email protected]> Sun, 27 Sep 2009 10:45:47 -0400 - -biniax2 (0.0.20080409-1) unstable; urgency=low - - [ Miriam Ruiz ] - * Initial release (Closes: #476247) - - -- Miriam Ruiz <[email protected]> Thu, 10 Apr 2008 11:12:15 +0000 - Copied: packages/tags/biniax2/1.30-4/debian/changelog (from rev 16030, packages/trunk/biniax2/debian/changelog) =================================================================== --- packages/tags/biniax2/1.30-4/debian/changelog (rev 0) +++ packages/tags/biniax2/1.30-4/debian/changelog 2017-10-21 15:07:22 UTC (rev 16031) @@ -0,0 +1,93 @@ +biniax2 (1.30-4) unstable; urgency=medium + + * Team upload. + * Add compiler-warnings.patch, fix various compiler warnings and a crash + because of undefined behavior. + + -- Markus Koschany <[email protected]> Sat, 21 Oct 2017 16:53:26 +0200 + +biniax2 (1.30-3) unstable; urgency=medium + + * Team upload. + * Switch to compat level 10. + * Improve the find command and use the -delete option. + * Drop deprecated menu file and xpm icon. + * Use https for Format field, update copyright years. + * Use https for Vcs-Browser field. + * Change priority from extra to optional. + * Add keywords to desktop file. + * Declare compliance with Debian Policy 4.1.1. + + -- Markus Koschany <[email protected]> Wed, 18 Oct 2017 17:30:11 +0200 + +biniax2 (1.30-2) unstable; urgency=low + + * Team upload. + [ Miriam Ruiz ] + * Fix biniax2.6 man page and specify the correct config file location. + (Closes: #616047) + [ Markus Koschany ] + * Switch to package format 3.0 (quilt). + * Bump compat level to 9 and require debhelper >=9 for automatic hardening + build flags. + * debian/control: + - Remove quilt dependency because package format 3.0 uses quilt by default. + - Bump Standards-Version to 3.9.4, no changes required. + - Use canonical Vcs-URI. + - Fix spelling in biniax2 package description. (Closes: #659609). Thanks + Maarten Bezemer for the report and patch. + - binax2-data: + + Lower recommendation for biniax2 to Suggests. Most people who install + biniax2-data directly are only interested in the data files. + + Update package description and be more verbose. + * biniax2.desktop: remove unnecessary equals sign from short description. + (Closes: #611029) Thanks Robert Roth for the report and patch. + * biniax2.menu: Add longtitle. + * Remove empty docs file. + * Fix spelling in README.Debian. + * Delete README.source. Quilt is the default patch system used by package + format 3.0. + * Update debian/copyright to copyright format 1.0. Remove CC-BY-3.0 license + because all the game data files are licensed under the ZLib license, too. + See License.txt for more information. + * Add hardening-support.patch which provides Debian's hardening build flags + via dpkg-buildflags. + * Simplify debian/rules by using dh sequencer. + * Build with hardening=+all. + * Use high resolution icon logo.png for biniax2.desktop file instead of + biniax2.xpm. + * Improve userdir.patch. Create an initial config file if necessary. Remove + all PATH_MAX declarations and replace them with a fixed value of 1024 + bytes. This ensures that biniax2 can be built on GNU/Hurd too. + * Drop fixes.patch. It was not applied anyway. + * Install biniax2.6 with manpages file. + + -- Markus Koschany <[email protected]> Fri, 12 Apr 2013 20:33:40 +0200 + +biniax2 (1.30-1) unstable; urgency=low + + [ Miriam Ruiz ] + * Fixed patch fixes.patch to save hall of fame in biniax2/hof instead of + biniax2/config + + [ Paul Wise ] + * New upstream release + * Add a watch file + - PLEASE NOTE UPSTREAM 1.20 == 0.0.20080409 + + [ Barry deFreese ] + * Add myself to uploaders. + * Add README.source for quilt patch system. + * Fix spelling error in README.Debian. + * Fix syntax in debian/copyright to make lintian happy. + * Bump Standards Version to 3.8.3. (No changes needed). + + -- Barry deFreese <[email protected]> Sun, 27 Sep 2009 10:45:47 -0400 + +biniax2 (0.0.20080409-1) unstable; urgency=low + + [ Miriam Ruiz ] + * Initial release (Closes: #476247) + + -- Miriam Ruiz <[email protected]> Thu, 10 Apr 2008 11:12:15 +0000 + Copied: packages/tags/biniax2/1.30-4/debian/patches/compiler-warnings.patch (from rev 16030, packages/trunk/biniax2/debian/patches/compiler-warnings.patch) =================================================================== --- packages/tags/biniax2/1.30-4/debian/patches/compiler-warnings.patch (rev 0) +++ packages/tags/biniax2/1.30-4/debian/patches/compiler-warnings.patch 2017-10-21 15:07:22 UTC (rev 16031) @@ -0,0 +1,88 @@ +From: Markus Koschany <[email protected]> +Date: Sat, 21 Oct 2017 16:47:03 +0200 +Subject: compiler warnings + +Fix various compiler warnings. The most serious are +warning: function returns address of local variable in hof.c and biniax.c. +This is undefined behavior and crashes the game. + +Forwarded: no +--- + biniax.c | 5 +++-- + desktop/sys.c | 2 +- + desktop/sys.h | 2 +- + hof.c | 5 +++-- + 4 files changed, 8 insertions(+), 6 deletions(-) + +diff --git a/biniax.c b/biniax.c +index 06f2500..e12cc0f 100755 +--- a/biniax.c ++++ b/biniax.c +@@ -1218,6 +1218,7 @@ static const char *saveFileName() + { + #ifndef _WIN32 + char filename[1024]; ++ static char* autosave_path; + char *home; + struct passwd *passwd; + if (!getuid()) +@@ -1262,8 +1263,8 @@ static const char *saveFileName() + return BNX_FALSE; + } + } +- strncat(filename, "/autosave", sizeof(filename)-1); +- return filename; ++ autosave_path = strncat(filename, "/autosave", sizeof(filename)-1); ++ return autosave_path; + #else + return "./autosave.bnx2"; + #endif +diff --git a/desktop/sys.c b/desktop/sys.c +index 20528c0..1af436b 100755 +--- a/desktop/sys.c ++++ b/desktop/sys.c +@@ -73,7 +73,7 @@ void sysUpdate() + FILE FUNCTIONS + ******************************************************************************/ + +-BNX_UINT32 sysGetFileLen( char *file ) ++BNX_UINT32 sysGetFileLen( const char *file ) + { + BNX_UINT32 len = 0; + FILE *f; +diff --git a/desktop/sys.h b/desktop/sys.h +index 5a266c7..2dfe7c3 100755 +--- a/desktop/sys.h ++++ b/desktop/sys.h +@@ -65,7 +65,7 @@ void sysUpdate(); + FILE FUNCIONS + ******************************************************************************/ + +-BNX_UINT32 sysGetFileLen( char *file ); ++BNX_UINT32 sysGetFileLen( const char *file ); + + void sysFPut8( BNX_UINT8 n, FILE *f ); + void sysFPut16( BNX_UINT16 n, FILE *f ); +diff --git a/hof.c b/hof.c +index d0c6efb..34c5d49 100755 +--- a/hof.c ++++ b/hof.c +@@ -106,6 +106,7 @@ static const char *hofFileName() + { + #ifndef _WIN32 + char filename[1024]; ++ static char* hof_path; + char *home; + struct passwd *passwd; + if (!getuid()) +@@ -150,8 +151,8 @@ static const char *hofFileName() + return BNX_FALSE; + } + } +- strncat(filename, "/hof", sizeof(filename)-1); +- return filename; ++ hof_path = strncat(filename, "/hof", sizeof(filename)-1); ++ return hof_path; + #else + return "./hof.bnx2"; + #endif Deleted: packages/tags/biniax2/1.30-4/debian/patches/series =================================================================== --- packages/trunk/biniax2/debian/patches/series 2017-10-18 15:43:29 UTC (rev 16029) +++ packages/tags/biniax2/1.30-4/debian/patches/series 2017-10-21 15:07:22 UTC (rev 16031) @@ -1,4 +0,0 @@ -datadir.patch -userdir.patch -warnings.patch -hardening-support.patch Copied: packages/tags/biniax2/1.30-4/debian/patches/series (from rev 16030, packages/trunk/biniax2/debian/patches/series) =================================================================== --- packages/tags/biniax2/1.30-4/debian/patches/series (rev 0) +++ packages/tags/biniax2/1.30-4/debian/patches/series 2017-10-21 15:07:22 UTC (rev 16031) @@ -0,0 +1,5 @@ +datadir.patch +userdir.patch +warnings.patch +hardening-support.patch +compiler-warnings.patch Deleted: packages/tags/biniax2/1.30-4/debian/patches/userdir.patch =================================================================== --- packages/trunk/biniax2/debian/patches/userdir.patch 2017-10-18 15:43:29 UTC (rev 16029) +++ packages/tags/biniax2/1.30-4/debian/patches/userdir.patch 2017-10-21 15:07:22 UTC (rev 16031) @@ -1,716 +0,0 @@ -From: Miriam Ruiz <[email protected]> -Date: Fri, 5 Apr 2013 00:08:18 +0200 -Subject: userdir - ---- - biniax.c | 228 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- - desktop/cfg.c | 122 +++++++++++++++++++++++------- - hof.c | 202 ++++++++++++++++++++++++++++++++++++++++++++++++-- - inc.h | 4 + - 4 files changed, 520 insertions(+), 36 deletions(-) - -diff --git a/biniax.c b/biniax.c -index 886b692..5cc5765 100755 ---- a/biniax.c -+++ b/biniax.c -@@ -51,6 +51,22 @@ INCLUDES - #include "lev.h" - #include "inc.h" - -+#ifndef _WIN32 -+#include <stdlib.h> -+#include <stdio.h> -+#include <string.h> -+#include <unistd.h> -+#include <limits.h> -+#include <pwd.h> -+#include <fcntl.h> -+#include <sys/stat.h> -+#include <sys/types.h> -+#include <stdint.h> -+#endif -+ -+#include <errno.h> -+#include <string.h> -+ - /* Global instance of GAME structure */ - BNX_GAME Game; - -@@ -82,6 +98,9 @@ BNX_BOOL saveGame( BNX_GAME *game ); - BNX_BOOL loadGame( BNX_GAME *game ); - BNX_BOOL loadHiScore( BNX_GAME *game ); - -+BNX_BOOL saveOldDebianGame( BNX_GAME *game ); -+BNX_BOOL loadOldDebianGame( BNX_GAME *game ); -+ - #define UNREF( A ) (A) = (A) - /****************************************************************************** - PROGRAM START -@@ -100,13 +119,27 @@ int main( int argc, char *argv[] ) - cfgInit(); - hofInit(); - if ( gfxInit() == BNX_FALSE ) -+ { -+ fprintf(stderr, "Error in Graphics Initialization\n"); - return -1; -+ } - if ( sysInit() == BNX_FALSE ) -+ { -+ fprintf(stderr, "Error in System Initialization\n"); - return -2; -+ } - if ( inpInit() == BNX_FALSE ) -+ { -+ fprintf(stderr, "Error in Input Initialization\n"); - return -3; -+ } - if ( sndInit() == BNX_FALSE ) -- return -4; -+ { -+ fprintf(stderr, "Error in Sound Initialization\n"); -+ cfgSetSound(BNX_FALSE); -+ cfgSetMusic(BNX_FALSE); -+ /* return -4; */ -+ } - - /****************************************************************** - SHOW INITIAL WELCOME SCREEN -@@ -131,6 +164,10 @@ int main( int argc, char *argv[] ) - case cOptionContinue: - if ( loadGame( &Game ) == BNX_FALSE ) - { -+ if (errno) -+ fprintf(stderr, "Error loading game data: %s\n", strerror(errno)); -+ else -+ fprintf(stderr, "Error loading game data\n"); - enterState = cStateMainMenu; - } - else -@@ -1178,13 +1215,70 @@ void showHelp( BNX_GAME *game ) - GAME AND HISCORE SAVE / RESTORE - ******************************************************************************/ - -+static const char *saveFileName() -+{ -+#ifndef _WIN32 -+ char filename[1024]; -+ char *home; -+ struct passwd *passwd; -+ if (!getuid()) -+ { -+ fprintf(stderr, "No access to data files for root.\n"); -+ return BNX_FALSE; -+ } else { -+ if ((home = getenv("XDG_DATA_HOME"))) -+ { /* See http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html */ -+ if (strlen(home) > 1024 - sizeof("/biniax2/hof")) -+ { -+ fprintf(stderr, "$XDG_DATA_HOME is excessively long.n"); -+ return BNX_FALSE; -+ } -+ snprintf(filename, sizeof(filename), "%s/biniax2", home); -+ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -+ } -+ else if ((home = getenv("HOME"))) -+ { -+ passwd = getpwuid (getuid()); -+ home=passwd->pw_dir; -+ if (!home) -+ { -+ fprintf(stderr, "$HOME is not defined.\n"); -+ return BNX_FALSE; -+ } -+ if (strlen(home) > 1024 - sizeof("/.local/share/biniax2/autosave")) -+ { -+ fprintf(stderr, "$HOME is excessively long.n"); -+ return BNX_FALSE; -+ } -+ snprintf(filename, sizeof(filename), "%s/.local", home); -+ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -+ strncat(filename, "/share", sizeof(filename)-1); -+ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -+ strncat(filename, "/biniax2", sizeof(filename)-1); -+ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -+ } -+ else -+ { -+ fprintf(stderr, "Neither $XDG_DATA_HOME nor $HOME are defined.\n"); -+ return BNX_FALSE; -+ } -+ } -+ strncat(filename, "/autosave", sizeof(filename)-1); -+ return filename; -+#else -+ return "./autosave.bnx2"; -+#endif -+} -+ - BNX_BOOL saveGame( BNX_GAME *game ) - { - FILE *file; - BNX_INT32 i; - BNX_INT32 j; - -- file = fopen( sysGetFullFileName( csSaveGameName ), "wb" ); -+ fprintf(stderr, "Saving game data in \"%s\"\n", saveFileName()); -+ -+ file = fopen( saveFileName(), "wb" ); - - if ( file == (FILE *) NULL ) - return BNX_FALSE; -@@ -1242,9 +1336,14 @@ BNX_BOOL loadGame( BNX_GAME *game ) - BNX_INT32 i; - BNX_INT32 j; - -- if ( sysGetFileLen( sysGetFullFileName( csSaveGameName ) ) != cSaveFileSize ) -+ if (loadOldDebianGame(game) == BNX_TRUE) -+ return BNX_TRUE; -+ -+ fprintf(stderr, "Loading game data from \"%s\"\n", saveFileName()); -+ -+ if ( sysGetFileLen( saveFileName() ) != cSaveFileSize ) - return BNX_FALSE; -- file = fopen( sysGetFullFileName( csSaveGameName ), "rb" ); -+ file = fopen( saveFileName(), "rb" ); - if ( file == (FILE *) NULL ) - return BNX_FALSE; - -@@ -1302,3 +1401,124 @@ BNX_BOOL loadHiScore( BNX_GAME *game ) - return BNX_TRUE; - } - -+// DEBIAN SPECIFIC STUFF -+ -+BNX_BOOL saveOldDebianGame( BNX_GAME *game ) -+{ -+ FILE *file; -+ int i, j; -+ -+ fprintf(stderr, "Saving game data with old format in \"%s\"\n", saveFileName()); -+ file = fopen( saveFileName(), "wb" ); -+ if ( file == (FILE *) NULL ) -+ return BNX_FALSE; -+ -+ sysFPut16( 0xB2D1 , file ); -+ -+ sysFPut32( game->moment , file ); -+ sysFPut16( game->mode , file ); -+ sysFPut16( game->scroll , file ); -+ sysFPut16( game->speed , file ); -+ sysFPut16( game->moves , file ); -+ sysFPut16( game->clears , file ); -+ fputc( game->ingame , file ); -+ sysFPut32( game->sounds , file ); -+ fputc( game->message , file ); -+ sysFPut32( game->lines , file ); -+ sysFPut16( game->level , file ); -+ sysFPut16( game->level_count , file ); -+ -+ sysFPut16( cMaxPlayers , file ); -+ -+ for (i = 0; i < cMaxPlayers; i++) -+ { -+ fputc( game->player[i].x , file ); -+ fputc( game->player[i].y , file ); -+ fputc( game->player[i].e , file ); -+ sysFPut32( game->score[i] , file ); -+ sysFPut32( game->wins[i] , file ); -+ sysFPut32( game->best[i] , file ); -+ } -+ -+ sysFPut32( cGridX , file ); -+ sysFPut32( cGridY , file ); -+ -+ for (j = 0; j < cGridY; j++) -+ for (i = 0; i < cGridX; i++) -+ fputc( game->grid[i][j] , file ); -+ -+ sysFPut16( 0xB2D0 , file ); -+ -+ fclose( file ); -+ return BNX_TRUE; -+} -+ -+BNX_BOOL loadOldDebianGame( BNX_GAME *game ) -+{ -+ FILE *file = NULL; -+ int i, j; -+ uint16_t id, mp; -+ uint32_t mx, my; -+ -+ file = fopen( saveFileName(), "rb" ); -+ if ( file == (FILE *) NULL ) -+ return BNX_FALSE; -+ -+ errno = 0; -+ -+ id = sysFGet16(file); -+ if (id != 0xB2D1) -+ goto error; -+ -+ fprintf(stderr, "Loading game data with old format from \"%s\"\n", saveFileName()); -+ -+ game->moment = sysFGet32(file); -+ game->mode = sysFGet16(file); -+ game->scroll = sysFGet16(file); -+ game->speed = sysFGet16(file); -+ game->moves = sysFGet16(file); -+ game->clears = sysFGet16(file); -+ game->ingame = fgetc(file); -+ game->sounds = sysFGet32(file); -+ game->message = fgetc(file); -+ game->lines = sysFGet32(file); -+ game->level = sysFGet16(file); -+ game->level_count = sysFGet16(file); -+ -+ mp = sysFGet16(file); -+ if (mp != cMaxPlayers) -+ goto error; -+ -+ for (i = 0; i < cMaxPlayers; i++) -+ { -+ game->player[i].x = fgetc(file); -+ game->player[i].y = fgetc(file); -+ game->player[i].e = fgetc(file); -+ game->score[i] = sysFGet32(file); -+ game->wins[i] = sysFGet32(file); -+ game->best[i] = sysFGet32(file); -+ } -+ -+ mx = sysFGet32(file); -+ if (mx != cGridX) -+ goto error; -+ my = sysFGet32(file); -+ if (my != cGridY) -+ goto error; -+ -+ for (j = 0; j < cGridY; j++) -+ for (i = 0; i < cGridX; i++) -+ game->grid[i][j] = fgetc(file); -+ -+ id = sysFGet16(file); -+ if (id != 0xB2D0) -+ goto error; -+ -+ fclose( file ); -+ return BNX_TRUE; -+ -+error: -+ if (file) -+ fclose( file ); -+ return BNX_FALSE; -+} -diff --git a/desktop/cfg.c b/desktop/cfg.c -index 5c2773a..b735566 100755 ---- a/desktop/cfg.c -+++ b/desktop/cfg.c -@@ -30,6 +30,17 @@ INCLUDES - - #include "inc.h" - -+#ifndef _WIN32 -+#include <stdlib.h> -+#include <stdio.h> -+#include <string.h> -+#include <unistd.h> -+#include <limits.h> -+#include <pwd.h> -+#include <fcntl.h> -+#include <sys/stat.h> -+#include <sys/types.h> -+#endif - - /****************************************************************************** - FUNCTIONS -@@ -54,38 +65,99 @@ BNX_BOOL cfgInit() - char buffer[ _Cfg_Buffer ]; - int nTemp; - -+#ifndef _WIN32 -+ char filename[1024]; -+ char *home; -+ struct passwd *passwd; -+ if (!getuid()) -+ { -+ fprintf(stderr, "No access to config files for root.\n"); -+ return BNX_FALSE; -+ } else { -+ if ((home = getenv("XDG_CONFIG_HOME"))) -+ { /* See http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html */ -+ if (strlen(home) > 1024 - sizeof("/biniax2/config")) -+ { -+ fprintf(stderr, "$XDG_CONFIG_HOME is excessively long.n"); -+ return BNX_FALSE; -+ } -+ snprintf(filename, sizeof(filename), "%s/biniax2", home); -+ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -+ } -+ else if ((home = getenv("HOME"))) -+ { -+ passwd = getpwuid (getuid()); -+ home=passwd->pw_dir; -+ if (!home) -+ { -+ fprintf(stderr, "$HOME is not defined.\n"); -+ return BNX_FALSE; -+ } -+ if (strlen(home) > 1024 - sizeof("/.config/biniax2/config")) -+ { -+ fprintf(stderr, "$HOME is excessively long.n"); -+ return BNX_FALSE; -+ } -+ snprintf(filename, sizeof(filename), "%s/.config", home); -+ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -+ strncat(filename, "/biniax2", sizeof(filename)-1); -+ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -+ } -+ else -+ { -+ fprintf(stderr, "Neither $XDG_CONFIG_HOME nor $HOME are defined.\n"); -+ return BNX_FALSE; -+ } -+ } -+ strncat(filename, "/config", sizeof(filename)-1); -+#else -+ char filename[] = "./config.bnx2"; -+#endif -+ - _Cfg.sound = BNX_TRUE; - _Cfg.music = BNX_TRUE; - _Cfg.fullscreen = BNX_FALSE; - _Cfg.touch = BNX_FALSE; - -- f = fopen( sysGetFullFileName( csConfigName ), "rt" ); -- if ( f == 0 ) -- { -- return BNX_FALSE; -- } -- -- fgets( buffer, _Cfg_Buffer, f ); -- sscanf( buffer, "SOUND=%d", &nTemp ); -- _Cfg.sound = (BNX_BOOL) nTemp; -- -- fgets( buffer, _Cfg_Buffer, f ); -- sscanf( buffer, "MUSIC=%d", &nTemp ); -- _Cfg.music = (BNX_BOOL) nTemp; -- -- fgets( buffer, _Cfg_Buffer, f ); -- sscanf( buffer, "FULLSCREEN=%d", &nTemp ); -- _Cfg.fullscreen = (BNX_BOOL) nTemp; -- -- fgets( buffer, _Cfg_Buffer, f ); -- sscanf( buffer, "TOUCH=%d", &nTemp ); -- _Cfg.touch = (BNX_BOOL) nTemp; -- -- fclose( f ); -- -+if( access( filename, F_OK ) != -1 ) { -+ f = fopen( filename, "r" ); -+ if ( f == NULL ) -+ { -+ fprintf( stderr,"Configuration file \"%s\" not found\n", filename ); -+ return BNX_FALSE; -+ } -+ else { -+ fgets( buffer, _Cfg_Buffer, f ); -+ sscanf( buffer, "SOUND=%d", &nTemp ); -+ _Cfg.sound = (BNX_BOOL) nTemp; -+ -+ fgets( buffer, _Cfg_Buffer, f ); -+ sscanf( buffer, "MUSIC=%d", &nTemp ); -+ _Cfg.music = (BNX_BOOL) nTemp; -+ -+ fgets( buffer, _Cfg_Buffer, f ); -+ sscanf( buffer, "FULLSCREEN=%d", &nTemp ); -+ _Cfg.fullscreen = (BNX_BOOL) nTemp; -+ -+ fgets( buffer, _Cfg_Buffer, f ); -+ sscanf( buffer, "TOUCH=%d", &nTemp ); -+ _Cfg.touch = (BNX_BOOL) nTemp; -+ fclose( f ); -+ -+ fprintf( stderr, _Cfg.sound ? "Sound On\n" : "Sound Off\n" ); -+ fprintf( stderr, _Cfg.music ? "Music On\n" : "Music Off\n" ); -+ fprintf( stderr, _Cfg.fullscreen ? "Fullscreen On\n" : "Fullscreen Off\n" ); -+ return BNX_TRUE; -+ } -+} else { -+ f = fopen( filename, "w" ); -+ fputs("SOUND=1\n", f); -+ fputs("MUSIC=1\n", f); -+ fputs("FULLSCREEN=0", f); -+ fclose(f); - return BNX_TRUE; - } -- -+} - BNX_BOOL cfgGetSound() - { - return _Cfg.sound; -diff --git a/hof.c b/hof.c -index 6472e68..d0c6efb 100755 ---- a/hof.c -+++ b/hof.c -@@ -31,6 +31,21 @@ INCLUDES - - #include "inc.h" - -+#ifndef _WIN32 -+#include <stdlib.h> -+#include <stdio.h> -+#include <string.h> -+#include <unistd.h> -+#include <limits.h> -+#include <pwd.h> -+#include <fcntl.h> -+#include <sys/stat.h> -+#include <sys/types.h> -+#endif -+ -+#include <errno.h> -+#include <string.h> -+ - #define chCursor '_' /* Cursor ON */ - #define chSpace ' ' /* Cursor OFF*/ - -@@ -46,6 +61,8 @@ void hofAddLetter( BNX_INT16 pos, char a, char *name ); - void hofBlinkCursor( BNX_INT16 pos, char *name ); - void hofResetCursor( BNX_INT16 pos, char *name ); - -+BNX_BOOL hofOldDebianInit(); -+BNX_BOOL hofOldDebianSave(); - - void hofAddLetter( BNX_INT16 pos, char a, char *name ) - { -@@ -85,25 +102,81 @@ void hofResetCursor( BNX_INT16 pos, char *name ) - } - } - -+static const char *hofFileName() -+{ -+#ifndef _WIN32 -+ char filename[1024]; -+ char *home; -+ struct passwd *passwd; -+ if (!getuid()) -+ { -+ fprintf(stderr, "No access to data files for root.\n"); -+ return BNX_FALSE; -+ } else { -+ if ((home = getenv("XDG_DATA_HOME"))) -+ { /* See http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html */ -+ if (strlen(home) > 1024 - sizeof("/biniax2/hof")) -+ { -+ fprintf(stderr, "$XDG_DATA_HOME is excessively long.n"); -+ return BNX_FALSE; -+ } -+ snprintf(filename, sizeof(filename), "%s/biniax2", home); -+ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -+ } -+ else if ((home = getenv("HOME"))) -+ { -+ passwd = getpwuid (getuid()); -+ home=passwd->pw_dir; -+ if (!home) -+ { -+ fprintf(stderr, "$HOME is not defined.\n"); -+ return BNX_FALSE; -+ } -+ if (strlen(home) > 1024 - sizeof("/.local/share/biniax2/hof")) -+ { -+ fprintf(stderr, "$HOME is excessively long.n"); -+ return BNX_FALSE; -+ } -+ snprintf(filename, sizeof(filename), "%s/.local", home); -+ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -+ strncat(filename, "/share", sizeof(filename)-1); -+ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -+ strncat(filename, "/biniax2", sizeof(filename)-1); -+ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -+ } -+ else -+ { -+ fprintf(stderr, "Neither $XDG_DATA_HOME nor $HOME are defined.\n"); -+ return BNX_FALSE; -+ } -+ } -+ strncat(filename, "/hof", sizeof(filename)-1); -+ return filename; -+#else -+ return "./hof.bnx2"; -+#endif -+} - - BNX_BOOL hofInit() - { - FILE *file; - BNX_INT16 i, j; -- -+ -+ if (hofOldDebianInit() == BNX_TRUE) -+ return BNX_TRUE; - - for ( i = 0; i < cHofEntries; ++i ) - { -- strcpy( Hof.arcade[ i ].name, "JORDAN " ); -+ strcpy( Hof.arcade[ i ].name, "DEBIAN " ); - Hof.arcade[ i ].score = (cHofEntries - i) * cHofInitScore; - -- strcpy( Hof.tactic[ i ].name, "JORDAN " ); -+ strcpy( Hof.tactic[ i ].name, "DEBIAN " ); - Hof.tactic[ i ].score = (cHofEntries - i) * cHofInitScore; - } - -- if ( sysGetFileLen( sysGetFullFileName( csHOFName ) ) != cHOFFileSize ) -+ if ( sysGetFileLen( hofFileName() ) != cHOFFileSize ) - return BNX_FALSE; -- file = fopen( sysGetFullFileName( csHOFName ), "rb" ); -+ file = fopen( hofFileName(), "rb" ); - if ( file == (FILE *) NULL ) - return BNX_FALSE; - -@@ -137,7 +210,7 @@ BNX_BOOL hofSave() - FILE *file; - int i, j; - -- file = fopen( sysGetFullFileName( csHOFName ), "wb" ); -+ file = fopen( hofFileName(), "wb" ); - - if ( file == (FILE *) NULL ) - return BNX_FALSE; -@@ -292,4 +365,119 @@ void hofView() - BNX_HALL *hofGet() - { - return (BNX_HALL *) &Hof; --} -\ No newline at end of file -+} -+ -+// DEBIAN SPECIFIC -+ -+BNX_BOOL hofOldDebianInit() -+{ -+ FILE *file = NULL; -+ int i; -+ uint16_t id, me, ml; -+ const char *filename = NULL; -+ char alt_filename[1024+3]; -+ -+ file = fopen( (filename = hofFileName()), "rb" ); -+ -+ if ( file == (FILE *) NULL ) // Bug in previous version, see if data can be reached -+ { -+ char *ptr; -+ strncpy(alt_filename, filename, 1024); -+ ptr = strrchr(alt_filename, '/'); -+ if (ptr != NULL) -+ { -+ ptr++; -+ filename = alt_filename; -+ strcpy(ptr, "config"); -+ file = fopen( filename, "rb" ); -+ } -+ } -+ -+ if ( file == (FILE *) NULL ) -+ { -+ goto error; -+ } -+ -+ errno = 0; -+ -+ id = sysFGet16(file); -+ if (id != 0xB2F1) -+ goto error; -+ -+ fprintf(stderr, "Loading Hall of Fame data with old format from \"%s\"\n", filename); -+ -+ ml = sysFGet16(file); -+ if (ml != cHofNameLen) -+ goto error; -+ -+ me = sysFGet16(file); -+ if (me != cHofEntries) -+ goto error; -+ -+ for ( i = 0; i < cHofEntries; ++i ) -+ { -+ fread( Hof.arcade[i].name, 1, cHofNameLen, file ); -+ Hof.arcade[i].score = sysFGet32(file); -+ } -+ -+ for ( i = 0; i < cHofEntries; ++i ) -+ { -+ fread( Hof.tactic[i].name, 1, cHofNameLen, file ); -+ Hof.tactic[i].score = sysFGet32(file); -+ } -+ -+ id = sysFGet16(file); -+ if (id != 0xB2F0) -+ goto error; -+ -+ fclose( file ); -+ -+ return BNX_TRUE; -+ -+error: -+ if (file) -+ fclose( file ); -+ return BNX_FALSE; -+} -+ -+BNX_BOOL hofOldDebianSave() -+{ -+ FILE *file; -+ int i; -+ const char *filename = NULL; -+ -+ file = fopen( (filename=hofFileName()), "wb" ); -+ -+ if ( file == (FILE *) NULL ) -+ { -+ if (errno) -+ fprintf(stderr, "Could not save Hall of Fame data with old format in \"%s\": %s\n", filename, strerror(errno)); -+ else -+ fprintf(stderr, "Could not save Hall of Fame data with old format in \"%s\"\n", filename); -+ return BNX_FALSE; -+ } -+ -+ fprintf(stderr, "Saving Hall of Fame data with old format in \"%s\"\n", filename); -+ -+ sysFPut16( 0xB2F1 , file ); -+ sysFPut16( cHofNameLen , file ); -+ sysFPut16( cHofEntries , file ); -+ -+ for ( i = 0; i < cHofEntries; ++i ) -+ { -+ fwrite( Hof.arcade[i].name, 1, cHofNameLen, file ); -+ sysFPut32(Hof.arcade[i].score, file); -+ } -+ -+ for ( i = 0; i < cHofEntries; ++i ) -+ { -+ fwrite( Hof.tactic[i].name, 1, cHofNameLen, file ); -+ sysFPut32(Hof.tactic[i].score, file); -+ } -+ -+ sysFPut16( 0xB2F0 , file ); -+ -+ fclose( file ); -+ -+ return BNX_TRUE; -+} -diff --git a/inc.h b/inc.h -index ee3459a..e9c8379 100755 ---- a/inc.h -+++ b/inc.h -@@ -68,5 +68,9 @@ INCLUDES - #include "symbian/sys.h" - #endif - -+#ifndef _WIN32 -+#include <stdint.h> -+#include <stdio.h> -+#endif - - #endif Copied: packages/tags/biniax2/1.30-4/debian/patches/userdir.patch (from rev 16030, packages/trunk/biniax2/debian/patches/userdir.patch) =================================================================== --- packages/tags/biniax2/1.30-4/debian/patches/userdir.patch (rev 0) +++ packages/tags/biniax2/1.30-4/debian/patches/userdir.patch 2017-10-21 15:07:22 UTC (rev 16031) @@ -0,0 +1,716 @@ +From: Miriam Ruiz <[email protected]> +Date: Fri, 5 Apr 2013 00:08:18 +0200 +Subject: userdir + +--- + biniax.c | 228 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- + desktop/cfg.c | 122 ++++++++++++++++++++++++------- + hof.c | 202 +++++++++++++++++++++++++++++++++++++++++++++++++-- + inc.h | 4 ++ + 4 files changed, 520 insertions(+), 36 deletions(-) + +diff --git a/biniax.c b/biniax.c +index 886b692..5cc5765 100755 +--- a/biniax.c ++++ b/biniax.c +@@ -51,6 +51,22 @@ INCLUDES + #include "lev.h" + #include "inc.h" + ++#ifndef _WIN32 ++#include <stdlib.h> ++#include <stdio.h> ++#include <string.h> ++#include <unistd.h> ++#include <limits.h> ++#include <pwd.h> ++#include <fcntl.h> ++#include <sys/stat.h> ++#include <sys/types.h> ++#include <stdint.h> ++#endif ++ ++#include <errno.h> ++#include <string.h> ++ + /* Global instance of GAME structure */ + BNX_GAME Game; + +@@ -82,6 +98,9 @@ BNX_BOOL saveGame( BNX_GAME *game ); + BNX_BOOL loadGame( BNX_GAME *game ); + BNX_BOOL loadHiScore( BNX_GAME *game ); + ++BNX_BOOL saveOldDebianGame( BNX_GAME *game ); ++BNX_BOOL loadOldDebianGame( BNX_GAME *game ); ++ + #define UNREF( A ) (A) = (A) + /****************************************************************************** + PROGRAM START +@@ -100,13 +119,27 @@ int main( int argc, char *argv[] ) + cfgInit(); + hofInit(); + if ( gfxInit() == BNX_FALSE ) ++ { ++ fprintf(stderr, "Error in Graphics Initialization\n"); + return -1; ++ } + if ( sysInit() == BNX_FALSE ) ++ { ++ fprintf(stderr, "Error in System Initialization\n"); + return -2; ++ } + if ( inpInit() == BNX_FALSE ) ++ { ++ fprintf(stderr, "Error in Input Initialization\n"); + return -3; ++ } + if ( sndInit() == BNX_FALSE ) +- return -4; ++ { ++ fprintf(stderr, "Error in Sound Initialization\n"); ++ cfgSetSound(BNX_FALSE); ++ cfgSetMusic(BNX_FALSE); ++ /* return -4; */ ++ } + + /****************************************************************** + SHOW INITIAL WELCOME SCREEN +@@ -131,6 +164,10 @@ int main( int argc, char *argv[] ) + case cOptionContinue: + if ( loadGame( &Game ) == BNX_FALSE ) + { ++ if (errno) ++ fprintf(stderr, "Error loading game data: %s\n", strerror(errno)); ++ else ++ fprintf(stderr, "Error loading game data\n"); + enterState = cStateMainMenu; + } + else +@@ -1178,13 +1215,70 @@ void showHelp( BNX_GAME *game ) + GAME AND HISCORE SAVE / RESTORE + ******************************************************************************/ + ++static const char *saveFileName() ++{ ++#ifndef _WIN32 ++ char filename[1024]; ++ char *home; ++ struct passwd *passwd; ++ if (!getuid()) ++ { ++ fprintf(stderr, "No access to data files for root.\n"); ++ return BNX_FALSE; ++ } else { ++ if ((home = getenv("XDG_DATA_HOME"))) ++ { /* See http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html */ ++ if (strlen(home) > 1024 - sizeof("/biniax2/hof")) ++ { ++ fprintf(stderr, "$XDG_DATA_HOME is excessively long.n"); ++ return BNX_FALSE; ++ } ++ snprintf(filename, sizeof(filename), "%s/biniax2", home); ++ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); ++ } ++ else if ((home = getenv("HOME"))) ++ { ++ passwd = getpwuid (getuid()); ++ home=passwd->pw_dir; ++ if (!home) ++ { ++ fprintf(stderr, "$HOME is not defined.\n"); ++ return BNX_FALSE; ++ } ++ if (strlen(home) > 1024 - sizeof("/.local/share/biniax2/autosave")) ++ { ++ fprintf(stderr, "$HOME is excessively long.n"); ++ return BNX_FALSE; ++ } ++ snprintf(filename, sizeof(filename), "%s/.local", home); ++ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); ++ strncat(filename, "/share", sizeof(filename)-1); ++ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); ++ strncat(filename, "/biniax2", sizeof(filename)-1); ++ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); ++ } ++ else ++ { ++ fprintf(stderr, "Neither $XDG_DATA_HOME nor $HOME are defined.\n"); ++ return BNX_FALSE; ++ } ++ } ++ strncat(filename, "/autosave", sizeof(filename)-1); ++ return filename; ++#else ++ return "./autosave.bnx2"; ++#endif ++} ++ + BNX_BOOL saveGame( BNX_GAME *game ) + { + FILE *file; + BNX_INT32 i; + BNX_INT32 j; + +- file = fopen( sysGetFullFileName( csSaveGameName ), "wb" ); ++ fprintf(stderr, "Saving game data in \"%s\"\n", saveFileName()); ++ ++ file = fopen( saveFileName(), "wb" ); + + if ( file == (FILE *) NULL ) + return BNX_FALSE; +@@ -1242,9 +1336,14 @@ BNX_BOOL loadGame( BNX_GAME *game ) + BNX_INT32 i; + BNX_INT32 j; + +- if ( sysGetFileLen( sysGetFullFileName( csSaveGameName ) ) != cSaveFileSize ) ++ if (loadOldDebianGame(game) == BNX_TRUE) ++ return BNX_TRUE; ++ ++ fprintf(stderr, "Loading game data from \"%s\"\n", saveFileName()); ++ ++ if ( sysGetFileLen( saveFileName() ) != cSaveFileSize ) + return BNX_FALSE; +- file = fopen( sysGetFullFileName( csSaveGameName ), "rb" ); ++ file = fopen( saveFileName(), "rb" ); + if ( file == (FILE *) NULL ) + return BNX_FALSE; + +@@ -1302,3 +1401,124 @@ BNX_BOOL loadHiScore( BNX_GAME *game ) + return BNX_TRUE; + } + ++// DEBIAN SPECIFIC STUFF ++ ++BNX_BOOL saveOldDebianGame( BNX_GAME *game ) ++{ ++ FILE *file; ++ int i, j; ++ ++ fprintf(stderr, "Saving game data with old format in \"%s\"\n", saveFileName()); ++ file = fopen( saveFileName(), "wb" ); ++ if ( file == (FILE *) NULL ) ++ return BNX_FALSE; ++ ++ sysFPut16( 0xB2D1 , file ); ++ ++ sysFPut32( game->moment , file ); ++ sysFPut16( game->mode , file ); ++ sysFPut16( game->scroll , file ); ++ sysFPut16( game->speed , file ); ++ sysFPut16( game->moves , file ); ++ sysFPut16( game->clears , file ); ++ fputc( game->ingame , file ); ++ sysFPut32( game->sounds , file ); ++ fputc( game->message , file ); ++ sysFPut32( game->lines , file ); ++ sysFPut16( game->level , file ); ++ sysFPut16( game->level_count , file ); ++ ++ sysFPut16( cMaxPlayers , file ); ++ ++ for (i = 0; i < cMaxPlayers; i++) ++ { ++ fputc( game->player[i].x , file ); ++ fputc( game->player[i].y , file ); ++ fputc( game->player[i].e , file ); ++ sysFPut32( game->score[i] , file ); ++ sysFPut32( game->wins[i] , file ); ++ sysFPut32( game->best[i] , file ); ++ } ++ ++ sysFPut32( cGridX , file ); ++ sysFPut32( cGridY , file ); ++ ++ for (j = 0; j < cGridY; j++) ++ for (i = 0; i < cGridX; i++) ++ fputc( game->grid[i][j] , file ); ++ ++ sysFPut16( 0xB2D0 , file ); ++ ++ fclose( file ); ++ return BNX_TRUE; ++} ++ ++BNX_BOOL loadOldDebianGame( BNX_GAME *game ) ++{ ++ FILE *file = NULL; ++ int i, j; ++ uint16_t id, mp; ++ uint32_t mx, my; ++ ++ file = fopen( saveFileName(), "rb" ); ++ if ( file == (FILE *) NULL ) ++ return BNX_FALSE; ++ ++ errno = 0; ++ ++ id = sysFGet16(file); ++ if (id != 0xB2D1) ++ goto error; ++ ++ fprintf(stderr, "Loading game data with old format from \"%s\"\n", saveFileName()); ++ ++ game->moment = sysFGet32(file); ++ game->mode = sysFGet16(file); ++ game->scroll = sysFGet16(file); ++ game->speed = sysFGet16(file); ++ game->moves = sysFGet16(file); ++ game->clears = sysFGet16(file); ++ game->ingame = fgetc(file); ++ game->sounds = sysFGet32(file); ++ game->message = fgetc(file); ++ game->lines = sysFGet32(file); ++ game->level = sysFGet16(file); ++ game->level_count = sysFGet16(file); ++ ++ mp = sysFGet16(file); ++ if (mp != cMaxPlayers) ++ goto error; ++ ++ for (i = 0; i < cMaxPlayers; i++) ++ { ++ game->player[i].x = fgetc(file); ++ game->player[i].y = fgetc(file); ++ game->player[i].e = fgetc(file); ++ game->score[i] = sysFGet32(file); ++ game->wins[i] = sysFGet32(file); ++ game->best[i] = sysFGet32(file); ++ } ++ ++ mx = sysFGet32(file); ++ if (mx != cGridX) ++ goto error; ++ my = sysFGet32(file); ++ if (my != cGridY) ++ goto error; ++ ++ for (j = 0; j < cGridY; j++) ++ for (i = 0; i < cGridX; i++) ++ game->grid[i][j] = fgetc(file); ++ ++ id = sysFGet16(file); ++ if (id != 0xB2D0) ++ goto error; ++ ++ fclose( file ); ++ return BNX_TRUE; ++ ++error: ++ if (file) ++ fclose( file ); ++ return BNX_FALSE; ++} +diff --git a/desktop/cfg.c b/desktop/cfg.c +index 5c2773a..b735566 100755 +--- a/desktop/cfg.c ++++ b/desktop/cfg.c +@@ -30,6 +30,17 @@ INCLUDES + + #include "inc.h" + ++#ifndef _WIN32 ++#include <stdlib.h> ++#include <stdio.h> ++#include <string.h> ++#include <unistd.h> ++#include <limits.h> ++#include <pwd.h> ++#include <fcntl.h> ++#include <sys/stat.h> ++#include <sys/types.h> ++#endif + + /****************************************************************************** + FUNCTIONS +@@ -54,38 +65,99 @@ BNX_BOOL cfgInit() + char buffer[ _Cfg_Buffer ]; + int nTemp; + ++#ifndef _WIN32 ++ char filename[1024]; ++ char *home; ++ struct passwd *passwd; ++ if (!getuid()) ++ { ++ fprintf(stderr, "No access to config files for root.\n"); ++ return BNX_FALSE; ++ } else { ++ if ((home = getenv("XDG_CONFIG_HOME"))) ++ { /* See http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html */ ++ if (strlen(home) > 1024 - sizeof("/biniax2/config")) ++ { ++ fprintf(stderr, "$XDG_CONFIG_HOME is excessively long.n"); ++ return BNX_FALSE; ++ } ++ snprintf(filename, sizeof(filename), "%s/biniax2", home); ++ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); ++ } ++ else if ((home = getenv("HOME"))) ++ { ++ passwd = getpwuid (getuid()); ++ home=passwd->pw_dir; ++ if (!home) ++ { ++ fprintf(stderr, "$HOME is not defined.\n"); ++ return BNX_FALSE; ++ } ++ if (strlen(home) > 1024 - sizeof("/.config/biniax2/config")) ++ { ++ fprintf(stderr, "$HOME is excessively long.n"); ++ return BNX_FALSE; ++ } ++ snprintf(filename, sizeof(filename), "%s/.config", home); ++ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); ++ strncat(filename, "/biniax2", sizeof(filename)-1); ++ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); ++ } ++ else ++ { ++ fprintf(stderr, "Neither $XDG_CONFIG_HOME nor $HOME are defined.\n"); ++ return BNX_FALSE; ++ } ++ } ++ strncat(filename, "/config", sizeof(filename)-1); ++#else ++ char filename[] = "./config.bnx2"; ++#endif ++ + _Cfg.sound = BNX_TRUE; + _Cfg.music = BNX_TRUE; + _Cfg.fullscreen = BNX_FALSE; + _Cfg.touch = BNX_FALSE; + +- f = fopen( sysGetFullFileName( csConfigName ), "rt" ); +- if ( f == 0 ) +- { +- return BNX_FALSE; +- } +- +- fgets( buffer, _Cfg_Buffer, f ); +- sscanf( buffer, "SOUND=%d", &nTemp ); +- _Cfg.sound = (BNX_BOOL) nTemp; +- +- fgets( buffer, _Cfg_Buffer, f ); +- sscanf( buffer, "MUSIC=%d", &nTemp ); +- _Cfg.music = (BNX_BOOL) nTemp; +- +- fgets( buffer, _Cfg_Buffer, f ); +- sscanf( buffer, "FULLSCREEN=%d", &nTemp ); +- _Cfg.fullscreen = (BNX_BOOL) nTemp; +- +- fgets( buffer, _Cfg_Buffer, f ); +- sscanf( buffer, "TOUCH=%d", &nTemp ); +- _Cfg.touch = (BNX_BOOL) nTemp; +- +- fclose( f ); +- ++if( access( filename, F_OK ) != -1 ) { ++ f = fopen( filename, "r" ); ++ if ( f == NULL ) ++ { ++ fprintf( stderr,"Configuration file \"%s\" not found\n", filename ); ++ return BNX_FALSE; ++ } ++ else { ++ fgets( buffer, _Cfg_Buffer, f ); ++ sscanf( buffer, "SOUND=%d", &nTemp ); ++ _Cfg.sound = (BNX_BOOL) nTemp; ++ ++ fgets( buffer, _Cfg_Buffer, f ); ++ sscanf( buffer, "MUSIC=%d", &nTemp ); ++ _Cfg.music = (BNX_BOOL) nTemp; ++ ++ fgets( buffer, _Cfg_Buffer, f ); ++ sscanf( buffer, "FULLSCREEN=%d", &nTemp ); ++ _Cfg.fullscreen = (BNX_BOOL) nTemp; ++ ++ fgets( buffer, _Cfg_Buffer, f ); ++ sscanf( buffer, "TOUCH=%d", &nTemp ); ++ _Cfg.touch = (BNX_BOOL) nTemp; ++ fclose( f ); ++ ++ fprintf( stderr, _Cfg.sound ? "Sound On\n" : "Sound Off\n" ); ++ fprintf( stderr, _Cfg.music ? "Music On\n" : "Music Off\n" ); ++ fprintf( stderr, _Cfg.fullscreen ? "Fullscreen On\n" : "Fullscreen Off\n" ); ++ return BNX_TRUE; ++ } ++} else { ++ f = fopen( filename, "w" ); ++ fputs("SOUND=1\n", f); ++ fputs("MUSIC=1\n", f); ++ fputs("FULLSCREEN=0", f); ++ fclose(f); + return BNX_TRUE; + } +- ++} + BNX_BOOL cfgGetSound() + { + return _Cfg.sound; +diff --git a/hof.c b/hof.c +index 6472e68..d0c6efb 100755 +--- a/hof.c ++++ b/hof.c +@@ -31,6 +31,21 @@ INCLUDES + + #include "inc.h" + ++#ifndef _WIN32 ++#include <stdlib.h> ++#include <stdio.h> ++#include <string.h> ++#include <unistd.h> ++#include <limits.h> ++#include <pwd.h> ++#include <fcntl.h> ++#include <sys/stat.h> ++#include <sys/types.h> ++#endif ++ ++#include <errno.h> ++#include <string.h> ++ + #define chCursor '_' /* Cursor ON */ + #define chSpace ' ' /* Cursor OFF*/ + +@@ -46,6 +61,8 @@ void hofAddLetter( BNX_INT16 pos, char a, char *name ); + void hofBlinkCursor( BNX_INT16 pos, char *name ); + void hofResetCursor( BNX_INT16 pos, char *name ); + ++BNX_BOOL hofOldDebianInit(); ++BNX_BOOL hofOldDebianSave(); + + void hofAddLetter( BNX_INT16 pos, char a, char *name ) + { +@@ -85,25 +102,81 @@ void hofResetCursor( BNX_INT16 pos, char *name ) + } + } + ++static const char *hofFileName() ++{ ++#ifndef _WIN32 ++ char filename[1024]; ++ char *home; ++ struct passwd *passwd; ++ if (!getuid()) ++ { ++ fprintf(stderr, "No access to data files for root.\n"); ++ return BNX_FALSE; ++ } else { ++ if ((home = getenv("XDG_DATA_HOME"))) ++ { /* See http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html */ ++ if (strlen(home) > 1024 - sizeof("/biniax2/hof")) ++ { ++ fprintf(stderr, "$XDG_DATA_HOME is excessively long.n"); ++ return BNX_FALSE; ++ } ++ snprintf(filename, sizeof(filename), "%s/biniax2", home); ++ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); ++ } ++ else if ((home = getenv("HOME"))) ++ { ++ passwd = getpwuid (getuid()); ++ home=passwd->pw_dir; ++ if (!home) ++ { ++ fprintf(stderr, "$HOME is not defined.\n"); ++ return BNX_FALSE; ++ } ++ if (strlen(home) > 1024 - sizeof("/.local/share/biniax2/hof")) ++ { ++ fprintf(stderr, "$HOME is excessively long.n"); ++ return BNX_FALSE; ++ } ++ snprintf(filename, sizeof(filename), "%s/.local", home); ++ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); ++ strncat(filename, "/share", sizeof(filename)-1); ++ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); ++ strncat(filename, "/biniax2", sizeof(filename)-1); ++ mkdir(filename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); ++ } ++ else ++ { ++ fprintf(stderr, "Neither $XDG_DATA_HOME nor $HOME are defined.\n"); ++ return BNX_FALSE; ++ } ++ } ++ strncat(filename, "/hof", sizeof(filename)-1); ++ return filename; ++#else ++ return "./hof.bnx2"; ++#endif ++} + + BNX_BOOL hofInit() + { + FILE *file; + BNX_INT16 i, j; +- ++ ++ if (hofOldDebianInit() == BNX_TRUE) ++ return BNX_TRUE; + + for ( i = 0; i < cHofEntries; ++i ) + { +- strcpy( Hof.arcade[ i ].name, "JORDAN " ); ++ strcpy( Hof.arcade[ i ].name, "DEBIAN " ); + Hof.arcade[ i ].score = (cHofEntries - i) * cHofInitScore; + +- strcpy( Hof.tactic[ i ].name, "JORDAN " ); ++ strcpy( Hof.tactic[ i ].name, "DEBIAN " ); + Hof.tactic[ i ].score = (cHofEntries - i) * cHofInitScore; + } + +- if ( sysGetFileLen( sysGetFullFileName( csHOFName ) ) != cHOFFileSize ) ++ if ( sysGetFileLen( hofFileName() ) != cHOFFileSize ) + return BNX_FALSE; +- file = fopen( sysGetFullFileName( csHOFName ), "rb" ); ++ file = fopen( hofFileName(), "rb" ); + if ( file == (FILE *) NULL ) + return BNX_FALSE; + +@@ -137,7 +210,7 @@ BNX_BOOL hofSave() + FILE *file; + int i, j; + +- file = fopen( sysGetFullFileName( csHOFName ), "wb" ); ++ file = fopen( hofFileName(), "wb" ); + + if ( file == (FILE *) NULL ) + return BNX_FALSE; +@@ -292,4 +365,119 @@ void hofView() + BNX_HALL *hofGet() + { + return (BNX_HALL *) &Hof; +-} +\ No newline at end of file ++} ++ ++// DEBIAN SPECIFIC ++ ++BNX_BOOL hofOldDebianInit() ++{ ++ FILE *file = NULL; ++ int i; ++ uint16_t id, me, ml; ++ const char *filename = NULL; ++ char alt_filename[1024+3]; ++ ++ file = fopen( (filename = hofFileName()), "rb" ); ++ ++ if ( file == (FILE *) NULL ) // Bug in previous version, see if data can be reached ++ { ++ char *ptr; ++ strncpy(alt_filename, filename, 1024); ++ ptr = strrchr(alt_filename, '/'); ++ if (ptr != NULL) ++ { ++ ptr++; ++ filename = alt_filename; ++ strcpy(ptr, "config"); ++ file = fopen( filename, "rb" ); ++ } ++ } ++ ++ if ( file == (FILE *) NULL ) ++ { ++ goto error; ++ } ++ ++ errno = 0; ++ ++ id = sysFGet16(file); ++ if (id != 0xB2F1) ++ goto error; ++ ++ fprintf(stderr, "Loading Hall of Fame data with old format from \"%s\"\n", filename); ++ ++ ml = sysFGet16(file); ++ if (ml != cHofNameLen) ++ goto error; ++ ++ me = sysFGet16(file); ++ if (me != cHofEntries) ++ goto error; ++ ++ for ( i = 0; i < cHofEntries; ++i ) ++ { ++ fread( Hof.arcade[i].name, 1, cHofNameLen, file ); ++ Hof.arcade[i].score = sysFGet32(file); ++ } ++ ++ for ( i = 0; i < cHofEntries; ++i ) ++ { ++ fread( Hof.tactic[i].name, 1, cHofNameLen, file ); ++ Hof.tactic[i].score = sysFGet32(file); ++ } ++ ++ id = sysFGet16(file); ++ if (id != 0xB2F0) ++ goto error; ++ ++ fclose( file ); ++ ++ return BNX_TRUE; ++ ++error: ++ if (file) ++ fclose( file ); ++ return BNX_FALSE; ++} ++ ++BNX_BOOL hofOldDebianSave() ++{ ++ FILE *file; ++ int i; ++ const char *filename = NULL; ++ ++ file = fopen( (filename=hofFileName()), "wb" ); ++ ++ if ( file == (FILE *) NULL ) ++ { ++ if (errno) ++ fprintf(stderr, "Could not save Hall of Fame data with old format in \"%s\": %s\n", filename, strerror(errno)); ++ else ++ fprintf(stderr, "Could not save Hall of Fame data with old format in \"%s\"\n", filename); ++ return BNX_FALSE; ++ } ++ ++ fprintf(stderr, "Saving Hall of Fame data with old format in \"%s\"\n", filename); ++ ++ sysFPut16( 0xB2F1 , file ); ++ sysFPut16( cHofNameLen , file ); ++ sysFPut16( cHofEntries , file ); ++ ++ for ( i = 0; i < cHofEntries; ++i ) ++ { ++ fwrite( Hof.arcade[i].name, 1, cHofNameLen, file ); ++ sysFPut32(Hof.arcade[i].score, file); ++ } ++ ++ for ( i = 0; i < cHofEntries; ++i ) ++ { ++ fwrite( Hof.tactic[i].name, 1, cHofNameLen, file ); ++ sysFPut32(Hof.tactic[i].score, file); ++ } ++ ++ sysFPut16( 0xB2F0 , file ); ++ ++ fclose( file ); ++ ++ return BNX_TRUE; ++} +diff --git a/inc.h b/inc.h +index ee3459a..e9c8379 100755 +--- a/inc.h ++++ b/inc.h +@@ -68,5 +68,9 @@ INCLUDES + #include "symbian/sys.h" + #endif + ++#ifndef _WIN32 ++#include <stdint.h> ++#include <stdio.h> ++#endif + + #endif _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

