(trunk) move tr_lockfile from libtransmission/ to gtk/, since the gtk client is the only one who uses it anymore

This commit is contained in:
Charles Kerr 2009-08-14 12:53:08 +00:00
parent d125d9a967
commit 61e95595b8
8 changed files with 93 additions and 88 deletions

View File

@ -75,27 +75,27 @@ cf_init( const char * configDir,
/* errstr may be NULL, this might be called before GTK is initialized */
static gboolean
lockfile( const char * filename,
tr_lockfile_state_t *tr_state,
char ** errstr )
lockfile( const char * filename,
gtr_lockfile_state_t * tr_state,
char ** errstr )
{
const tr_lockfile_state_t state = tr_lockfile( filename );
const gboolean success = state == TR_LOCKFILE_SUCCESS;
const gtr_lockfile_state_t state = gtr_lockfile( filename );
const gboolean success = state == GTR_LOCKFILE_SUCCESS;
if( errstr ) switch( state )
{
case TR_LOCKFILE_EOPEN:
case GTR_LOCKFILE_EOPEN:
*errstr =
g_strdup_printf( _( "Couldn't open \"%1$s\": %2$s" ),
filename, g_strerror( errno ) );
break;
case TR_LOCKFILE_ELOCK:
case GTR_LOCKFILE_ELOCK:
*errstr = g_strdup_printf( _( "%s is already running." ),
g_get_application_name( ) );
break;
case TR_LOCKFILE_SUCCESS:
case GTR_LOCKFILE_SUCCESS:
*errstr = NULL;
break;
}
@ -125,8 +125,7 @@ cf_removelocks( void )
/* errstr may be NULL, this might be called before GTK is initialized */
gboolean
cf_lock( tr_lockfile_state_t *tr_state,
char ** errstr )
cf_lock( gtr_lockfile_state_t * tr_state, char ** errstr )
{
char * path = getLockFilename( );
const gboolean didLock = lockfile( path, tr_state, errstr );

View File

@ -27,6 +27,7 @@
#include <inttypes.h>
#include <libtransmission/transmission.h>
#include "util.h" /* gtr_lockfile */
int64_t pref_int_get ( const char * key );
void pref_int_set ( const char * key, int64_t value );
@ -67,7 +68,7 @@ gboolean pref_flag_eval( pref_flag_t val,
gboolean cf_init( const char *confdir,
char ** errstr );
gboolean cf_lock( tr_lockfile_state_t *tr_state,
char ** errstr );
gboolean cf_lock( gtr_lockfile_state_t * tr_state,
char ** errstr );
#endif /* TG_CONF_H */

View File

@ -325,20 +325,19 @@ onRPCChanged( tr_session * session UNUSED,
}
int
main( int argc,
char ** argv )
main( int argc, char ** argv )
{
char * err = NULL;
GSList * argfiles;
GError * gerr;
gboolean didinit = FALSE;
gboolean didlock = FALSE;
gboolean showversion = FALSE;
gboolean startpaused = FALSE;
gboolean startminimized = FALSE;
const char * domain = MY_NAME;
char * configDir = NULL;
tr_lockfile_state_t tr_state;
char * err = NULL;
GSList * argfiles;
GError * gerr;
gboolean didinit = FALSE;
gboolean didlock = FALSE;
gboolean showversion = FALSE;
gboolean startpaused = FALSE;
gboolean startminimized = FALSE;
const char * domain = MY_NAME;
char * configDir = NULL;
gtr_lockfile_state_t tr_state;
GOptionEntry entries[] = {
{ "paused", 'p', 0, G_OPTION_ARG_NONE,
@ -415,7 +414,7 @@ main( int argc,
}
}
}
else if( ( !didlock ) && ( tr_state == TR_LOCKFILE_ELOCK ) )
else if( ( !didlock ) && ( tr_state == GTR_LOCKFILE_ELOCK ) )
{
/* There's already another copy of Transmission running,
* so tell it to present its window to the user */

View File

@ -16,6 +16,10 @@
#include <stdlib.h> /* free() */
#include <string.h> /* strcmp() */
#include <sys/types.h> /* for gtr_lockfile()'s open() */
#include <sys/stat.h> /* for gtr_lockfile()'s open() */
#include <fcntl.h> /* for gtr_lockfile()'s open() */
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <glib/gstdio.h> /* g_unlink() */
@ -37,6 +41,55 @@
#include "tr-prefs.h"
#include "util.h"
gtr_lockfile_state_t
gtr_lockfile( const char * filename )
{
gtr_lockfile_state_t ret;
#ifdef WIN32
HANDLE file = CreateFile( filename,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL );
if( file == INVALID_HANDLE_VALUE )
ret = GTR_LOCKFILE_EOPEN;
else if( !LockFile( file, 0, 0, 1, 1 ) )
ret = GTR_LOCKFILE_ELOCK;
else
ret = GTR_LOCKFILE_SUCCESS;
#else
int fd = open( filename, O_RDWR | O_CREAT, 0666 );
if( fd < 0 )
ret = GTR_LOCKFILE_EOPEN;
else {
struct flock lk;
memset( &lk, 0, sizeof( lk ) );
lk.l_start = 0;
lk.l_len = 0;
lk.l_type = F_WRLCK;
lk.l_whence = SEEK_SET;
if( -1 == fcntl( fd, F_SETLK, &lk ) )
ret = GTR_LOCKFILE_ELOCK;
else
ret = GTR_LOCKFILE_SUCCESS;
}
#endif
return ret;
}
/***
****
***/
char*
tr_strlratio( char * buf, double ratio, size_t buflen )
{

View File

@ -14,6 +14,7 @@
#define GTR_UTIL_H
#include <sys/types.h>
#include <gtk/gtk.h>
/* macro to shut up "unused parameter" warnings */
#ifndef UNUSED
@ -61,6 +62,20 @@ GSList * checkfilenames( int argc, char ** argv );
****
***/
typedef enum
{
GTR_LOCKFILE_SUCCESS = 0,
GTR_LOCKFILE_EOPEN,
GTR_LOCKFILE_ELOCK
}
gtr_lockfile_state_t;
gtr_lockfile_state_t gtr_lockfile( const char * filename );
/***
****
***/
void gtr_open_file( const char * path );
gboolean gtr_dbus_add_torrent( const char * filename );
@ -73,9 +88,6 @@ char* gtr_get_help_url( void );
****
***/
/* GTK-related utilities */
#ifdef GTK_MAJOR_VERSION
/* backwards-compatible wrapper around g_mkdir_with_parents() */
int gtr_mkdir_with_parents( const char *name, int mode );
@ -121,6 +133,4 @@ gboolean on_tree_view_button_released( GtkWidget * view,
/* move a file to the trashcan if GIO is available; otherwise, delete it */
int tr_file_trash_or_remove( const char * filename );
#endif /* GTK_MAJOR_VERSION */
#endif /* GTR_UTIL_H */

View File

@ -663,53 +663,6 @@ tr_getClutchDir( const tr_session * session UNUSED )
****
***/
tr_lockfile_state_t
tr_lockfile( const char * filename )
{
tr_lockfile_state_t ret;
#ifdef WIN32
HANDLE file = CreateFile(
filename,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ |
FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL );
if( file == INVALID_HANDLE_VALUE )
ret = TR_LOCKFILE_EOPEN;
else if( !LockFile( file, 0, 0, 1, 1 ) )
ret = TR_LOCKFILE_ELOCK;
else
ret = TR_LOCKFILE_SUCCESS;
#else
int fd = open( filename, O_RDWR | O_CREAT, 0666 );
if( fd < 0 )
ret = TR_LOCKFILE_EOPEN;
else
{
struct flock lk;
memset( &lk, 0, sizeof( lk ) );
lk.l_start = 0;
lk.l_len = 0;
lk.l_type = F_WRLCK;
lk.l_whence = SEEK_SET;
if( -1 == fcntl( fd, F_SETLK, &lk ) )
ret = TR_LOCKFILE_ELOCK;
else
ret = TR_LOCKFILE_SUCCESS;
}
#endif
return ret;
}
#ifdef WIN32
/* The following mmap functions are by Joerg Walter, and were taken from

View File

@ -63,8 +63,6 @@ void tr_lockUnlock( tr_lock * );
int tr_lockHave( const tr_lock * );
tr_lockfile_state_t tr_lockfile( const char * filename );
#ifdef WIN32
void * mmap( void *ptr,
long size,

View File

@ -1356,14 +1356,6 @@ tr_torrent_activity;
tr_torrent_activity tr_torrentGetActivity( tr_torrent * );
typedef enum
{
TR_LOCKFILE_SUCCESS = 0,
TR_LOCKFILE_EOPEN,
TR_LOCKFILE_ELOCK
}
tr_lockfile_state_t;
enum
{
TR_PEER_FROM_INCOMING = 0, /* connections made to the listening port */