Ignore:
Timestamp:
Feb 28, 2008, 7:06:23 PM (13 years ago)
Author:
charles
Message:

add win32/posix wrapper function tr_lockfile() to libT and use it in daemon/gtk.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/platform.c

    r5164 r5167  
    450450    return buf;
    451451}
     452
     453/***
     454****
     455***/
     456
     457int
     458tr_lockfile( const char * filename )
     459{
     460    int ret;
     461
     462#ifdef WIN32
     463
     464    HANDLE file = CreateFile( filename,
     465                              GENERIC_READ|GENERIC_WRITE,
     466                              FILE_SHARE_READ|FILE_SHARE_WRITE,
     467                              NULL,
     468                              OPEN_ALWAYS,
     469                              FILE_ATTRIBUTE_NORMAL,
     470                              NULL );
     471    if( file == INVALID_HANDLE_VALUE )
     472        ret = TR_LOCKFILE_EOPEN;
     473    else if( !LockFile( file, 0, 0, 1, 1 ) )
     474        ret = TR_LOCKFILE_ELOCK;
     475    else
     476        ret = TR_LOCKFILE_SUCCESS;
     477
     478#else
     479
     480    int fd = open( filename, O_RDWR | O_CREAT, 0666 );
     481    if( fd < 0 )
     482        ret = TR_LOCKFILE_EOPEN;
     483    else {
     484        struct flock lk;
     485        memset( &lk, 0,  sizeof( lk ) );
     486        lk.l_start = 0;
     487        lk.l_len = 0;
     488        lk.l_type = F_WRLCK;
     489        lk.l_whence = SEEK_SET;
     490        if( -1 == fcntl( fd, F_SETLK, &lk ) )
     491            ret = TR_LOCKFILE_ELOCK;
     492        else
     493            ret = TR_LOCKFILE_SUCCESS;
     494    }
     495
     496#endif
     497
     498    return ret;
     499}
Note: See TracChangeset for help on using the changeset viewer.