From 24d848bc545c35e9420f30c4fac7ded75072cfaa Mon Sep 17 00:00:00 2001 From: piaip Date: Sun, 20 Sep 2009 23:22:48 +0000 Subject: * merge uflag2 and uflag, and refine flag bitmask names git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@4871 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- upgrade/r4871_uflag.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 upgrade/r4871_uflag.c (limited to 'upgrade/r4871_uflag.c') diff --git a/upgrade/r4871_uflag.c b/upgrade/r4871_uflag.c new file mode 100644 index 00000000..0a2ac1bd --- /dev/null +++ b/upgrade/r4871_uflag.c @@ -0,0 +1,106 @@ +#define _UTIL_C_ +#include "bbs.h" +#include + +// old uflag2 bits +#ifndef OUF2_FAVNOHILIGHT +#define OUF2_FAVNOHILIGHT 0x00000010 /* false if hilight favorite */ +#define OUF2_FAVNEW_FLAG 0x00000020 /* true if add new board into one's fav */ +#define OUF2_FOREIGN 0x00000100 /* true if a foreign */ +#define OUF2_LIVERIGHT 0x00000200 /* true if get "liveright" already */ +#define OUF2_REJ_OUTTAMAIL 0x00000400 /* true if don't accept outside mails */ +#endif + +const unsigned int ufmap_from[] = { + OUF2_FAVNOHILIGHT, + OUF2_FAVNEW_FLAG, + OUF2_FOREIGN, + OUF2_LIVERIGHT, + OUF2_REJ_OUTTAMAIL, + 0, +}; + +const unsigned int ufmap_to[] = { + UF_FAV_NOHILIGHT, + UF_FAV_ADDNEW, + UF_FOREIGN, + UF_LIVERIGHT, + UF_REJ_OUTTAMAIL, + 0, +}; + +const char *ufmap_names [] = { + "FAV_NOHILIGHT", + "FAV_ADDNEW", + "FOREIGN", + "LIVERIGHT", + "REJ_OUTTAMAIL", +}; + +int transform(userec_t *new, userec_t *old, int i) +{ + userec_t *u = new; + int dirty = 0; + + memcpy(new, old, sizeof(userec_t)); + if (!u->userid[0]) + return 0; + + for (i = 0; ufmap_from[i]; i++) + { + int ov = (u->deprecated_uflag2 & ufmap_from[i]) ? 1 : 0, + nv = (u->uflag & ufmap_to[i]) ? 1 : 0; + if (ov == nv) + continue; + + if (dirty++ == 0) printf("%s: %08X => [", u->userid, u->uflag); + u->uflag &= ~(ufmap_to[i]); + if (u->deprecated_uflag2 & ufmap_from[i]) + { + u->uflag |= ufmap_to[i]; + printf("%s ", ufmap_names[i]); + } + } + if (!dirty) + return 0; + + printf("] => %08X\n", u->uflag); + // force convert! + // passwd_update(n+1, u); + + return 0; +} + +int main(void) +{ + int fd, fdw; + userec_t new; + userec_t old; + int i = 0; + + printf("sizeof(userec_t)=%u\n", (unsigned int)sizeof(userec_t)); + printf("You're going to convert your .PASSWDS\n"); + printf("The new file will be named .PASSWDS.trans.tmp\n"); + + if (chdir(BBSHOME) < 0) { + perror("chdir"); + exit(-1); + } + + if ((fd = open(FN_PASSWD, O_RDONLY)) < 0 || + (fdw = open(FN_PASSWD".trans.tmp", O_WRONLY | O_CREAT | O_TRUNC, 0600)) < 0 ) { + perror("open"); + exit(-1); + } + + while (read(fd, &old, sizeof(old)) > 0) { + transform(&new, &old, ++i); + write(fdw, &new, sizeof(new)); + } + + close(fd); + close(fdw); + + // printf("total %d records converted.\n", accs); + return 0; +} -- cgit v1.2.3