2 /// \file getpwuidandroid.cc
3 /// Replacements for getpwuid*() calls on Android
7 Copyright (C) 2011, RealVNC Ltd.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU General Public License in the COPYING file at the
19 root directory of this project for more details.
27 #define SDCARD_PATH "/mnt/sdcard"
29 static void fillInData(uid_t uid
, char* emptyString
, char* sdcardPath
, struct barry_passwd
* pwd
)
31 pwd
->pw_name
= emptyString
;
32 pwd
->pw_passwd
= emptyString
;
35 pwd
->pw_gecos
= emptyString
;
36 // This is the important value for Barry, as it's where to store
39 // For Android the best place is probably on the sdcard, as then
40 // it doesn't matter which application is calling it, as long
41 // as it has android.permission.WRITE_EXTERNAL_STORAGE
42 pwd
->pw_dir
= sdcardPath
;
43 pwd
->pw_shell
= emptyString
;
46 extern "C" struct barry_passwd
*barry_getpwuid(uid_t uid
)
48 static char emptyString
[1] = {0};
49 static char sdcardString
[sizeof(SDCARD_PATH
)] = SDCARD_PATH
;
50 static struct barry_passwd gPasswdStruct
;
51 fillInData(uid
, emptyString
, sdcardString
, &gPasswdStruct
);
52 return &gPasswdStruct
;
55 extern "C" int barry_getpwuid_r(uid_t uid
, struct barry_passwd
*pwd
,
56 char *buf
, size_t buflen
, struct barry_passwd
**result
)
58 if (buflen
< sizeof(SDCARD_PATH
))
60 memcpy(buf
, SDCARD_PATH
, sizeof(SDCARD_PATH
));
61 // Point all the empty entries at the '\0' at the end of the buffer
62 fillInData(uid
, buf
+ sizeof(SDCARD_PATH
) - 1, buf
, pwd
);