Back to index

lightning-sunbird  0.9+nobinonly
mangle.c
Go to the documentation of this file.
00001 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /* ***** BEGIN LICENSE BLOCK *****
00003  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00004  *
00005  * The contents of this file are subject to the Mozilla Public License Version
00006  * 1.1 (the "License"); you may not use this file except in compliance with
00007  * the License. You may obtain a copy of the License at
00008  * http://www.mozilla.org/MPL/
00009  *
00010  * Software distributed under the License is distributed on an "AS IS" basis,
00011  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00012  * for the specific language governing rights and limitations under the
00013  * License.
00014  *
00015  * The Original Code is mozilla.org code.
00016  *
00017  * The Initial Developer of the Original Code is
00018  * Netscape Communications Corporation.
00019  * Portions created by the Initial Developer are Copyright (C) 1998
00020  * the Initial Developer. All Rights Reserved.
00021  *
00022  * Contributor(s):
00023  *
00024  * Alternatively, the contents of this file may be used under the terms of
00025  * either of the GNU General Public License Version 2 or later (the "GPL"),
00026  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00027  * in which case the provisions of the GPL or the LGPL are applicable instead
00028  * of those above. If you wish to allow use of your version of this file only
00029  * under the terms of either the GPL or the LGPL, and not to allow others to
00030  * use your version of this file under the terms of the MPL, indicate your
00031  * decision by deleting the provisions above and replace them with the notice
00032  * and other provisions required by the GPL or the LGPL. If you do not delete
00033  * the provisions above, a recipient may use your version of this file under
00034  * the terms of any one of the MPL, the GPL or the LGPL.
00035  *
00036  * ***** END LICENSE BLOCK ***** */
00037 
00038 #include <windows.h>
00039 #include <stdio.h>
00040 #include <stdlib.h>
00041 
00042 HANDLE hMangleFile;
00043 
00044 void Usage(void)
00045 {
00046     fprintf(stderr, "MANGLE: <file>\n");
00047 }
00048 
00049 BOOL MangleFile( const char *real_name, const char *mangle_name ) 
00050 {
00051     int len;
00052     DWORD dwWritten;
00053     char buffer[2048];
00054 
00055     if( mangle_name && *mangle_name && strcmpi(real_name, mangle_name) ) {
00056         printf("Mangle: renaming %s to %s\n", real_name, mangle_name);
00057 
00058         if( ! MoveFile(real_name, "X_MANGLE.TMP") ) {
00059             fprintf(stderr, "MANGLE: cannot rename %s to X_MANGLE.TMP\n", 
00060                     real_name);
00061                 return FALSE;
00062         }
00063 
00064         if( ! MoveFile("X_MANGLE.TMP", mangle_name) ) {
00065             MoveFile("X_MANGLE.TMP", real_name);
00066             fprintf(stderr, "MANGLE: cannot rename X_MANGLE.TMP to %s\n", 
00067                     mangle_name);
00068             return FALSE;
00069         }
00070 
00071         len = sprintf(buffer, "mv %s %s\r\n", mangle_name, real_name);
00072 
00073         if( (WriteFile( hMangleFile, buffer, len, &dwWritten, NULL ) == FALSE) ||
00074             (dwWritten != len) ) {
00075             fprintf(stderr, "MANGLE: error writing to UNMANGLE.BAT\n");
00076             return FALSE;
00077         }
00078     }
00079     return TRUE;
00080 }
00081 
00082 
00083 int main( int argc, char *argv[] ) 
00084 {
00085     WIN32_FIND_DATA find_data;
00086     HANDLE hFoundFile;
00087 
00088     if( argc != 1 ) {
00089         Usage();
00090         return 2;
00091     }
00092 
00093 
00094     hMangleFile = CreateFile("unmangle.bat",    /* name                */
00095                     GENERIC_READ|GENERIC_WRITE, /* access mode         */
00096                     0,                          /* share mode          */
00097                     NULL,                       /* security descriptor */
00098                     CREATE_NEW,                 /* how to create       */
00099                     FILE_ATTRIBUTE_NORMAL,      /* file attributes     */
00100                     NULL );                     /* template file       */
00101 
00102     if( hMangleFile == INVALID_HANDLE_VALUE ) {
00103         if( GetLastError() == ERROR_FILE_EXISTS ) {
00104             fprintf(stderr, "MANGLE: UNMANGLE.BAT already exists\n");
00105         } else {
00106             fprintf(stderr, "MANGLE: cannot open UNMANGLE.BAT\n");
00107         }
00108         return 1;
00109     }
00110 
00111     if( (hFoundFile = FindFirstFile("*.*", &find_data)) == INVALID_HANDLE_VALUE ) {
00112         fprintf(stderr, "MANGLE: cannot read directory\n");
00113         return 1;
00114     }
00115 
00116     do {
00117         if( !MangleFile(find_data.cFileName, find_data.cAlternateFileName) ) {
00118             fprintf(stderr, "MANGLE: cannot rename %s to %s\n",
00119                     find_data.cFileName, find_data.cAlternateFileName );
00120     
00121             FindClose( hFoundFile );
00122             CloseHandle( hMangleFile );
00123             return 1;
00124         }
00125     } while( FindNextFile(hFoundFile, &find_data) );
00126     FindClose( hFoundFile );
00127 
00128     {
00129         int len;
00130         DWORD dwWritten;
00131         char buffer[255];
00132 
00133         len = sprintf(buffer, "del unmangle.bat\r\n");
00134         WriteFile  ( hMangleFile, buffer, len, &dwWritten, NULL );
00135     }
00136     CloseHandle( hMangleFile );
00137 
00138     return 0;
00139 }